List of ObjectTeam BooksCopyright ⌐1997 Cayenne Software, Inc. All rights reserved.Cayenne Software, Inc. 14 Crosby Drive Bedford, MA 01730 The information in this document is subject to change without notice. Cayenne Software, Inc. makes no warranty of any kind regarding this material and assumes no responsibility for any errors that may appear in this document. Terrain, S-CASE, and BACHMAN are registered trademarks of Cayenne Software, Inc. Cayenne, Cayenne Software, Cayenne Software, Inc., the Cayenne logo, Cayenne 2000, Cayenne DB2 Catalog Extract, Cayenne/GroundWorks Capture, Cayenne/GroundWorks Link, Cayenne/Business Rules Capture, Cayenne/DDL Generator, Cayenne/Function Point Analyst, Cayenne/Generator, Cayenne/Production DBA, Cayenne/Reports, Cayenne/Shared Work Manager, GroundWorks, Serveyor, Terrain 100/O, Terrain 100/S, Terrain AppGen for PowerBuilder, Terrain for DB2, TerrainMap, Terrain.net, and PepperSeed are trademarks of Cayenne Software, Inc. Cadre, Cadre Technologies, Inc., CASEteam, CodeMap, Data Driven Re-Engineering, DB Data Analyzer, Design by Example, DocConnect, Ensemble, ObjectTeam, PathMap, SoftAnalyst, SymTrace, TeamWork, the TeamWorklogo, TeamWork/ACCESS, TeamWork/Ada, TeamWork/C Rev, TeamWork/C Source Builder, TeamWork/DocGen, TeamWork/DSE, TeamWork/FORTRAN Rev, TeamWork/IM, TeamWork/IPSE_toolkit, TeamWork/RqT, TeamWork/RT, TeamWork/SA, TeamWork/SD, TeamWork/SIM, TeamWork/TestCase, and Unified CASE are registered trademarks of Cadre Technologies Inc., a wholly owned subsidiary of Cayenne Software, Inc. VantageTeam is a trademark of Cadre Technologies Inc., a wholly owned subsidiary of Cayenne Software, Inc. Any other company and product names used herein may be the trademarks or registered trademarks of their respective companies. RESTRICTED RIGHTS: Use, duplication, or disclosure by the Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFAR 252.227-7013 (48 CFR). Contractor/Manufacturer is Cayenne Software, Inc., 14 Crosby Drive, Bedford, Massachusetts 01730. NOTICE: Notwithstanding any other lease or license agreement that may pertain to or accompany the delivery of this restricted computer software, the rights of the Government regarding use, reproduction, and disclosure are as set forth in subparagraph (c)(1) and (2) of Commercial Computer Software-Restricted Rights clause at FAR 52.227-19.List of Book TitlesIntroductionThe collection of ObjectTeam online books is divided into seven sets. When you open the ObjectTeam online book collection, DynaText displays the seven set titles. When you open a set, DynaText displays all the books in that set.Below is a brief description of the books that appear in each set.Installation SetThese books are most useful to the ObjectTeam administrator. n ObjectTeam Installation Guide. Describes how to install the ObjectTeam software on both server and client computers.System Administrator's Setn ObjectTeam System Administrator's Guide. Describes the architecture of the ObjectTeam product; the backup, restore and conversion tools provided with the product; and how to maintain the ObjectTeam environment.User SetThese books are intended for all ObjectTeam users.n ObjectTeam Getting Started. Describes the primary features of ObjectTeam and provides a brief tutorial of the product. If you are a new user, this book is strongly recommended as your starting point.n ObjectTeam Modeling Guide. Describes the core features of the product: the ObjectTeam Browser, diagram editors, Check utility, Reports, and Class Browser.n ObjectTeam Project Management Guide. Describes the project management features of the product: version and configuration management, user environment settings, use of corporate groups, and access control.Document Generation Setn ObjectTeam Document Generation Guide. Describes how to use the document generation tools to generate complete, formatted project documentation.n DocExpress User Guide. Describes how to use DocExpress.n DocExpress Utilities Guide. Describes the DocExpress utilities.n DocIt User Guide. Describes how to use DocIt.Code Generation SetThese books are intended for ObjectTeam users who are generating code. Use the book appropriate for your target language.n ObjectTeam Ada Professional Developer's Toolkit n ObjectTeam Code Generation Guide for C++ n ObjectTeam Code Generation Guide for CORBA IDL n ObjectTeam Code Generation Guide for Delphi n ObjectTeam Code Generation Guide for FortΘ n ObjectTeam Code Generation Guide for Java n ObjectTeam Code Generation Guide for Informix New Era n ObjectTeam Code Generation Guide for PowerBuilder n ObjectTeam Code Generation Guide for Smalltalk n ObjectTeam Code Generation Guide for Visual Basic Programmer's SetThese books are intended for ObjectTeam users who are customizing the ObjectTeam product:n ObjectTeam Customization Guide. Describes how to use M4_ variables, customization files, and Tcl files to customize ObjectTeam.n ObjectTeam Programming Interface Guide. Describes the interface of the Cayenne repository and the syntax of the object-oriented Tcl extensions used to access the repository.Integrations SetThese books are intended for users of ObjectTeam integrations. Use the book appropriate for your product.n ObjectTeam RTM Integration Guide. Describes the integration of ObjectTeam with RTM, a requirements traceability management tool.n ObjectTeam DOORS Integration Guide. Describes the integration of ObjectTeam with DOORS, a requirements traceability management tool.n ObjectTeam ClearCase Integration Guide. Describes the integration of ObjectTeam with ClearCase, a version control management tool.n ObjectTeam Continuus Integration Guide. Describes the integration of ObjectTeam with Continuus, a version control management tool.n ObjectTeam Razor Integration Guide. Describes the integration of ObjectTeam with Razor, a version control management tool.About the DocumentationPlatform differencesMost ObjectTeam features are available on both UNIX and Microsoft Windows. Where a guide applies to both platforms, paths are represented in the Microsoft style, in which a backslash (\) separates individual directories. For instance:M4_home\binIf you are working on a UNIX-based platform, replace all backslashes in paths with slash marks (/).The screen shots in this manual may have been taken on a different platform from the one you are using.Typographical conventionsThis manual uses the following typographical conventions:COLS="3"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="175p"COLNAME="3" COLWIDTH="144p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ConventionCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="3" VALIGN="TOP" MOREROWS="0"exampleCOLNAME="1" VALIGN="TOP" MOREROWS="0"bold COLNAME="2" VALIGN="TOP" MOREROWS="0"File names and commandsCOLNAME="3" VALIGN="TOP" MOREROWS="0"desk.mnu COLNAME="1" VALIGN="TOP" MOREROWS="0"italic COLNAME="2" VALIGN="TOP" MOREROWS="0"Document titles; first use of new terms; variables; procedure resultsCOLNAME="3" VALIGN="TOP" MOREROWS="0"A role right is a set of....COLNAME="1" VALIGN="TOP" MOREROWS="0"courier COLNAME="2" VALIGN="TOP" MOREROWS="0"User input and system outputCOLNAME="3" VALIGN="TOP" MOREROWS="0"expand_file COLNAME="1" VALIGN="TOP" MOREROWS="0"Initial CapitalsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object names and user interface features, such as commands, window titles, buttons, and field labelsCOLNAME="3" VALIGN="TOP" MOREROWS="0"The Class Diagram editor...COLNAME="1" VALIGN="TOP" MOREROWS="0"Pipe symbol ( | )COLNAME="2" VALIGN="TOP" MOREROWS="0"Successive menu itemsCOLNAME="3" VALIGN="TOP" MOREROWS="0"Select File | New.Support for Cayenne ProductsResourcesIf you have questions or are interested in other Cayenne products, consider the following resources:n Cayenne Technical Support is available to answer any questions you might have about Cayenne products.n Cayenne Training/Consulting Services can help you get the most out of Cayenne products by providing information about training courses and consulting services.n Your sales representative can provide information about or additional copies of any Cayenne product.n Cayenne's World Wide Web page, http://www.cayennesoft.com, provides contact numbers for the resources listed above, as well as up-to-date product information.Installation SetInstallation Guide for UNIX-Based SystemsChapter 1 Preparing for InstallationTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes the steps that you should take before you install ObjectTeam.n Check the contents of your installation package.n Determine the type of installation required for ObjectTeam at your site.n Ensure that the targeted workstation(s) meet all the hardware and software requirements for installing the product.n Determine what other software you need to install.n Preview the installation workflow.What do you need?Before you can install ObjectTeam you must have the following items:n The ObjectTeam CDn A valid licensen The Informix OnLine CD (if you are using Informix as your repository)In addition, to complete the installation successfully, for the computer onto which you intend to install the ObjectTeam server software, you should have the following:n The password for a user account that has superuser privileges (you must perform some steps while logged in as root)n The username and password of the database administrator account, where applicableIn this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31881" TYPE="XREF-TEXTCOPY"Choosing an Installation Type 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21051" TYPE="XREF-TEXTCOPY"Requirements 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="31881"Choosing an Installation TypeIntroductionA complete ObjectTeam installation contains the following components:n ObjectTeam server softwaren ObjectTeam client softwaren DBMS softwaren License management softwareTo decide the type of installation that you want to perform, you must first determine which computers will be running each of these sets of software.This section helps you answer these questions. ObjectTeam client and server softwareObjectTeam has a client/server design. This means that the software can be distributed over a network of computers, with client computers and server computers executing different types of processes.FILENAME="00001.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/igun/igunprep.fm5.mif"Client computersClient computers run the ObjectTeam client software. End-users use the client software, for example, to edit diagrams, run reports, and generate code. Model data created by users is stored centrally in a database on the server. Generated code and documents are stored on a user's own machine.A client computer can be a UNIX workstation or a PC running Windows 95 or Windows NT.Server computersA server computer runs the ObjectTeam server software, and database software for storing users' project data. The server software is usually started at system boot time, and does things like interact with the database and coordinate requests from clients. Users generally do not directly invoke server software.A server computer is a UNIX workstation. A client/server configuration allows multiple users to work simultaneously with ObjectTeam, and thus share data. ObjectTeam databaseObjectTeam stores project data in a database. The database management system (DBMS) used is either Informix or Oracle. You must install the database software before installing ObjectTeam. If you are using Informix, then the Informix OnLine software is supplied on a separate CD in your package. Oracle software is not supplied with ObjectTeam. ObjectTeam license managerThe various features of ObjectTeam, such as browsers and code generators, are all licensed individually. In ObjectTeam, a licensing system maintains a count of the usage of each feature. The license management system used by ObjectTeam is FLEXlm from Globetrotter Software. Installation typesObjectTeam distinguishes between the following types of machine:COLS="2"COLNAME="1" COLWIDTH="132p"COLNAME="2" COLWIDTH="315p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigurationCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"Master ServerCOLNAME="2" VALIGN="TOP" MOREROWS="0"This is a machine that runs all the ObjectTeam server software as well as the client software. There must always be a single Master server present in your network. The Master server can also run the DBMS software and the License server software.COLNAME="1" VALIGN="TOP" MOREROWS="0"Slave ServerCOLNAME="2" VALIGN="TOP" MOREROWS="0"This is an optional server running on a separate machine from the Master server. You can choose to install one or more Slave servers to distribute the server load. A Slave server runs a subset of the ObjectTeam server and DBMS software as well as the ObjectTeam client software.COLNAME="1" VALIGN="TOP" MOREROWS="0"ClientCOLNAME="2" VALIGN="TOP" MOREROWS="0"This is a machine that only runs the client software. Example configurationsWhich installation you perform on a machine depends on what kind of overall configuration in which you want to run ObjectTeam. The following examples show some default configurations covered by the instructions in this guide.StandaloneThis is the simplest configuration. A single machine is configured as Master server, and is running the ObjectTeam server software, ObjectTeam client software, DBMS software and FLEXlm license software. FILENAME="00002.tif" ORIGSEQ="3" ORIGTYPE="I" ORIGDOC="../../sources/igun/igunprep.fm5.mif"Client/serverIn this example, a machine configured as Master server is running the ObjectTeam server and client software and is serving multiple client machines. The DBMS software and FLEXlm license software been installed on separate machines from the ObjectTeam Master server.FILENAME="00003.tif" ORIGSEQ="12" ORIGTYPE="I" ORIGDOC="../../sources/igun/igunprep.fm5.mif"The easiest way to configure an ObjectTeam client is to mount the ObjectTeam product files from the Master server on the client machine. Alternatively you can install a separate set of product files on the client.Distributed Master and Slave serversIn this example, to spread the load on the Master server, a separate machine has been configured as an ObjectTeam Slave server and is serving several of its own clients. FILENAME="00004.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/igun/igunprep.fm5.mif"The easiest way to configure a Slave server is to mount both the ObjectTeam product files from the Master server and the DBMS files from the machine running the DBMS. This is useful where you want to reduce the load on the Master server's CPU, but your network is not a bottleneck. Alternatively, to further reduce network traffic between the Master and Slave, you can install a separate set of ObjectTeam product files on the Slave server and configure the Slave server as a DBMS client.ObjectTeam client machines can run off either the Master or Slave server. By default, the maximum number of client computers you can attach to a server is unlimited.ID="21051"RequirementsProduct requirementsObjectTeam uses or integrates with various other software packages, such as:n Repository DBMS'sn Software development tools, such as compilers, class libraries, etc.n Version and configuration management productsn Document publishing packagesn Requirements tracking packagesFor details on the requirements for these packages, read the Certification matrix. Hardware requirements for your workstation are displayed during the installation procedure. You should also read the ObjectTeam Read Me First Notes before starting installation. These contain last-minute product information that may affect the installation. Reading the ObjectTeam Certification matrix and Read Me First NotesΣ To read the Certification matrix and Read Me First Notes:1 Log in as root and mount the CD on your file system:2 Solaris: mount -F hsfs -o ro /dev/sr0 /cdrom HP-UX: /etc/mount -F cdfs /dev/dsk/c1t2d0 /cdrom AIX: /usr/sbin/mount -v 'cdrfs' -r /dev/cd0 /cdrom D-UX: /usr/sbin/mount -t cdfs -o ro /dev/rz0c /cdrom3 Open the file /cdrom/readme.txt in a text editor, or open the file /cdrom/readme.htm in a Web browser.4 Open the file /cdrom/certify.htm in a Web browser.ID="29090"Network Software and Daemon ProcessesNetwork SoftwareIf the installation is taking place in a multi-computer environment, i.e., if files need to be sent over a network, the correct network software must be installed and working. Most of the checks also apply to standalone installations. The correct daemon processes must also be active. The following network software and daemon processes are needed:n NFS and ethernet TCP/IPn NFS server daemonn Input/output daemonn Internet Services DaemonNetwork Check Check whether the network is working properly. Create a remote shell on the host machine on which the database server runs:Σ If you are running ObjectTeam under Solaris, AIX or D-UX:1 Enter the following:rsh name_platform_db_serverΣ If you are running ObjectTeam under HP-UX:1 Enter the following:remsh name_platform_db_serverIf you do not receive an error message, the network is properly installed.Check HostsYou must check whether all the (host) machines intended to be used to run ObjectTeam are part of the network:n If NIS is installed, log in as root on the Network Information Server (NIS) and enter ypcat hosts and check that all hosts that are to run ObjectTeam are present.n If NIS is not installed, on each machine that is to run ObjectTeam, check that the /etc/inet/hosts file (Solaris) or the /etc/hosts file (HP-UX, AIX, D-UX) exists and that it contains entries for each host running ObjectTeam.Check UsersCheck whether the users are known on the platforms used by the product:n If NIS is installed, check if all platforms used with ObjectTeam are in the NIS system.n If NIS is not installed, check if all users are the same for every platform used with ObjectTeam.Chapter 2 Installing ID="38865"ObjectTeam SoftwareTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes how to carry out a standard installation of ObjectTeam on UNIX machines. UpgradingIf you are upgrading from a previous ObjectTeam installation, go to Chapter 3, Upgrading from a Previous Release, instead.Installing on WindowsFor details on how to install ObjectTeam on PCs running Windows 95 or Windows NT, refer to the ObjectTeam Installation Guide for Microsoft Windows.Which installation to performThis chapter covers the following installations:n Master server installationn Slave server installationn Client installationBefore you install ObjectTeam, you must decide which machine you want to make Master server. There can only be one Master server in your system. The Master server can also run the client software. In this chapter the installation directory is indicated as M4_home. The recommended location is /usr/cayenne/objectteam. Reading the Read Me First NotesThe Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation.To read the Read Me First Notes, open the file /cdrom/readme.txt in a text editor, or open the file /cdrom/readme.htm in a Web browser.For details of the supported Operating Systems and DBMS versions, open the file /cdrom/certify.htm in a web browser.Before you startBefore you start, you should have created a user cayenne and installed DynaText as described in the CD insert.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17595" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Master Server 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29343" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Slave Server 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28366" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Client 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'29ID="17595"Installing an ObjectTeam Master ServerIntroductionThis section describes how to install an ObjectTeam Master server.StepsΣ Installation of an ObjectTeam Master server involves the following steps:COLS="3"COLNAME="1" COLWIDTH="37p"COLNAME="2" COLWIDTH="103p"COLNAME="3" COLWIDTH="304p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"Done as userCOLNAME="3" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1aCOLNAME="2" VALIGN="TOP" MOREROWS="0"InformixCOLNAME="3" VALIGN="TOP" MOREROWS="0"Informix users only: REFID="19396" TYPE="XREF-TEXTCOPY"Install InformixCOLNAME="1" VALIGN="TOP" MOREROWS="0"1bCOLNAME="2" VALIGN="TOP" MOREROWS="0"OracleCOLNAME="3" VALIGN="TOP" MOREROWS="0"Oracle users only: REFID="28079" TYPE="XREF-TEXTCOPY"Create an Oracle User and TablespaceCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenne COLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="38599" TYPE="XREF-TEXTCOPY"Install Your LicenseCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="13560" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"rootCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="39599" TYPE="XREF-TEXTCOPY"Create an ObjectTeam ServiceCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="18567" TYPE="XREF-TEXTCOPY"Set ObjectTeam Environment VariablesCOLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="32806" TYPE="XREF-TEXTCOPY"Create a Cayenne RepositoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"rootCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="15479" TYPE="XREF-TEXTCOPY"Update The Startup FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional: Configure modules as described in Chapter 4, Activating Modules.ID="19396"Install InformixInstalling InformixThis step only applies if you are using Informix as your repository database.If you do not have an Informix installationA version of Informix for your UNIX platform is supplied with your ObjectTeam package. For details on how to install Informix, refer to Appendix C, Installing Informix.If you already have an Informix installationIf you already have Informix installed, read Appendix C, Installing Informix, for details on configuring your Informix installation to work with ObjectTeam.Once you have installed or configured Informix, proceed to REFID="38599" TYPE="XREF-TEXTCOPY"Install Your License.ID="28079"Create an Oracle User and TablespaceIntroductionThis step only applies if you are using Oracle as your repository database. This section assumes you already have Oracle installed.Checking your Oracle installation1 Log in as "oracle" to the UNIX system.2 If you are not using SQL*Net, enter:%sqlplus system/managerwhere system is an account and manager is the password.3 If you are using SQL*Net, enter:%sqlplus system/manager@Demowhere Demo is the SQL*Net database specification string.A successful connection results in a prompt like the following:sql>Creating an Oracle tablespaceYou must create a new Oracle tablespace. This tablespace will be used as the default tablespace of the Oracle User to be created. The Oracle User will contain the Cayenne repository. Otherwise the Cayenne repository will be created in the "system" tablespace reserved for system data.The following shows an example of creating a new tablespace:SQL> create tablespace cayennesp datafile '/home/oracle/dbs/oradata/demo/cayennesp01.dbf' size 128m;This creates a tablespace called "cayennesp". In addition, the file cayennesp01.dbf is created in your oradata directory. The oradata directory is created at Oracle installation time. Its location can vary.How to create an Oracle UserΣ To create an Oracle User:1 While logged in as oracle, use either the Create User dialog box of SQL*DBA or the SQL command CREATE USER.The following shows an example of the second option. SQL> create user cayenne identified by password default tablespace cayennesp;SQL> grant connect, resource to cayenne;SQL> quitFor more details, refer to the Oracle Server Administrator's Guide.ID="38599"Install Your LicenseLicensingTo install ObjectTeam 7.1.1, you must configure licensing. How you do this depends on whether you have a temporary or permanent license:Temporary licenseYou must install your ObjectTeam license as described in this section.Permanent licenseYou must install a license server, as decribed in Appendix B, Configuring a License Server. After you have done that, continue to REFID="13560" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files.How to install your licenseΣ To install your temporary license file:1 Log in as cayenne.2 Make a FLEXlm license directory:mkdir -p /usr/cayenne/flexlm/license3 If you received the license:- On a floppy or CD, copy the license to /usr/cayenne/flexlm/license/cayenne.dat- Via email, copy and paste the new feature information into an empty text file and save it as /usr/cayenne/flexlm/license/cayenne.dat- Via fax, enter the new feature information by hand into an empty text file, and save it as /usr/cayenne/flexlm/license/cayenne.datObtaining a permanent licenseYour temporary license allows you to install and run ObjectTeam for a limited period. If after installing ObjectTeam, you decide you want to make your installation permanent, you need to obtain a permanent license. For details on how to obtain a permanent license, see Appendix B, Configuring a License Server. ID="13560"Install the ObjectTeam Product FilesHow to install the ObjectTeam softwareΣ To install the ObjectTeam software:1 While logged in as user cayenne, run the ObjectTeam install script.Solaris: cd /cdrom/objecttm/sol/objecttm./instotHP-UX: cd /cdrom/OBJECTTM/HPUX/OBJECTTM./INSTOTAIX: cd /cdrom/objecttm/aix/objecttm./instotD-UX: cd /cdrom/OBJECTTM/DUX/OBJECTTM./INSTOTThe ObjectTeam product files are installed.2 You are asked if you want the ObjectTeam Product Documentation to be installed. Enter yes or no.ID="39599"Create an ObjectTeam Service Services fileOn every (UNIX) machine on which ObjectTeam is used, an internet service must be configured for communication with Broker processes. This is done using the services file. COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Operating SystemCOLNAME="2" VALIGN="TOP" MOREROWS="0"LocationCOLNAME="1" VALIGN="TOP" MOREROWS="0"SolarisCOLNAME="2" VALIGN="TOP" MOREROWS="0" /etc/inet/services COLNAME="1" VALIGN="TOP" MOREROWS="0"HP-UX, AIX and D-UXCOLNAME="2" VALIGN="TOP" MOREROWS="0" /etc/servicesThe services file defines the service/port number combination. Contents of the services fileThe services file contains a single entry for each known service on the network. Each line in the file contains the following information:servicenamename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'port_number/protocolname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name_aliasesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# some commentsAlthough servicename and port_number are arbitrary, they must be unique within the file and they must be identical on all computers running ObjectTeam server or client software. To prevent conflicts, most computers running in a network are installed with a Network Information System. In such a system all network information is stored centrally in the services file. Computers can access the information by sending a request to the Network Information Server (NIS). In the format shown above for the services file, name_aliases is optional and can be added. However, this facility is not supported in ObjectTeam. All text after the "#" is interpreted as comments and can be used to specify for which utility the service has been added.How to add a serviceΣ To add a service for ObjectTeam:1 Log in as root.2 Add the following service:ot_brokername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1825/udpname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Cayenne Repository brokerYour UNIX version may have an administration tool to do this (for example, on Solaris you can use admintool.)ID="18567"Set ObjectTeam Environment VariablesIntroductionBefore you can use ObjectTeam, you must set various ObjectTeam environment variables. This is done by running the m4create_env script.How to run m4create_envΣ To run m4create_env:1 Log in as cayenne.2 Set the necessary database environment variables for your DBMS in your current shell:- INFORMIXDIR and INFORMIXSERVER for Informix- ORACLE_HOME and ORACLE_SID for Oracle3 Change to the ObjectTeam bin directory:cd /usr/cayenne/objectteam/bin4 Enter the following at the command line:./m4create_envRunning m4create_envWhile running, m4create_env asks you to specify various options.1 You are asked for the location of your license file:a If you are running the license server software on this machine, or your license file is stored locally, the default is /usr/cayenne/flexlm/license/cayenne.dat. b If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a colon (:).2 You are asked to specify the type of installation. Options are Master server, Slave server, or Client. Accept the default of Master.A warning is displayed that various environment files are created by the script.3 Press Return to continue.The m4create_env script displays a summary of your operating system and repository DBMS. 4 Press Return to continue.5 You are asked to specify the value of the LC_CTYPE environment variable. The default is C. Press return to accept the default or specify a value.6 You are asked to specify the value of the LC_COLLATE environment variable. The default is C. Press return to accept the default or specify a value.7 IBM AIX only: You are asked to specify the value of the LC_NUMERIC environment variable. The default is C. Press return to accept the default or specify a value. Note that this may affect other numeric-based applications.The default printer is displayed. 8 You are asked if you want to change the default printer or printer command for ASCII printing. Specify the printer command or change the default printer. 9 You are asked if you want to change the default printer or printer command for graphical (PostScript) printing. Specify the printer command or change the default printer. 10 For FrameMaker users, you are asked if you want to accept the default version of FrameMaker (International English) or if you want to change to the US English version. Press Return to accept the default or type N to change to the US version.11 You are asked what kind of license you have. Press Return if you have a Temporary license or type 2 if you have a Permanent license.12 You are asked for the name of your repository DBMS home directory. The default is the directory you set in INFORMIXDIR or ORACLE_HOME. Press Return to accept the default.a If you are using Oracle as your repository, you are asked to specify the Oracle SID. The default is the value you set in ORACLE_SID. Press Return to accept the default.b If you are using Informix as your repository, you are asked to specify the name of the Informix server. The default is the value you set in INFORMIXSERVER. Press Return to accept the default or type 2 to change the server.13 The location of the DynaText installation. The default is /usr/cayenne/dtext23/binplatform where platform is one of sun5, hp, ibm, or decosf.Result of m4create_envM4create_env creates the following initial files: COLS="2"COLNAME="1" COLWIDTH="229p"COLNAME="2" COLWIDTH="231p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"/usr/cayenne/.m4_loginCOLNAME="2" VALIGN="TOP" MOREROWS="0"Login file sourced by .loginCOLNAME="1" VALIGN="TOP" MOREROWS="0"/usr/cayenne/.m4_profileCOLNAME="2" VALIGN="TOP" MOREROWS="0"Login file sourced by .profileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/etc/objservers.objserversCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne Repository definition fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/etc/m4env.m4envCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam environment variable fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/otCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Browser startup scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/starthelpCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Help tool startup scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/otreptoolCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne Repository tool startup scriptConfiguring your XdefaultsObjectTeam is provided with a set of sample Xdefaults. n If you have a $HOME/.Xdefaults file, merge the file /usr/cayenne/objectteam/etc/Xdefaults with your existing .Xdefaults file. n If you do not have a $HOME/.Xdefaults file, copy the sample .Xdefaults file to your home directory, as follows:cd $HOMEcp /usr/cayenne/objectteam/etc/Xdefaults .XdefaultsSetting your environmentΣ To set your environment variables, log out and log in again as cayenne.ID="32806"Create a Cayenne RepositoryIntroductionAfter you have installed the ObjectTeam Master server software from the CD, create a repository for your corporate data. Before you beginBefore you begin creating a repository, make sure that you haven Informix: Sufficient privileges to create a database.n A writable directory for storing the file system part of the repository. The recommended location is /usr/cayenne/repos.How to create a repositoryΣ To create a repository:1 While logged on to the Master server as cayenne, check that the Cayenne Repository Broker service (ot_broker) is running. If it is not, enter:ot_broker &2 Start the Repository tool by entering the following:otreptool &The Repository tool appears.3 Double-click on the Corporate Management tool.The Corporate Management tool appears.4 Select File | New.The New Repository dialog appears.FILENAME="00005.unk" ORIGFILE="pics/newrep.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/iguninst.fm5.mif"All fields are explained below.5 Fill in the fields, then click OK.A Monitor window is started which runs the dbserver command to create the repository. If the repository is created successfully, it becomes selected in the Corporate Management tool.FieldsThe New Repository dialog always contains the following fields:COLS="2"COLNAME="1" COLWIDTH="138p"COLNAME="2" COLWIDTH="309p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FieldCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"Corporate nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of your repository. This will appear as the corporate object (that is the top level) in the ObjectTeam Browser.COLNAME="1" VALIGN="TOP" MOREROWS="0"Make this repository the defaultCOLNAME="2" VALIGN="TOP" MOREROWS="0"This makes this repository the one that will be displayed in your Browser.COLNAME="1" VALIGN="TOP" MOREROWS="0"Directory in which to create the repositoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"The full pathname of the directory in which the file-system part of the repository is stored. The recommended location is /usr/cayenne/repos.COLNAME="1" VALIGN="TOP" MOREROWS="0"User Environment Root directoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"Optional. The directory in which all generated files, such as code files, are stored. The value specified here is assigned to the corporate-level File System Path Part property. Cayenne strongly recommends that you specify a directory on a network drive.Note: See the discussion of the user environment in the ObjectTeam Project Management Guide for more information about the File System Path Part property.It also contains a number of database-specific fields:COLS="2"COLNAME="1" COLWIDTH="138p"COLNAME="2" COLWIDTH="309p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FieldCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"Database nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Informix. This is the name of the database to be created.COLNAME="1" VALIGN="TOP" MOREROWS="0"Database serverCOLNAME="2" VALIGN="TOP" MOREROWS="0"Informix. This is the name of the machine on which Informix is running (referred to elsewhere in this guide as the Repository server).COLNAME="1" VALIGN="TOP" MOREROWS="0"Database connect stringCOLNAME="2" VALIGN="TOP" MOREROWS="0"Oracle. If SQL*Net is installed, specify the Oracle database specification string (ORACLE_SID), e.g., oracle7. If SQL*Net is not installed, enter "default" in this field and set the ORACLE_SID environment variable to the system identifier of the database that you want to use.COLNAME="1" VALIGN="TOP" MOREROWS="0"Database userCOLNAME="2" VALIGN="TOP" MOREROWS="0"Oracle. This is the schema id of the Oracle user. COLNAME="1" VALIGN="TOP" MOREROWS="0"Database passwordCOLNAME="2" VALIGN="TOP" MOREROWS="0"Oracle. Enter the password using the Enter button. This opens an entry dialog in which you can enter the password.Test Your InstallationΣ To test your installation, start the Browser:1 Start the Browser by entering:ot &The Browser window appears.Σ To access the product documentation, select Help | Product Documentation in the ObjectTeam Browser.TroubleshootingIf anything goes wrong during the creation of the repository or testing your installation, refer to Appendix D, Troubleshooting.ID="15479"Update The Startup FilesConfiguring the Broker Once you have tested your installation, it is convenient to configure the Cayenne Repository broker and license server to start automatically at boot time. Setting your startup fileΣ To set your startup file:1 Log in as root.2 Copy the default startup file:Solaris: cp /usr/cayenne/objectteam/etc/ot /etc/init.d/ot HP-UX: cp /usr/cayenne/objectteam/etc/ot /sbin/init.d/otAIX: cp /usr/cayenne/objectteam/etc/ot /etc/rc.otD-UX: cp /usr/cayenne/objectteam/etc/ot /etc/init.d/ot3 Make links to the startup fileSolaris: ln -s /etc/init.d/ot /etc/rc3.d/S19otln -s /etc/init.d/ot /etc/rc0.d/K19otHP-UX: ln -s /sbin/init.d/ot /sbin/rc2.d/S719otln -s /sbin/init.d/ot /sbin/rc0.d/K719otAIX: Add the following lines to /etc/inittab:ot:2:once: sh /etc/rc.ot startot:0:once: sh /etc/rc.ot stopD-UX: ln -s /sbin/init.d/ot /sbin/rc3.d/S19otln -s /sbin/init.d/ot /sbin/rc2.d/K19otYou can enter any numbers after S and K as long as startup and shutdown are done in the correct order. It is important that the DBMS server start before the ot_broker starts, and that the ot_broker stop before the DBMS server stops.Editing the startup fileΣ To have the ot_broker start automatically at boot time:1 Open the ot file you just copied in a text editor.2 If the license server is running on this machine, check the location of the FLEXlm installation and the ObjectTeam license file:LMHOME=/usr/cayenne/flexlmLM_LICENSE_FILE=$LMHOME/license/cayenne.datIf the license server is running on another machine, set the location of the ObjectTeam license server:LM_LICENSE_FILE=port@host3 Check the following line points to the root directory of the installation:M4_home=/usr/cayenne/objectteam4 If you did not install ObjectTeam as user cayenne, look for the following line:CAYNID=${CAYNID:-"cayenne"}and replace cayenne with the name of the user you used to install ObjectTeam.5 If this host is the license server, look for the following text:# If this script is run on the host used as license server,# uncomment one of the next two start-up instructions and# uncomment the line with 'lmdown' at the end of this file.and uncomment the appropriate lines depending on whether you want the license server to run with logging (default) or not. Do not uncomment these lines if you have a temporary license.6 If this host is the license server, look for the following text:# If this script is run on the host used as license server,# uncomment the next line to stop the daemon automatically.and uncomment the indicated line. Do not uncomment this line if you have a temporary license.Restarting the broker Σ To restart the broker (and license server if you installed FLEXlm on the Master server), reboot your machine.ID="29343"Installing an ObjectTeam Slave ServerChoosing an installation methodOn the ObjectTeam Master server, the product files are installed in the M4_home directory (by default /usr/cayenne/objectteam). There are two ways to install a Slave server:n Access the Master server's M4_home directory and the DBMS installation by mounting them using NFS. This is useful where you want to reduce the load on the Master server's CPU, but your network is not a bottleneck.n Install the ObjectTeam product files and a DBMS client locally on the Slave server machine. This has the advantage of further reducing network traffic between the Master and Slave.If M4_home is mounted, the directory hierarchy, including the location of the repository directory (the directory where all repository files reside), is automatically the same on both the Master server and Slave server. If the ObjectTeam product files are installed locally on the Slave server, the repository directory on the Master server must be mounted on the Slave in the same location.For example:mount Master:/usr/cayenne/repos /usr/cayenne/reposwhere Master is the name of the Master server.RequirementsBefore you can install an ObjectTeam Slave server, you must have installed an ObjectTeam Master server, as described in REFID="17595" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Master Server.The user cayenne must also be known on the Slave server.In this sectionThis section covers the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29700" TYPE="XREF-TEXTCOPY"Accessing a Mounted Installation from the Slave Server 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28210" TYPE="XREF-TEXTCOPY"Installing the Product Files on the Slave Server 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22ID="29700"Accessing a Mounted Installation from the Slave ServerIntroductionThis is the simplest way of installing a Slave server. With this type of installation, you access the ObjectTeam installation on the Master server.The Master must be configured as an NFS server and the file system to be mounted must be exported.Mount the ObjectTeam Product Files Σ Log in to the Slave server as root and mount the ObjectTeam /usr/cayenne/objectteam directory. Setting your startup file on the Slave serverΣ To set your startup file:1 Log in to the Slave server as root.2 Copy the default startup file:Solaris: cp $M4_home/etc/ot /etc/init.d/ot HP-UX: cp $M4_home/etc/ot /sbin/init.d/otAIX: cp $M4_home/etc/ot /etc/rc.otD-UX: cp $M4_home/etc/ot /etc/init.d/ot3 Make links to the startup fileSolaris: ln -s /etc/init.d/ot /etc/rc3.d/S19otln -s /etc/init.d/ot /etc/rc0.d/K19otHP-UX: ln -s /sbin/init.d/ot /sbin/rc2.d/S719otln -s /sbin/init.d/ot /sbin/rc0.d/K719otAIX: Add the following lines to /etc/inittab:ot:2:once: sh /etc/rc.ot startot:0:once: sh /etc/rc.ot stopD-UX: ln -s /sbin/init.d/ot /sbin/rc3.d/S19otln -s /sbin/init.d/ot /sbin/rc2.d/K19otYou can enter any numbers after S and K as long as startup and shutdown are done in the correct order. It is important that the DBMS server start before the ot_broker starts, and that the ot_broker stop before the DBMS server stops.Editing the startup fileΣ To have the ot_broker start automatically at boot time:1 While logged in as root, open the ot file you just copied in a text editor.2 Check the following line points to the root directory of the installation:M4_home=/usr/cayenne/objectteam3 Check the following lines point to the location of the FLEXlm installation and the license file:LMHOME=/usr/cayenne/flexlmLM_LICENSE_FILE=$LMHOME/license/cayenne.dat4 If you did not install ObjectTeam as user cayenne, look for the following line:CAYNID=${CAYNID:-"cayenne"}and replace cayenne with the name of the user you used to install ObjectTeam.5 If this host is the license server, look for the following text:# If this script is run on the host used as license server,# uncomment one of the next two start-up instructions and# uncomment the line with 'lmdown' at the end of this file.and uncomment the appropriate lines depending on whether you want the license server to run with logging (default) or not. Do not uncomment these lines if you have a temporary license.6 If this host is the license server, look for the following text:# If this script is run on the host used as license server,# uncomment the next line to stop the daemon automatically.and uncomment the indicated line. Do not uncomment this line if you have a temporary license.Restarting the broker Σ To restart the broker (and the license server if you installed FLEXlm on the Slave server), reboot your machine.Starting ObjectTeam as user cayenneΣ To start the ObjectTeam Browser:1 In your shell window, enter:ot &Σ To access the product documentation, select Help | Product Documentation in the ObjectTeam Browser.Running ObjectTeam as a normal user on the Slave serverIf you want to work on the Slave server as a normal user, you must configure a client, as described in REFID="12020" TYPE="XREF-TEXTCOPY"Accessing a Mounted Installation from the Client.ID="28210"Installing the Product Files on the Slave ServerIntroductionWith this type of installation you install the ObjectTeam product files on the Slave server. Installation StepsTo install ObjectTeam, perform the following steps:COLS="2"COLNAME="1" COLWIDTH="52p"COLNAME="2" COLWIDTH="391p"COLNAME="1" VALIGN="TOP" MOREROWS="0"stepCOLNAME="2" VALIGN="TOP" MOREROWS="0"taskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Mount the repository directory from the Master serverCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Install an RDBMS client on the SlaveCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Create /usr/cayenneCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Install the DynaText readerCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Install the ObjectTeam product files on the SlaveCOLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Set ObjectTeam environment variables using the m4create_env script. COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Set the broker to start automaticallyMount the repository directoryMount the repository directory from the Master server. The repository directory must be mounted on the Slave in the same location as on the Master server.For example:mount Master:/usr/cayenne/repos /usr/cayenne/reposwhere Master is the name of the Master server.Install an RDBMS client OracleFor details on how to install an Oracle client, see your Oracle system documentation.InformixSee REFID="17638" TYPE="XREF-TEXTCOPY"Setting Up Informix Client.Create a home directoryYou must create the home directory of user cayenne.1 Log in as root.2 Create the directory /usr/cayenne.How to install the ObjectTeam product filesΣ To install the ObjectTeam product files:1 While logged in as cayenne, run the ObjectTeam install script.Solaris: cd /cdrom/objecttm/sol/objecttm./instotHP-UX: cd /cdrom/OBJECTTM/HPUX/OBJECTTM./INSTOTAIX: cd /cdrom/objecttm/aix/objecttm./instotD-UX: cd /cdrom/OBJECTTM/DUX/OBJECTTM./INSTOTThe ObjectTeam product files are installed.2 You are asked if you want the ObjectTeam Product Documentation to be installed. Enter yes or no.How to install DynaTextΣ If you have installed the ObjectTeam documentation, you must install the DynaText reader:1 While logged in as cayenne, enter the following:mkdir /usr/cayenne/dtext23cd /usr/cayenne/dtext232 Untar the DynaText files:Solaris/AIX: tar xvf /cdrom/dynatext/unix/dtext23c.tarHP-UX/D-UX: tar xvf /cdrom/DYNATEXT/UNIX/DTEXT23C.TAR3 Run install.full 4 DynaText installs by default into the current directory. Follow the instructions:"Would you like to install as an evaluation copy?"a Enter "n" (for No). "Do you need to run the EBT Server?" b Enter "n"."Do you want to install as a run-time version of DynaText?" c Enter "y".5 You are asked which binaries and libraries to install. Enter "y" for your operating system and "n" for others. 6 Copy the DynaText resource file to your home directory:cp /usr/cayenne/dtext23/examples/ebtrc/.ebtrc /usr/cayenne 7 Open the file /usr/cayenne/.ebtrc in a text editor and add the following line:COLLECTION /usr/cayenne/objectteam/doc=ObjectTeam 7.1.1 Books8 To start DynaText, run /usr/cayenne/dtext23/binplatform/dtext& where platform is one of sun5, hp, ibm or decosf.How to add a serviceΣ When you installed the Master server, you added a service in the services file on the Master service. If NIS is not used, you must add a service for ObjectTeam on the Slave server also:1 Log in as root.2 Add the following service:ot_brokername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1825/udpname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Cayenne Repository brokerYour UNIX version may have an administration tool to do this (for example, on Solaris you can use admintool.)How to run m4create_envΣ To run m4create_env:1 Log in as cayenne.2 Set the necessary database environment variables for your DBMS in your current shell:- INFORMIXDIR and INFORMIXSERVER for Informix- ORACLE_HOME and ORACLE_SID for Oracle3 Change to the ObjectTeam bin directory:cd /usr/cayenne/objectteam/bin4 Enter the following at the command line:./m4create_envRunning m4create_envWhile running, m4create_env asks you to specify various options.1 You are asked for the location of your license file:a If you are running the license server software on this machine, or your license file is stored locally, the default is /usr/cayenne/flexlm/license/cayenne.dat. b If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a colon (:).2 You are asked to specify the type of installation. Options are Master server, Slave server, or Client. Select Slave server.A warning is displayed that various environment files are created by the script.3 Press Return to continue.The m4create_env script displays a summary of your operating system and repository DBMS. 4 Press Return to continue.5 You are asked to specify the value of the LC_CTYPE environment variable. The default is C. Press return to accept the default or specify a value.6 You are asked to specify the value of the LC_COLLATE environment variable. The default is C. Press return to accept the default or specify a value.7 IBM AIX only: You are asked to specify the value of the LC_NUMERIC environment variable. The default is C. Press return to accept the default or specify a value. Note that this may affect other numeric-based applications.The default printer is displayed. 8 You are asked if you want to change the default printer or printer command for ASCII printing. Specify the printer command or change the default printer. 9 You are asked if you want to change the default printer or printer command for graphical (PostScript) printing. Specify the printer command or change the default printer. 10 For FrameMaker users, you are asked if you want to accept the default version of FrameMaker (International English) or if you want to change to the US English version. Press Return to accept the default or type N to change to the US version.11 You are asked for the name of the Master server.12 You are asked what kind of license you have. Press Return if you have a Temporary license or type 2 if you have a Permanent license.13 You are asked for the name of your repository DBMS home directory. The default is the directory you set in INFORMIXDIR or ORACLE_HOME. Press Return to accept the default.a If you are using Oracle as your repository, you are asked to specify the Oracle SID. The default is the value you set in ORACLE_SID. Press Return to accept the default.b If you are using Informix as your repository, you are asked to specify the name of the Informix server. The default is the value you set in INFORMIXSERVER. Press Return to accept the default or type 2 to change the server.14 You are asked for the broker port which you set during installation of the Master server. The default is 1825.15 The location of the DynaText installation. Enter /usr/cayenne/dtext23/binplatform where platform is one of sun5, hp, ibm, or decosf.Result of m4create_envM4create_env creates the following initial files: COLS="2"COLNAME="1" COLWIDTH="229p"COLNAME="2" COLWIDTH="231p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"/usr/cayenne/.m4_loginCOLNAME="2" VALIGN="TOP" MOREROWS="0"Login file sourced by .loginCOLNAME="1" VALIGN="TOP" MOREROWS="0"/usr/cayenne/.m4_profileCOLNAME="2" VALIGN="TOP" MOREROWS="0"Login file sourced by .profileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/etc/objservers.objserversCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne Repository definition fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/etc/m4env.m4envCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam environment variable fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/otCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Browser startup scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/starthelpCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Help tool startup scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/otreptoolCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne Repository tool startup scriptConfiguring your XdefaultsObjectTeam is provided with a set of sample Xdefaults. n If you have a $HOME/.Xdefaults file, merge the file M4_home/etc/Xdefaults with your existing .Xdefaults file. n If you do not have a $HOME/.Xdefaults file, copy the sample .Xdefaults file to your home directory, as follows:cd $HOMEcp /usr/cayenne/objectteam/etc/Xdefaults .XdefaultsSetting your startup file on the Slave serverΣ To set your startup file:1 Log in to the Slave server as root.2 Copy the default startup file:Solaris: cp $M4_home/etc/ot /etc/init.d/ot HP-UX: cp $M4_home/etc/ot /sbin/init.d/otAIX: cp $M4_home/etc/ot /etc/rc.otD-UX: cp $M4_home/etc/ot /etc/init.d/ot3 Make links to the startup fileSolaris: ln -s /etc/init.d/ot /etc/rc3.d/S19otln -s /etc/init.d/ot /etc/rc0.d/K19otHP-UX: ln -s /sbin/init.d/ot /sbin/rc2.d/S719otln -s /sbin/init.d/ot /sbin/rc0.d/K719otAIX: Add the following lines to /etc/inittab:ot:2:once: sh /etc/rc.ot startot:0:once: sh /etc/rc.ot stopD-UX: ln -s /sbin/init.d/ot /sbin/rc3.d/S19otln -s /sbin/init.d/ot /sbin/rc2.d/K19otYou can enter any numbers after S and K as long as startup and shutdown are done in the correct order. It is important that the DBMS server start before the ot_broker starts, and that the ot_broker stop before the DBMS server stops.Editing the startup fileΣ To have the ot_broker start automatically at boot time:1 Open the ot file you just copied in a text editor.2 Check the following line points to the root directory of the installation:M4_home=/usr/cayenne/objectteam3 If the license server is running on this machine, check the location of the FLEXlm installation and the ObjectTeam license file:LMHOME=/usr/cayenne/flexlmLM_LICENSE_FILE=$LMHOME/license/cayenne.datIf the license server is running on another machine, set the location of the ObjectTeam license server:LM_LICENSE_FILE=port@host4 If you did not install ObjectTeam as user cayenne, look for the following line:CAYNID=${CAYNID:-"cayenne"}and replace cayenne with the name of the user you used to install ObjectTeam.5 If this host is the license server, look for the following text:# If this script is run on the host used as license server,# uncomment one of the next two start-up instructions and# uncomment the line with 'lmdown' at the end of this file.and uncomment the appropriate lines depending on whether you want the license server to run with logging (default) or not. Do not uncomment these lines if you have a temporary license.6 If this host is the license server, look for the following text:# If this script is run on the host used as license server,# uncomment the next line to stop the daemon automatically.and uncomment the indicated line. Do not uncomment this line if you have a temporary license.Restarting the broker Σ To restart the broker (and the license server if you installed FLEXlm on the Slave server), reboot your machine.The installation is now finished. ID="28366"Installing an ObjectTeam ClientChoosing an installation methodOn the ObjectTeam Master server, the product files are installed in the M4_home directory (by default /usr/cayenne/objectteam). There are two ways to install a client:n Access the server's M4_home directory by mounting it using NFS.n Install the ObjectTeam product files locally on the client machine.RequirementsBefore you can install an ObjectTeam client, you must have:n Installed an ObjectTeam Master server, as described in REFID="17595" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Master Server.In this sectionThis section covers the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12020" TYPE="XREF-TEXTCOPY"Accessing a Mounted Installation from the Client 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'30COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18541" TYPE="XREF-TEXTCOPY"Installing the Product Files on the Client 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'32Accessing a ID="12020"Mounted Installation from the ClientIntroductionThis is the simplest way of installing a client. With this type of installation, you access the ObjectTeam installation on the Master server or Slave server. The Master must be configured as an NFS server and the file system to be mounted must be exported.How to access the mounted Master server installationΣ To access the mounted Master server installation:1 Log in to the client as yourself, and copy either of the environment files .m4_profile or .m4_login from /usr/cayenne to your home directory, depending on which shell you use.2 Add the following line to the file you copied:setenv M4_imphost server_namewhere server_name is the name of the Master server.3 Add the following line to your .login file:source user_home/.m4_loginor the following line to your .profile file:. user_home/.m4_profile4 Create a file called .Meta4UserEnv in your home directory containing the line:M4_levelpath=/corporate_name;RWwhere corporate_name is the name of your repository.5 Source your .login or .profile file.The installation is now finished. Configure DynaTextBefore you can access the ObjectTeam Product Documentation, you must configure your DynaText installation.Σ Set the environment variable EBTRC to point to the .ebtrc file, as follows:.login: setenv EBTRC /usr/cayenne/.ebtrc.profile: EBTRC=/usr/cayenne/.ebtrcexport EBTRCStarting ObjectTeamΣ To start the ObjectTeam Browser:1 In your shell window, enter:ot &Σ To access the product documentation, select Help | Product Documentation in the ObjectTeam Browser.ID="18541"Installing the Product Files on the ClientIntroductionWith this type of installation you install the ObjectTeam product files on the client machine. Installation StepsTo install ObjectTeam, perform the following steps:COLS="2"COLNAME="1" COLWIDTH="52p"COLNAME="2" COLWIDTH="391p"COLNAME="1" VALIGN="TOP" MOREROWS="0"stepCOLNAME="2" VALIGN="TOP" MOREROWS="0"taskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Create /usr/cayenneCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Install the ObjectTeam product filesCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Install the DynaText readerCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Set ObjectTeam environment variables using the m4create_env script. Create a home directoryYou must create the home directory of user cayenne.1 Log in as root.2 Create the directory /usr/cayenne.How to install the ObjectTeam product filesΣ To install the ObjectTeam product files:1 Log in as cayenne, run the ObjectTeam install script.Solaris: cd /cdrom/objecttm/sol/objecttm./instotHP-UX: cd /cdrom/OBJECTTM/HPUX/OBJECTTM./INSTOTAIX: cd /cdrom/objecttm/aix/objecttm./instotD-UX: cd /cdrom/OBJECTTM/DUX/OBJECTTM./INSTOTThe ObjectTeam product files are installed.2 You are asked if you want the ObjectTeam Product Documentation to be installed. Enter yes or no.How to install DynaTextΣ If you have installed the ObjectTeam documentation, you must install the DynaText reader:1 While logged in as cayenne, enter the following:mkdir /usr/cayenne/dtext23cd /usr/cayenne/dtext232 Untar the DynaText files:Solaris/AIX: tar xvf /cdrom/dynatext/unix/dtext23c.tarHP-UX/D-UX: tar xvf /cdrom/DYNATEXT/UNIX/DTEXT23C.TAR3 Run install.full 4 DynaText installs by default into the current directory. Follow the instructions:"Would you like to install as an evaluation copy?"a Enter "n" (for No). "Do you need to run the EBT Server?" b Enter "n"."Do you want to install as a run-time version of DynaText?" c Enter "y".5 You are asked which binaries and libraries to install. Enter "y" for your operating system and "n" for others. 6 Copy the DynaText resource file to your home directory:cp /usr/cayenne/dtext23/examples/ebtrc/.ebtrc /usr/cayenne 7 Open the file /usr/cayenne/.ebtrc in a text editor and add the following line:COLLECTION /usr/cayenne/objectteam/doc=ObjectTeam 7.1.1 Books8 To start DynaText, run /usr/cayenne/dtext23/binplatform/dtext& where platform is one of sun5, hp, ibm or decosf.How to run m4create_envΣ To run m4create_env:1 Set the necessary database environment variables for your DBMS in your current shell:- INFORMIXDIR and INFORMIXSERVER for Informix- ORACLE_HOME and ORACLE_SID for Oracle2 Change to the ObjectTeam bin directory:cd /usr/cayenne/objectteam/bin3 Enter the following at the command line:./m4create_envRunning m4create_envWhile running, m4create_env asks you to specify various options.1 You are asked for the location of your license file:a If you are running the license server software on this machine, or your license file is stored locally, the default is /usr/cayenne/flexlm/license/cayenne.dat. If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a colon (:).2 You are asked to specify the type of installation. Options are Master server, Slave server, or Client. Select Client.A warning is displayed that various environment files are created by the script.3 Press Return to continue.The m4create_env script displays a summary of your operating system and repository DBMS. 4 Press Return to continue.5 You are asked to specify the value of the LC_CTYPE environment variable. The default is C. Press return to accept the default or specify a value.6 You are asked to specify the value of the LC_COLLATE environment variable. The default is C. Press return to accept the default or specify a value.7 IBM AIX only: You are asked to specify the value of the LC_NUMERIC environment variable. The default is C. Press return to accept the default or specify a value. Note that this may affect other numeric-based applications.The default printer is displayed. 8 You are asked if you want to change the default printer or printer command for ASCII printing. Specify the printer command or change the default printer. 9 You are asked if you want to change the default printer or printer command for graphical (PostScript) printing. Specify the printer command or change the default printer. 10 For FrameMaker users, you are asked if you want to accept the default version of FrameMaker (International English) or if you want to change to the US English version. Press Return to accept the default or type N to change to the US version.11 You are asked what kind of license you have. Press Return if you have a Temporary license or type 2 if you have a Permanent license.12 You are asked for the name of the Master server or Slave server to which this client is attached.13 You are asked for the name of the default repository. 14 You are asked for the broker port used to connect to the server. The default is 1825. This must agree with the number you specified when installing the Master server.15 The location of the DynaText installation. Enter /usr/cayenne/dtext23/binplatform where platform is one of sun5, hp, ibm, or decosf.Result of m4create_envM4create_env creates the following initial files: COLS="2"COLNAME="1" COLWIDTH="229p"COLNAME="2" COLWIDTH="231p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"/usr/cayenne/.m4_loginCOLNAME="2" VALIGN="TOP" MOREROWS="0"Login file sourced by .loginCOLNAME="1" VALIGN="TOP" MOREROWS="0"/usr/cayenne/.m4_profileCOLNAME="2" VALIGN="TOP" MOREROWS="0"Login file sourced by .profileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/etc/objservers.objserversCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne Repository definition fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/etc/m4env.m4envCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam environment variable fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/otCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Browser startup scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/starthelpCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Help tool startup scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/otreptoolCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne Repository tool startup scriptConfiguring your XdefaultsObjectTeam is provided with a set of sample Xdefaults. n If you have a $HOME/.Xdefaults file, merge the file M4_home/etc/Xdefaults with your existing .Xdefaults file. n If you do not have a $HOME/.Xdefaults file, copy the sample .Xdefaults file to your home directory, as follows:cd $HOMEcp /usr/cayenne/objectteam/etc/Xdefaults .XdefaultsSetting your environmentΣ To set your environment variables, log out and log in again.Starting ObjectTeamΣ To start the ObjectTeam Browser:1 In your shell window, enter:ot &Σ To access the product documentation, select Help | Product Documentation in the ObjectTeam Browser.Chapter 3 Upgrading ID="17129"from a Previous ReleaseTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes how to upgrade an existing installation of ObjectTeam from versions 5.1.1, 5.2.1 or 6.1.1 to version 7.1.1 on UNIX machines.Upgrading on WindowsFor details on how to upgrade ObjectTeam on PCs running Windows 95 or Windows NT, refer to the ObjectTeam Installation Guide for Microsoft Windows.Before you startBefore starting this upgrade procedure, you must have:n A working ObjectTeam installation. n Installed the DynaText browser software as described in the CD insert.n A new license fileDefault directoryIn this chapter, the installation directory for the ObjectTeam product files is indicated as M4_home. By default, this is /usr/cayenne/objectteam, however you can install ObjectTeam elsewhere on your machine.Reading the Read Me First NotesThe Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation.To read the Read Me First Notes, open the file /cdrom/readme.txt in a text editor, or open the file /cdrom/readme.htm in a Web browser.For details of the supported Operating Systems and DBMS versions, open the file /cdrom/certify.htm in a web browser.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22752" TYPE="XREF-TEXTCOPY"Upgrading an ObjectTeam Master Server 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36915" TYPE="XREF-TEXTCOPY"Upgrading an ObjectTeam Slave Server 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'24COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11115" TYPE="XREF-TEXTCOPY"Upgrading an ObjectTeam Client 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25ID="22752"Upgrading an ObjectTeam Master ServerIntroductionThis section describes how to upgrade an ObjectTeam Master server from versions 5.1.1, 5.2.1 or 6.1.1.StepsΣ Upgrading an ObjectTeam Master server on UNIX consists of the following steps:COLS="3"COLNAME="1" COLWIDTH="37p"COLNAME="2" COLWIDTH="103p"COLNAME="3" COLWIDTH="307p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"Done as userCOLNAME="3" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"ot4omtCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="39623" TYPE="XREF-TEXTCOPY"Dump Your Repository DataCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"rootCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="40016" TYPE="XREF-TEXTCOPY"Back Up Your ObjectTeam InstallationCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"rootCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="31802" TYPE="XREF-TEXTCOPY"Upgrade Your Operating SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"rootCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="40343" TYPE="XREF-TEXTCOPY"Upgrade Your DBMSCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"OracleCOLNAME="3" VALIGN="TOP" MOREROWS="0"Oracle users only: REFID="32991" TYPE="XREF-TEXTCOPY"Create an Oracle User and TablespaceCOLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenne COLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="37637" TYPE="XREF-TEXTCOPY"Install Your LicenseCOLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="15578" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="34520" TYPE="XREF-TEXTCOPY"Set ObjectTeam Environment VariablesCOLNAME="1" VALIGN="TOP" MOREROWS="0"9COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="26225" TYPE="XREF-TEXTCOPY"Move Your Repository Directory and Convert Your DataCOLNAME="1" VALIGN="TOP" MOREROWS="0"10COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="13441" TYPE="XREF-TEXTCOPY"Test Your InstallationCOLNAME="1" VALIGN="TOP" MOREROWS="0"11COLNAME="2" VALIGN="TOP" MOREROWS="0"rootCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="31132" TYPE="XREF-TEXTCOPY"Update The Startup FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"12COLNAME="2" VALIGN="TOP" MOREROWS="0"cayenneCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional: Configure modules as decribed in Chapter 4, Activating Modules.These steps are described in the rest of this section.ID="39623"Dump Your Repository DataIntroductionIn ObjectTeam, a repository consists of a database part and a file system part. The directory in which the file system part is stored is called the repository directory. This contains individual directories for each repository, called corporate directories. To convert your repository data to ObjectTeam 7.1.1, you must first dump the data from each repository to disk. The ObjectTeam dump facility dumps data from a single repository into its corresponding corporate directory. The result is a structure like the following:M4_home/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'corproot/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'repository_name/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBDUMP/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'tablesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'project_id/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBDUMP/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'tablesThe dumped database data is reloaded into a new database when you run the convert program.Note: By default, your 5.x or 6.1.1 repositories were created in the M4_home\corproot directory. If you created a repository in some other directory, either within or outside M4_home, you can choose to dump the database part to that directory instead. Make sure you also back up that directory after dumping your repository. Upload user environment filesBefore you dump your repository you should make sure it is complete by uploading the working versions of files in the file system, such as generated source files.Σ To upload your files from the user environment:1 Log on as ot4omt.2 Start the ObjectTeam Repository Tool.3 Double-click on the User Environment Tool.4 In the User Environment Tool, select your repository.5 Select View | Refresh to collate a list of all working versions of repository files in the file system.6 Select all the files which are unfrozen and select File | Upload.7 The files are loaded into the repository.How to dump your repository data from ObjectTeam 5.x or 6.1.1Σ To dump a repository from ObjectTeam 5.x or 6.1.1:1 While logged in as ot4omt, in the ObjectTeam Repository Tool, double-click on the Corporate Management Tool.The Corporate Management Tool starts up.2 In the Corporate Management Tool, select your repository.3 Select File | Backup.The Backup Repository dialog appears.FILENAME="00006.unk" ORIGFILE="pics/backrep611.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/igunupgr.fm5.mif"4 Select the Dump Database option, and deselect the Archive Repository option.5 Click Shutdown to shut down any running dbservers. Note: The dbservers will only shut down after all users have exited ObjectTeam.6 Click OK to proceed with the dump.The repository is dumped to the DBDUMP directory in the corporate directory. ID="40016"Back Up Your ObjectTeam InstallationIntroductionOnce you have dumped and backed up all repositories, you should make a complete backup of your ObjectTeam installation AND your repository databases. If for any reason you want to go back to your previous installation you can then restore your entire environment.6.1.1 upgrade onlyThe upgrade also requires that you move your ObjectTeam installation to a separate location on the same disk.Backing up your ObjectTeam installation Σ Once you have dumped and backed up all repositories:1 Log in as root.2 Back up the entire M4_home directory and DBMS databases to separate media, such as tape. Once you have successfully completed the upgrade, you can remove the backup if you wish.Note: If you have dumped any repositories to directories outside M4_home, be sure to back up these directories as well.Copying your ObjectTeam installation to a separate location6.1.1 upgrade onlyObjectTeam 7.1.1 installs by default into /usr/cayenne/objectteam. If you are upgrading from ObjectTeam 6.1.1, and your installation is in /usr/cayenne/objectteam, you need to move your installation to a separate location for the upgrade to work properly.1 While logged in as root, move your M4_home:mv /usr/cayenne/objectteam /usr/cayenne/objectteam_old2 Change the ownership of /usr/cayenne:chown cayenne /usr/cayenneID="31802"Upgrade Your Operating SystemUpgrading your operating systemUpgrade your operating system as described in your system manufacturer's documentation.ID="40343"Upgrade Your DBMSInstalling Informix 7.2Install Informix 7.2 as described in Appendix C, Installing Informix.You can install Informix 7.2 on the same node on which Informix 7.1 was installed. Before installing Informix 7.2, shut down any ObjectTeam and Informix processes. It is recommended that you do not delete the Informix 7.1 directory structure and database until you are sure the upgrade has been successful.Installing Oracle 7.3.xInstall Oracle 7.3.x as described in your Oracle documentation.For the exact version number, refer to the certification matrix on the CD.ID="32991"Create an Oracle User and TablespaceIntroductionThis step only applies if you are using Oracle as your repository database.Before you can convert your old repository data, you must make a new Oracle user for each repository you want to convert.Checking your Oracle installation1 Log in as "oracle" to the UNIX system.2 If you are not using SQL*Net, enter:%sqlplus system/managerwhere system is the user and manager is the password.3 If you are using SQL*Net, enter:%sqlplus system/manager@Demowhere Demo is the SQL*Net database specification string.A successful connection results in a prompt like the following:sql>Creating an Oracle tablespaceYou must create a new Oracle tablespace. This tablespace will be used as the default tablespace of the Oracle User to be created. Otherwise the ObjectTeam repository will be created in the "system" tablespace reserved for system data.The following shows an example of creating a new tablespace:SQL> create tablespace cayennesp datafile '/home/oracle/dbs/oradata/demo/cayennesp01.dbf' size 128m;This creates a tablespace called "cayennesp". In addition, the file cayennesp01.dbf is created in your oradata directory. The oradata directory is created at Oracle installation time. Its location can vary.How to create an Oracle UserΣ To create an Oracle User:1 While logged in as oracle, use either the Create User dialog box of SQL*DBA or the SQL command CREATE USER.The following shows an example of the second option. SQL> create user cayenne identified by password default tablespace cayennesp;SQL> grant connect, resource to cayenne;SQL> quitFor more details, refer to the Oracle Server Administrator's Guide.ID="37637"Install Your LicenseLicensingTo upgrade to ObjectTeam 7.1.1, you must configure licensing. How you do this depends on whether you have a temporary or permanent license:Temporary licenseYou must install your ObjectTeam license as described in this sectionPermanent license: n 5.x upgrades: You must install a license server, as decribed in Appendix B, Configuring a License Server. After you have done that, continue to REFID="15578" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files.n 6.1.1 upgrades: You should already have a license server installed. If you have received a permanent license with your ObjectTeam 7.1.1 package, make sure you have write permission to /usr/cayenne/flexlm/license, then follow the instructions in REFID="21534" TYPE="XREF-TEXTCOPY"Installing a Permanent License on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10, then proceed to REFID="15578" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files.Copying your temporary licenseΣ To install your temporary license file:1 Log in as cayenne.2 5.x upgrades: Make a FLEXlm license directory:mkdir -p /usr/cayenne/flexlm/license3 6.1.1 upgrades: Make sure you have write permission to /usr/cayenne/flexlm/license.4 If you received the license:- On a floppy or CD, copy the license to /usr/cayenne/flexlm/license/cayenne.dat- Via email, copy and paste the new feature information into an empty text file and save it as /usr/cayenne/flexlm/license/cayenne.dat- Via fax, enter the new feature information by hand into an empty text file, and save it as /usr/cayenne/flexlm/license/cayenne.datID="15578"Install the ObjectTeam Product FilesHow to install the ObjectTeam softwareΣ To install the ObjectTeam software:1 Mount the ObjectTeam CD, as described in the CD insert.2 Log in to the workstation as user cayenne.3 Run the ObjectTeam install script.Solaris: cd /cdrom/objecttm/sol/objecttm./instotHP-UX: cd /cdrom/OBJECTTM/HPUX/OBJECTTM./INSTOTAIX: cd /cdrom/objecttm/aix/objecttm./instotD-UX: cd /cdrom/OBJECTTM/DUX/OBJECTTM./INSTOTThe ObjectTeam product files are installed.4 You are asked if you want the ObjectTeam Product Documentation to be installed. Enter yes or no.ID="34520"Set ObjectTeam Environment VariablesIntroductionBefore you can use ObjectTeam, you must set various ObjectTeam environment variables. This is done by running the m4create_env script.How to run m4create_envΣ To run m4create_env:1 Log in as cayenne.2 Set the necessary database environment variables for your DBMS in your current shell:- INFORMIXDIR and INFORMIXSERVER for Informix- ORACLE_HOME and ORACLE_SID for Oracle3 Change to the ObjectTeam bin directory:cd /usr/cayenne/objectteam/bin4 Enter the following at the command line:./m4create_envRunning m4create_envWhile running, m4create_env asks you to specify various options.1 You are asked for the location of your license file:a If you are running the license server software on the Master server, the default is your existing setting of LM_LICENSE_FILE. If you do not have this variable set, the default is /usr/cayenne/flexlm/license/cayenne.dat. b If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a colon (:).2 You are asked to specify the type of installation. Options are Master server, Slave server, or Client. Accept the default of Master.A warning is displayed that various environment files are created by the script.3 Press Return to continue.The m4create_env script displays a summary of your operating system and repository DBMS. 4 Press Return to continue.5 You are asked to specify the value of the LC_CTYPE environment variable. The default is C. Press return to accept the default or specify a value.6 You are asked to specify the value of the LC_COLLATE environment variable. The default is C. Press return to accept the default or specify a value.The default printer is displayed. 7 You are asked if you want to change the default printer or printer command for ASCII printing. Specify the printer command or change the default printer. 8 You are asked if you want to change the default printer or printer command for graphical (PostScript) printing. Specify the printer command or change the default printer. 9 For FrameMaker users, you are asked if you want to accept the default version of FrameMaker (International English) or if you want to change to the US English version. Press Return to accept the default or type N to change to the US version.10 You are asked what kind of license you have. Press Return if you have a Temporary license or type 2 if you have a Permanent license.11 You are asked for the name of your repository DBMS home directory. The default is the directory you set in INFORMIXDIR or ORACLE_HOME. Press Return to accept the default.a If you are using Oracle as your repository, you are asked to specify the Oracle SID. The default is the value you set in ORACLE_SID. Press Return to accept the default.b If you are using Informix as your repository, you are asked to specify the name of the Informix server. The default is the value you set in INFORMIXSERVER. Press Return to accept the default or type 2 to change the server.12 The location of the DynaText installation. The default is /usr/cayenne/dtext23/binplatform where platform is one of sun5, hp, ibm, or decosf.Result of m4create_envM4create_env creates the following initial files: COLS="2"COLNAME="1" COLWIDTH="235p"COLNAME="2" COLWIDTH="241p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"/usr/cayenne/.m4_loginCOLNAME="2" VALIGN="TOP" MOREROWS="0"Login file sourced by .loginCOLNAME="1" VALIGN="TOP" MOREROWS="0"/usr/cayenne/.m4_profileCOLNAME="2" VALIGN="TOP" MOREROWS="0"Login file sourced by .profileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/etc/objservers.objserversCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Repository definition fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/etc/m4env.m4envCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam environment variable fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/otCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Browser startup scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/starthelpCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Help tool startup scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_home/bin/otreptoolCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Repository tool startup scriptSetting your environmentΣ To set your environment variables, log out and log in again as cayenne.ID="26225"Move Your Repository Directory and Convert Your DataBefore you startn If you have a permanent license, make sure your license server is running. If not, start it as follows:/usr/cayenne/flexlm/bin/lmgrd -c /usr/cayenne/flexlm/license/cayenne.datn Make sure the Cayenne broker (ot_broker) is running. If not, start it as follows:ot_broker &Moving your repository directoryMake sure you are logged on as user cayenne.Upgrade from 5.xYour repositories should be in /usr/ot4omt/corproot. Move the contents of the corproot directory to the new default location:mkdir /usr/cayenne/reposcp -r /usr/ot4omt/corproot/* /usr/cayenne/reposUpgrade from 6.1.1Your 6.1.1 repositories should be in /usr/cayenne/objectteam_old/corproot. Move the contents of the corproot directory to the new default location:mkdir /usr/cayenne/reposcp -r /usr/cayenne/objectteam_old/corproot/* /usr/cayenne/reposHow to convert your Informix repositoryΣ To convert your Informix repository:1 Enter the following command.$M4_home/bin/convert61to71 -s server dbname corporateDir COLS="2"COLNAME="1" COLWIDTH="132p"COLNAME="2" COLWIDTH="304p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"serverCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the Informix database server hostCOLNAME="1" VALIGN="TOP" MOREROWS="0"dbnameCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the ObjectTeam 5.x or 6.1.1 corporate databaseCOLNAME="1" VALIGN="TOP" MOREROWS="0"corporateDirCOLNAME="2" VALIGN="TOP" MOREROWS="0"The full pathname of the corporate directory (not the repository directory)For example (Informix):$M4_home/bin/convert61to71 -s neptune repos_db /usr/cayenne/repos/my_reposHow to convert your Oracle repositoryΣ To run convert61to71 for Oracle:1 Enter the following command.$M4_home/bin/convert61to71 -u user -P password dbname corporateDir COLS="2"COLNAME="1" COLWIDTH="145p"COLNAME="2" COLWIDTH="286p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"-u userCOLNAME="2" VALIGN="TOP" MOREROWS="0"User/schema name for accessing the database COLNAME="1" VALIGN="TOP" MOREROWS="0"-P passwordCOLNAME="2" VALIGN="TOP" MOREROWS="0"Password for accessing the databaseCOLNAME="1" VALIGN="TOP" MOREROWS="0"dbnameCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the Oracle database specification string. If SQL*Net is installed, specify for dbname the Oracle SID. If running this program on an installation without SQL*Net, specify as dbname "default" and make sure the ORACLE_SID environment variable is set to the system identifier of the database to connect.COLNAME="1" VALIGN="TOP" MOREROWS="0"corporateDirCOLNAME="2" VALIGN="TOP" MOREROWS="0"The full pathname of the corporate directory (not the repository directory)For example, if you have made a user my_repos and you are using SQL*Net, you would enter the following:$M4_home/bin/convert61to71 -u my_repos -P my_db oracle7 /usr/cayenne/repos/my_reposTroubleshootingIf anything goes wrong during the creation of the repository, refer to Appendix D, Troubleshooting.ID="13441"Test Your InstallationTesting your installationYou should test your installation before going further. If anything goes wrong during while testing your installation, refer to Appendix D, Troubleshooting.Setting your default repositoryΣ To make your converted repository the default repository, you must set the M4_levelpath variable:1 Open the ObjectTeam environment variables file $M4_home/etc/m4env.m4env.2 Add the following line:M4_levelpath=/my_repos;RWwhere my_repos is the name of your converted repository.Test your installationΣ To test your installation, start the Browser:1 Enter:ot &Σ To access the product documentation, select Help | Product Documentation in the ObjectTeam Browser.ID="31132"Update The Startup FilesConfiguring the Broker Once you have finished the upgrade, it is convenient to configure the ObjectTeam broker and license server to start automatically at boot time. Setting your startup fileΣ To set your startup file:1 Log in as root.2 Remove links to the old startup file:Solaris: rm /etc/rc0.d/K19ot4omt rm /etc/rc3.d/S19ot4omt.HP-UX: rm /sbin/rc0.d/K719ot4omt rm /sbin/rc2.d/S719ot4omt.AIX: Remove the following lines from /etc/inittab:ot4omt:2:once: sh /etc/rc.ot startot4omt:0:once: sh /etc/rc.ot stopD-UX: rm /sbin/rc2.d/K19ot4omtrm /sbin/rc3.d/S19ot4omt.3 Copy the default startup file:Solaris: cp $M4_home/etc/ot /etc/init.d/ot HP-UX: cp $M4_home/etc/ot /sbin/init.d/otAIX: cp $M4_home/etc/ot /etc/rc.otD-UX: cp $M4_home/etc/ot /etc/init.d/ot4 Make links to the startup fileSolaris: ln -s /etc/init.d/ot /etc/rc3.d/S19otln -s /etc/init.d/ot /etc/rc0.d/K19otHP-UX: ln -s /sbin/init.d/ot /sbin/rc2.d/S719otln -s /sbin/init.d/ot /sbin/rc0.d/K719otAIX: Add the following lines to /etc/inittab:ot:2:once: sh /etc/rc.ot startot:0:once: sh /etc/rc.ot stopD-UX: ln -s /sbin/init.d/ot /sbin/rc3.d/S19otln -s /sbin/init.d/ot /sbin/rc2.d/K19otYou can enter any numbers after S and K as long as startup and shutdown are done in the correct order. It is important that the DBMS server start before the ot_broker starts, and that the ot_broker stop before the DBMS server stops.Editing the startup fileΣ To have the ot_broker start automatically at boot time:1 Open the ot file you just copied in a text editor.2 Check the following lines point to the location of the FLEXlm installation and the license file:LMHOME=/usr/cayenne/flexlmLM_LICENSE_FILE=$LMHOME/license/cayenne.dat3 Check the following line points to the root directory of the installation:M4_home=/usr/cayenne/objectteam4 If you did not install ObjectTeam as user cayenne, look for the following line:CAYNID=${CAYNID:-"cayenne"}and replace cayenne with the name of the user you used to install ObjectTeam.5 If this host is the license server, look for the following text:# If this script is run on the host used as license server,# uncomment one of the next two start-up instructions and# uncomment the line with 'lmdown' at the end of this file.and uncomment the appropriate lines depending on whether you want the license server to run with logging (default) or not. Do not uncomment these lines if you have a temporary license.6 If this host is the license server, look for the following text:# If this script is run on the host used as license server,# uncomment the next line to stop the daemon automatically.and uncomment the indicated line. Do not uncomment this line if you have a temporary license.Restarting the broker Σ To restart the broker (and license server if you installed FLEXlm on the Master server), reboot your machine.Next StepsConfiguring modulesNow your new installation is working, you should activate the modules for which your site is licensed. For more details, see Chapter 4, Activating Modules.Customization filesDue to the addition of new features in this version of ObjectTeam, customizations made in previous versions may no longer work. If you have customized any Tcl files in M4_home/tcl, It is recommended that you recreate your customizations based on the new Tcl files.Note that some Tcl files have now moved and can be found in various modules. Note also that the names of some customization files have changed from previous versions. For more information on customizations and on modules, see the ObjectTeam Customization Guide.User rolesIf you had assigned roles to user ot4omt in your previous version of ObjectTeam, you should assign these roles to user cayenne in ObjectTeam 7.1.1. You should also remove the user ot4omt from ObjectTeam 7.1.1.For details on adding and deleting users in ObjectTeam, refer to the ObjectTeam Project Management Guide.Removing your old installationUpgrade from 5.x: If your old ObjectTeam installation was in /usr/ot4omt, then if you are satisfied that the new installation is working correctly, you can remove the directory tree. Log in as ot4omt and enter the following command:rm -r /usr/ot4omtUpgrade from 6.1.1: If your old ObjectTeam installation was in /usr/cayenne, then if you are satisfied that the new installation is working correctly, you can remove the directory tree. Log in as ot4omt and enter the following command:rm -r /usr/cayenne/objectteam_oldRemoving old databasesSince the old databases are created by user ot4omt, these cannot be removed as cayenne. This should be done by user Informix or user system in the case of Oracle. Warning: Do not remove databases until after you have fully tested your installation.ID="36915"Upgrading an ObjectTeam Slave ServerStepsΣ To upgrade a local Slave server installation:1 Log in to the Slave server as root.2 Stop the broker.3 Remove links to the old startup file and the links to it:Solaris: rm /etc/init.d/ot4omtrm /etc/rc0.d/K19ot4omt rm /etc/rc3.d/S19ot4omt.HP-UX: rm /sbin/init.d/ot4omtrm /sbin/rc0.d/K719ot4omt rm /sbin/rc2.d/S719ot4omt.AIX: Remove the following lines from /etc/inittab:rm /etc/rc.ot4omtot4omt:2:once: sh /etc/rc.ot startot4omt:0:once: sh /etc/rc.ot stopD-UX: rm /etc/init.d/ot4omtrm /sbin/rc2.d/K19ot4omtrm /sbin/rc3.d/S19ot4omt.4 Remove the entire ObjectTeam product directory tree (/usr/cayenne or /usr/ot4omt).5 Do a new Slave server install, as described in REFID="29343" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Slave Server on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18.ID="11115"Upgrading an ObjectTeam ClientStepsΣ To upgrade a local client installation:1 Log in to the client as root.2 Remove the entire ObjectTeam product directory tree (/usr/cayenne or /usr/ot4omt).3 Do a new client install, as described in REFID="28366" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Client on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'29.Chapter 4 Activating ID="38042"ModulesTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes how to activate optional ObjectTeam functionality provided in licensed modules.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27316" TYPE="XREF-TEXTCOPY"ObjectTeam Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2ID="27316"ObjectTeam ModulesIntroductionObjectTeam consists of a base product and a number of optional features. Each optional feature is implemented as an ObjectTeam module. To use the feature, you must activate the module. LicensingMost modules require a valid license. If ObjectTeam displays license-related error messages, you may not have a valid license. Refer to REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server for more information.Modules and repository levelsThe instructions here cover how to activate modules on Corporate level for an entire corporate repository. You must have root access to do this. Modules activated on Corporate level are available by default for all users of this repository on every level.You do not have to activate all modules on Corporate level. Users can activate them on any other level in the repository, as long as they are licensed.Which ObjectTeam modules are availableA module is a directory of files that implement an optional ObjectTeam feature. The directory name is the module name. By default, all modules are stored in the modules directory of your M4_home directory.Modules on the following features are supplied with ObjectTeam. COLS="3"COLNAME="1" COLWIDTH="150p"COLNAME="2" COLWIDTH="198p"COLNAME="3" COLWIDTH="279p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FeatureCOLNAME="2" VALIGN="TOP" MOREROWS="0"ModuleCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"Code GenerationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ADA83 Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Ada Professional Developers Toolkit COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ADA95 Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Ada Professional Developers Toolkit COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"C++ Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for C++COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CORBA IDL Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for CORBA IDLCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Delphi Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for DelphiCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Forte Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for FortΘCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Java Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for JavaCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"NewEra Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for Informix NewEraCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent C++ GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for C++COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PowerBuilder Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for PowerBuilderCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Smalltalk Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for SmalltalkCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Visual Basic Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for Visual BasicCOLNAME="1" VALIGN="TOP" MOREROWS="0"Version ControlintegrationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClearCase IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam ClearCase Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Continuus IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Continuus Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Razor IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Razor Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"Requirement engineering integrationCOLNAME="2" VALIGN="TOP" MOREROWS="0"DOORS IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam DOORS Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"RTM IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam RTM Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"Document GenerationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker 5.0COLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OMT FrameMaker 5.0COLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OMT WordCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OMT Word 97COLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"WordCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Word 97COLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"MiscellaneousCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Corporate modelingCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Project Management GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Groundworks (VAR) interfaceCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Modeling GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"OMTCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Modeling GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Microsoft Repository InterfaceCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Project Management GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"SecurityCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Project Management GuideNote: Not all modules are available on all platforms. Code GenerationIn previous releases of ObjectTeam, target language for code generation was set using the variables M4_package and M4_target_lang. This mechanism has been replaced by modules. These variables are no longer used. Note: The C++ code generation implemented in the C++ Code Generation module is different from previous versions of ObjectTeam. The previous implementation of C++ code generation is available in the compatibility module Persistent C++ Generation. For more details, see chapter on compatibility in the ObjectTeam Code Generation Guide for C++.User-defined modulesYou can create your own ObjectTeam modules. For details, see ObjectTeam Customization Guide.ID="13855"How to Activate a Module on Corporate levelΣ To activate a module:1 In the Browser, open the <customization files> pseudo-object on Corporate level.The objects etc and tcl appear.2 Open the etc object.3 A list of all customization files on Corporate level appear. 4 Double-click on the modules.modules object. The Modules Availability Editor starts up.FILENAME="00007.unk" ORIGFILE="../shared_files/pics/modedit.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/igunmods.fm5.mif"5 Select Edit | New. 6 The Select Module dialog appears, displaying a list of all available modules.Note: If your modules directory is not the modules directory of your M4_home directory, click the Browse button to locate the module directory in the file system. 7 Select the name of the module you wish to activate and click OK.The new module has been added to the list of active modules8 Save the modules.modules file and exit the Module Availability Editor.Note: If an error message on conflicting modules appears, refer to Resolving Conflicting Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'1 for details.9 Select Utilities | CloneNote: Because of the way customization files are read by ObjectTeam, you have to clone (or restart) the Browser if you want the changes made to modules.modules files on Corporate level and User Customization level to take effect.Customization files on these levels are only read at start-up.ID="10485"Checking if a module is activeΣ To check which modules are active on a particular Browser level:1 Move to the Browser level of your choice2 Select Utilities | Show Active ModulesThe Active Modules dialog box appears, listing all the modules that are active on the current Browser level.FILENAME="00008.unk" ORIGFILE="../shared_files/pics/actmod.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/igunmods.fm5.mif"ObjectTeam Module SpecificationsIntroductionA modules.modules customization file contains one or more module specifications. Each module specification activates or deactivates a module. A modules.modules customization file can exist at any Browser level, from corporate level through user levelHow module specifications are readThe module specifications in modules.modules files are incrementally read by ObjectTeam. The specifications in a modules.modules file on Corporate level, for example, are read when a user starts ObjectTeam, whereas those in a modules.modules file on Project level are read when a user opens the Project in the ObjectTeam Browser.The set of module specifications on a certain Browser level is the result of ObjectTeam's adding module specifications from all the modules.modules files on higher levels.This implies that if you want the changes made in a certain modules.modules file to take effect, you first have to make ObjectTeam read the modules.modules file. Note: If you made changes to a modules.modules file on Corporate level or User Customization level, you cannot move up one level anymore; the changes only take effect if you either clone or restart the Browser.ExampleIf the modules.modules file was changed on Project level, in a project called ProjectX, for example, you should first move up (by selecting the Corporate object in the Navigation Area, for example). If you then open ProjectX again, ObjectTeam adds the module specifications in this file to the current set of module specifications.The Module Availability EditorIntroductionThe Module Availability Editor is the tool with which you create, activate, delete and manipulate ObjectTeam module specifications. It starts up if you edit the customization file modules.modules.FILENAME="00009.unk" ORIGFILE="../shared_files/pics/modedtr.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/igunmods.fm5.mif"MenusThe following menus and menu entries are available in the Module Availability Editor:COLS="3"COLNAME="1" COLWIDTH="57p"COLNAME="2" COLWIDTH="150p"COLNAME="3" COLWIDTH="240p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MenuCOLNAME="2" VALIGN="TOP" MOREROWS="0"Menu EntryCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"ReloadCOLNAME="3" VALIGN="TOP" MOREROWS="0"Rereads the module specificationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SaveCOLNAME="3" VALIGN="TOP" MOREROWS="0"Saves the changes made in the Module Availability EditorCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ExitCOLNAME="3" VALIGN="TOP" MOREROWS="0"Quits the Module Availability EditorCOLNAME="1" VALIGN="TOP" MOREROWS="0"EditCOLNAME="2" VALIGN="TOP" MOREROWS="0"NewCOLNAME="3" VALIGN="TOP" MOREROWS="0"Adds a new module specificationSee How to Activate a Module on Corporate level on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Add Required ModulesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Adds to the selected module the modules that are specified as requiredModules See Required Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Change | Select StateCOLNAME="3" VALIGN="TOP" MOREROWS="0"Activates the selected module: it changes its state from off to on or vice versaCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Change | LocationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Use this option if the location of a module has changedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"InfoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Brings up an information dialog box listing details, such as module type, module directory location and required modulesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DeleteCOLNAME="3" VALIGN="TOP" MOREROWS="0"Deletes the selected module specification(s) COLNAME="1" VALIGN="TOP" MOREROWS="0"ViewCOLNAME="2" VALIGN="TOP" MOREROWS="0"ToolBarCOLNAME="3" VALIGN="TOP" MOREROWS="0"Turns the Tool Bar on or offCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Context AreaCOLNAME="3" VALIGN="TOP" MOREROWS="0"Turns the Context Area on or offCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Message AreaCOLNAME="3" VALIGN="TOP" MOREROWS="0"Turns the Message Area on or offCOLNAME="1" VALIGN="TOP" MOREROWS="0"OptionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"FontCOLNAME="3" VALIGN="TOP" MOREROWS="0"Use this option to change the font or font size used in the Display AreaCOLNAME="1" VALIGN="TOP" MOREROWS="0"CheckCOLNAME="2" VALIGN="TOP" MOREROWS="0"RequirementsCOLNAME="3" VALIGN="TOP" MOREROWS="0"Checks if all the modules required by the modules in the Display Area have been addedSee Required Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ConflictsCOLNAME="3" VALIGN="TOP" MOREROWS="0"Checks if there are any modules that conflict with other modulesSee Conflicting Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ExistenceCOLNAME="3" VALIGN="TOP" MOREROWS="0"Checks if all the module directories existCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AllCOLNAME="3" VALIGN="TOP" MOREROWS="0"Checks on requirements, conflicts and existenceCOLNAME="1" VALIGN="TOP" MOREROWS="0"FilterCOLNAME="2" VALIGN="TOP" MOREROWS="0"Filter on Current File EntriesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Use this option if you only want to see those module specifications in the Display Area that can be edited on the current level.How ObjectTeam Modules InterrelateIntroductionCertain ObjectTeam modules require other modules to work properly, others are only supporting other modules, and some modules exclude each other. Every module directory contains a file called properties.properties. This file contains certain fields through which dependencies between modules and module types are specified. These fields are discussed in this section.For more informationSee ObjectTeam Customization Guide for details on the properties.properties file.In this sectionThis section contains the following subsections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32587" TYPE="XREF-TEXTCOPY"Required Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28274" TYPE="XREF-TEXTCOPY"Conflicting Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14623" TYPE="XREF-TEXTCOPY"Resolving Conflicting Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22656" TYPE="XREF-TEXTCOPY"Supporting Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="32587"Required ModulesIntroductionIf a particular module require other modules in order to operate properly, the following fields can be used in the properties.properties file to specify required modules:n requiredModulesn requiredModuleTypesViewing required module (types)Users of the Module Availability Editor can see which modules and module types are required by a module by selecting Edit | Info. for that module. The Information Box that appears lists, among other things, the required modules and module types, if applicable.FILENAME="00010.unk" ORIGFILE="../shared_files/pics/info.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/igunmods.fm5.mif"requiredModulesIn this field, a list of required modules, separated by spaces, can be specified. If a module that requires other modules is selected in the Module Editor, the required module(s) will be automatically added to the modules.modules file too.requiredModuleTypesIf a module requires another module, but there is more than one module of that type available, a list of required module types is specified. If a module that requires other module types is selected in the Module Editor, a dialog box appears, listing all the available modules of that type. After a user of the Module Editor selects the module of his choice, this module is added to the modules.modules file.In the properties.properties file of the module C++ Code Generation, for example, the following module types are specified as requiredModuleTypes:n DevelEnv (C++ compilers)n CppClassLib (Class Libraries)Checking for requirementsYou can check if all the requirements have been met for all the modules by selecting Check | Requirements in the Module Availability Editor. If there are any requirements missing, an Information dialog box will list them.Tip: Check | All runs a more extensive check: on required modules, conflicting modules, and the existence of module directories.ID="28274"Conflicting ModulesIntroductionCertain modules exclude each other: if the module C++ Code Generation is active for a particular system, for example, the module Java Code Generation cannot be active at the same time.The following fields in the properties.properties file can be used to specify conflicting modules:n conflictingModulesn conflictingModuleTypesNote: A user of the Module Editor is still able to add a module that conflicts with another module, but will get an error message when he attempts to save the modules.modules file.Saving a conflicting modules.modules fileWhen you try to save a modules.modules file that contains conflicts, the following dialog box appears.FILENAME="00011.unk" ORIGFILE="../shared_files/pics/savemod.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/igunmods.fm5.mif"YesThe file is not saved. You should correct the conflict(s) by deactivating one of the conflicting modules (see Resolving Conflicting Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'1 for details). Use Check | Conflicts to find out which modules are conflicting.NoAll the modules in the modules.modules file that cause a conflict are deactivated, after which the file is saved.CancelCancels the operation.Viewing conflicting module (types)Users of the Module Availability Editor can see which modules or module types are defined as conflicting with the module by selecting Edit | Info for that module. The Information Box that appears lists, among other things, the conflicting modules and module types, if applicable.FILENAME="00012.unk" ORIGFILE="../shared_files/pics/info.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/igunmods.fm5.mif"conflictingModulesIn this field, a list of modules that are supposed to conflict with the current module can be specified. The list is separated by commas.conflictingModuleTypesIn this field, a list of module types that are supposed to conflict with the current module are listed. The list is separated by commas.Checking for conflictsYou can check for conflicts in the Module Availability Editor by selecting Check | Conflicts. If there are any conflicts, an Information dialog box will list them.Tip: Check | All runs a more extensive check: on required modules, conflicting modules, and the existence of module directories.ID="14623"Resolving Conflicting ModulesModule specifications and browser levelsThe Module Availability Editor displays the current set of module specifications: the result of incrementally read modules.modules files (see Checking if a module is active on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'1). You can only edit or delete the modules that have been added on the current levelExample of a module conflictYou could encounter a situation in which you would like to add and activate a module that conflicts with a module that has been added and activated on a higher level. For example, the C++ Code Generation module is activated on Corporate level, but for one particular Project you would like to generate Java code.How to resolve a module conflictΣ To resolve a module conflict:1 Open the customization file modules.modules on the Browser level of your choice.The specifications you are going to add to this file will be valid on the current Browser level and below. (Project level and below, for example)2 In the Module Availability Editor, add the same module as the one on a higher level that is causing the conflict (C++ Code Generation, for example)Use Edit | New to bring up the Select Module dialog box. Select the module of your choice from this box.3 Deactivate the newly added module using Edit | Change | Select State The module's state is now off.4 Add the module that would conflict if the conflicting module on a higher level were not deactivated (Java Code generation, for example).Make sure its state is on.The new module is now only active for the configuration, phase, project or system for which the customization file modules.modules was added.ID="22656"Supporting ModulesIntroductionSupporting modules are modules that are required by other modules, but are not useful independently. As users usually do not need to know about supporting modules, they are, by default, not listed in the Select Module dialog box. This box appears if a user of the Module Editor selects Edit | New.Tip: With the check button Show Supporting Modules in the Select Module dialog box, supporting modules can be included in the list.isSupportingModuleThe field isSupportingModule in the properties.properties file is used to identify a module as supporting. The only possible values are yes or no. An empty value defaults to no.Appendix A Installing DocExpressTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes how to install DocExpress for ObjectTeam.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41240" TYPE="XREF-TEXTCOPY"Installing DocExpress Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2ID="41240"Installing DocExpressIntroductionThis section describes how to install DocExpress under UNIX.For a list of platforms and document publishing packages supported by DocExpress, open the file /cdrom/certify.htm in a web browser.RequirementsBefore you install DocExpress, make sure:n You have installed ObjectTeam.n You have a DocExpress feature line in your ObjectTeam license file. DocExpress also uses the FLEXlm license management software. For more details on FLEXlm licensing, and how to add features to your license file, see REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server.Reading the DocExpress online manualsThe DocExpress documentation is part of the ObjectTeam product documentation and is installed with ObjectTeam. Σ To access the online DocExpress documentation:1 Start DynaText as described in the CD insert.2 In the DynaText Collection window, select the ObjectTeam collection and double-click on the DocExpress Set.The DocExpress books are opened in the reader window.Installation workflowInstalling DocExpress consists of the following tasks:COLS="3"COLNAME="1" COLWIDTH="22p"COLNAME="2" COLWIDTH="307p"COLNAME="3" COLWIDTH="114p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Uninstall any existing DocExpress installation.COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Make the installation directory.COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Set up the installation directory and extract the installation utilities.COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Extract the DocExpress software.COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Install the DocExpress templates.COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker users: Configure DocExpress for use with FrameMaker.COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"International FrameMaker Users: Configure DocExpress for use with International FrameMakerCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Set up the user environment.COLNAME="3" VALIGN="TOP" MOREROWS="0"How to Uninstall DocExpressIntroductionIf you have an older version of DocExpress, the installation for Version 2.3.9 will automatically rename the current directory to doc_xxx, where xxx is a dynamic process number allocated by the operating system to the installation script at run time.However, you can also choose to remove the current version of DocExpress instead.How to uninstall DocExpressΣ To uninstall DocExpress:1 While still logged in as an authorized user, change to the /ata directory:cd /ata2 Delete the older installation of DocExpress:rm -r docrm -r installYou are now ready to install the new DocExpress version.How to Make the Installation DirectoryIntroductionYou must make an installation directory, if one doesn't already exist. The recommended installation directory is /usr/ata, although you can install elsewhere. How to make the installation directoryΣ To make the installation directory:1 Log in as an authorized user.Note: You must be running in a C-shell and have a .cshrc file in your $HOME directory.2 Make the installation directory, for example:cd /usrmkdir ata3 Create a symbolic link /ata that points to the installation directory. For example, if your installation directory is /usr/ata, create the following link:ln -s /usr/ata /ata4 Check the link is correct:ls -l /ata# lrwxrwxrwxname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'root 22 May 8 17:05 /ata -> /usr/ataHow to Set Up the Installation DirectoryHow to set up the installation directoryΣ To set up the installation directory:1 While still logged in as an authorized user, change to the installation directory. cd /ata2 Mount the CD-ROM:Solaris: mount -F hsfs -o ro /dev/sr0 /cdromHP-UX: /etc/mount -F cdfs /dev/dsk/c1t2d0 /cdrom3 Extract the installation scripts:Solaris: tar xvf /cdrom/objecttm/sol/doc/install.tarHP-UX: tar xvf /cdrom/OBJECTTM/HPUX/DOC/"INSTALL.TAR;1"4 Run the install script:cd $ATAHOME/install./ata_install_cdromFollow the instructions.How to Install the DocExpress TemplatesIntroductionIf you are using a temporary ObjectTeam license, the DocExpress installation will only install sample templates for FrameMaker and Interleaf. These templates include:n DOD-STD-2167A SRSn MIL-STD-498 SRSn MIL-STD-498 SDDn ANSI/IEEE SDDn DOD-STD-2167A SDDn ISO 9000/6592 PSIf you have a permanent ObjectTeam license including a feature license for DocExpress, you can install the full set of DocExpress templates.For more details on temporary and permanent licenses, refer to REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server.How to install the DocExpress templates:Σ To install the DocExpress templates:1 While still logged in as an authorized user, set the ATAHOME variable:setenv ATAHOME /ata2 Change to the $ATAHOME/doc/admin directory:cd $ATAHOME/doc/admin3 Run the templates_install utility:./templates_installThe DocExpress templates are installed and configured.Configuring DocExpress for Use With FrameMakerIntroductionBy default, DocExpress is set up at installation to work with FrameMaker 5.1. If you wish to use DocExpress with FrameMaker 4 or 5.0, you must configure it.How to configure DocExpress for use with FrameMakerΣ To configure DocExpress for use with a version of FrameMaker other than 5.1:1 While still logged in as an authorized user, create a symbolic link to your FrameMaker installation. For example, if you want to work with FrameMaker 5.01, carry out the following steps:cd $ATAHOME/doc/binmv frame_builder frame_builder51ln -s frame_builder501 frame_builder2 Verify the link:ls -l frame_builder# lrwxrwxrwx root frame_builder -> frame_builder5013 Log out as authorized user.Note: If you are using International FrameMaker, you must also configure DocExpress, as described in Using DocExpress with International FrameMaker on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10 before you set up your user environment.Setting Up the User Environment IntroductionAll users must set up their environment before using DocExpress.Note: It is recommended that users run DocExpress from a C-shell, so that the .cshrc file is read. You should also have a .Xdefaults file in their home directory. HP-UX users should also read the chapter on customization in the DocExpress User Guide for additional information.How to Set Up the User EnvironmentΣ To set up the user environment.1 Log in as a regular user.2 Run the user_install utility:cd $ATAHOME/install./user_install3 Log out and log back in again.4 Verify the environment setup:$ATAHOME/doc/admin/verify5 If there are any warnings or errors, rerun the user setup.ID="30237"Using DocExpress with International FrameMakerIntroductionIf you intend using DocExpress with the International English version of FrameMaker, you must make some extra configurations to the DocExpress environment:1 Modify the DocExpress configuration file.2 Establish links for templates3 Establish links for DocExpress API Clients.How to modify the DocExpress configuration fileSome aspects of DocExpress operations are controlled by settings in a DocExpress configuration file. When DocExpress initiates any of its operations (e.g., Load, Build, etc.) it examines this file. To run DocExpress with International FrameMaker, you must modify the configuration file. Σ To modify the DocExpress configuration file1 While still logged in as an authorized user, open the file $ATAHOME/doc/ata_config in a text editor.2 Change the value of the following variables:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="204p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Set to valueCOLNAME="1" VALIGN="TOP" MOREROWS="0"DEFAULT_DOCUMENT_SYSTEMCOLNAME="2" VALIGN="TOP" MOREROWS="0"imakerCOLNAME="1" VALIGN="TOP" MOREROWS="0"FRAME_PRODUCTCOLNAME="2" VALIGN="TOP" MOREROWS="0"imakerCOLNAME="1" VALIGN="TOP" MOREROWS="0"FRAME_BUILDER_FREECOLNAME="2" VALIGN="TOP" MOREROWS="0"TRUEHow to establish links for templatesDocExpress supplies templates for FrameMaker and FrameBuilder. DocExpress needs to know where these templates for International FrameMaker are located. 1 Change to the templates directory.cd $ATAHOME/doc/templates2 Establish a symbolic link for imaker:ln -s frame imaker3 Check the result using ls -la.How to establish links for DocExpress API ClientsDoc Express operates as an API client to FrameMaker. 1 Change to the fminit directory:cd $HOME/.ata/fminit2 Establish a symbolic link for ukenglishln -s usenglish ukenglish3 Check the result with ls -laAppendix B Configuring a License ID="19159"ServerTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionObjectTeam uses FLEXlm, a license management product from Globetrotter Software, Inc. to control licensing.This chapter describes:n How licensing works in ObjectTeamn How to set up a license server under UNIXn How to obtain a permanent licenseMaster serverYou must follow the instructions in this chapter before you install or upgrade an ObjectTeam Master server. If you are installing a Slave server or Client, you must already have installed a Master server, so you can skip this chapter.Demo installationIf you only want to install a demonstration copy of ObjectTeam for trial purposes, you can skip this chapter. A demo installation does not need a license server.Related documentationRequired readingYou should read the FLEXlm End User Manual before installing the FLEXlm license software. The FLEXlm manual provides valuable information on network license management and site customization; for example, it provides details about the license file and various license administration tools. Recommended reading:For more information on network license management and UNIX system administration, read the FLEXlm Programmer's Guide (available from Globetrotter Software, Inc.) and Essential System Administration by Aeleen Frisch (published by O'Reilly & Associates, ISBN 0-937175-80-3).Online informationTo obtain the most current information about FLEXlm, you can access Globetrotter Software's World Wide Web page:http://www.globetrotter.com This home page provides access ton An online version of the FLEXlm End User Manualn FLEXlm end-user technical support, and answers to frequently asked questions (FAQs)n A question-and-answer server via the FLEXlm wizardIn this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14820" TYPE="XREF-TEXTCOPY"Licensing in ObjectTeam Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37096" TYPE="XREF-TEXTCOPY"Installing the License Server Software Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7ID="14820"Licensing in ObjectTeamIntroductionThis section explains the use of licensing in ObjectTeam, and the difference between temporary and permanent licenses. Tip: If you are not interested in how licensing works and just want to get on with installation, skip to Installing the License Server Software on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7.License componentsLicense serverIn an ObjectTeam installation, a single machine in the network acts as license server. By default, this is the same machine as the ObjectTeam Master server. The license server consists of the following components:n A license manager daemon, lmgrd, that is started automatically when the machine is booted. This daemon receives requests for features from other workstations on the network and assigns them to the Cayenne daemon.n A Cayenne daemon, cayenne, that controls the usage of ObjectTeam features according to the number of licenses available in the license filen A license file, cayenne.dat n A license file variable, LM_LICENSE_FILE, that points to the location of the license file. Other machinesOn machines running ObjectTeam software, the following component is necessary:n A license file variable, LM_LICENSE_FILE, that points to the address of the license serverTemporary licensesTo use ObjectTeam, you must obtain a license from Cayenne. Licenses are keyed to the id of the machine on which you are running the license server. So before we can supply a license, you must inform us of this hostid using the license request form.Issuing the license can take a day or so, so to get you started in the meantime, Cayenne supplies a temporary license that is not linked to a hostid. This temporary license is valid for a limited period and usually comes on a floppy in your ObjectTeam package, though you may also receive it via email or fax.The temporary license file is made up of feature lines, each controlling the use of a single ObjectTeam feature. This is an example of a feature line:FEATURE OT_BROWSER_UNIX cayenne 7.100 11-jan-98 0 2CF2F7D2EF08C75F701F "" DEMOUntil you receive the permanent license, you must install a copy of the temporary license on every workstation on which you install ObjectTeam software. The temporary license then controls access to all features on that machine itself; you cannot run a license server with a temporary license. During installation of ObjectTeam, you are prompted to set the LM_LICENSE_FILE variable to point to the location of your local temporary license file.Permanent licensesA permanent license is what Globetrotter refers to in the FLEXlm End User Manual as a floating license. This means it is installed on a particular machine in the network that acts as a license server. The license server controls the usage of ObjectTeam features by any workstation connected to the license server.Contents of a permanent license fileA license file is made up of a server line, a daemon line and a number of feature lines. This is an example of a floating license:SERVER neptune 008005a88359e 7126DAEMON cayenne /usr/cayenne/flexlm/bin/cayenneFEATURE OT_BROWSER_UNIX cayenne 7.100 11-jan-98 10 2CF2F7D2EF08C75F701F ""n The server line identifies the name and (encrypted) hostid of the license server, and the port on which it receives license requests.n The daemon line identifies the name and location of the cayenne daemon, responsible for managing ObjectTeam licenses.n A feature line identifies a particular ObjectTeam licensed feature, the version of ObjectTeam for which it is valid, the expiry date and the number of workstations that can use it simultaneously. If this is a nodelocked feature, the hostid is also specified.Replacing a temporary license with a permanent licenseOnce you receive your permanent license, you:n Install it on the license server.n Start the license server.n Remove the temporary licenses installed on each machine running ObjectTeam.n Reset LM_LICENSE_FILE on each machine running ObjectTeam to point to the license server. On a machine other than the license server, LM_LICENSE_FILE has the format port@server, where port is the TCP/IP port being used by the license server, and server is the host name of the server running the license service. These are identified in the server line of the license file. Licensing processOnce the license server is running, it controls the use of ObjectTeam features. When a user tries to start an ObjectTeam feature, such as a Browser, ObjectTeam:n Examines LM_LICENSE_FILE to find the address of the license server. On a client for example, this has the format port@server.n Makes a request for a feature with the appropriate name (such as, OT_BROWSER_UNIX). The request is passed to the license server at the specified address. The license manager daemon on the license server:n Receives the request on the specified port.n Searches the license file for the feature with the specified name. On the feature line is also listed the name of the daemon which is responsible for controlling this feature, namely cayenne.n Passes the request to the cayenne daemon, which then grants or denies a license based on the number of licenses available.Editing license filesNormally, your license file contains all the features that you need to use ObjectTeam. If you subsequently decide that you would like to use additional features of ObjectTeam, you can order additional licenses for each feature. To make a new license available, you simply add a new feature line to your existing license file.Σ To edit the license file:1 Make a copy of your current license file.2 Open the license file (/usr/cayenne/flexlm/license/cayenne.dat) using a text editor.3 Edit the license file as needed:- To add a new feature, type (or copy and paste) the new feature line into the file. If you are typing the license information, be careful to avoid typing mistakes.- To deactivate a feature, comment it out by typing a hash character (#) at the start of the line. - To replace a feature, deactivate the old line and add the new one as described above.4 Save the edited file.ID="37096"Installing the License Server SoftwareIntroductionBefore you install or upgrade an ObjectTeam Master server, you must configure a machine in your network as a license server. This can be the same machine as the Master server, or some other machine. This section assumes you are installing the license software on the ObjectTeam Master server. ID="32637"How to install the license management softwareΣ To install the license management software on UNIX:1 Mount the ObjectTeam CD, as described in the CD insert.2 Log in to the machine designated as license server as user cayenne.3 Run the FLEXlm install script:Solaris:cd /cdrom/objecttm/sol/flexlm./instflexHP-UX:cd /cdrom/OBJECTTM/HPUX/FLEXLM./INSTFLEXAIX:cd /cdrom/objecttm/aix/flexlm./instflexD-UX: cd /cdrom/OBJECTTM/DUX/FLEXLM./INSTFLEX4 You are asked in which directory you wish to install FLEXlm. The default is /usr/cayenne/flexlm. Press Return to accept this default or enter a location of your choosing. (The rest of this chapter assumes you accept the default location.)Once installation is complete, the /usr/cayenne/flexlm/bin directory contains the FLEXlm daemon and a collection of FLEXlm utilities. For more information about the utilities, see the FLEXlm End User Manual.Next stepsIf you have a:n Temporary license, you need to obtain a permanent license, as described in Obtaining a Permanent License on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9.n Permanent license, install the permanent license and start the license server, as described in Installing a Permanent License on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10.ID="41721"Obtaining a Permanent LicenseObtain a permanent ObjectTeam licenseTo obtain a permanent license, you must find out the host ID of your machine and submit it to Cayenne using the License Request Form. Carry out the steps in this section while logged into the license server as cayenne.Σ To order a license:1 At the command prompt, type the following:/usr/cayenne/flexlm/bin/lmutil lmhostidThe system displays the host ID of the UNIX server.2 Submit a license request a license in either of the following ways:- Go to the license request form provided on Cayenne Software's World Wide Web page at: http://www.cayennesoft.com/license. - Print out the form provided on the CD-ROM (/cdrom/lic_req.txt or /cdrom/lic_req.htm), fill it in and fax it to us at 617-273-0618.If you are ordering from outside the United States, contact your Cayenne sales office.Cayenne will send you a new license for the product by electronic mail or by fax. Once you receive a permanent license, carry out the instructions in Installing a Permanent License on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10. ID="21534"Installing a Permanent LicenseIntroductionOnce you receive a permanent license, you can start the license server. Carry out the steps in this section while logged into the license server as cayenne.Install your permanent license fileΣ To install your permanent license file:1 If you received a permanent license:- On a floppy, copy the license to /usr/cayenne/flexlm/license/cayenne.dat- Via email, copy and paste the new feature information into an empty text file and save it as /usr/cayenne/flexlm/license/cayenne.dat- Via fax, enter the new feature information by hand into an empty text file, and save it as /usr/cayenne/flexlm/license/cayenne.dat2 Open the license file in a text editor and check that the DAEMON line points to the correct location of the cayenne daemon, for example:DAEMON cayenne /usr/cayenne/flexlm/bin/cayenneHow to set LM_LICENSE_FILE on the license serverYou must now set the license file environment variable, LM_LICENSE_FILE, to point to the permanent license:Σ To set the LM_LICENSE_FILE variable on the license server:1 Open your environment settings file in a text editor and add a line to point to the license file..login:setenv LM_LICENSE_FILE /usr/cayenne/flexlm/license/cayenne.dat.profile:LM_LICENSE_FILE=/usr/cayenne/flexlm/license/cayenne.datexport LM_LICENSE_FILENote: If LM_LICENSE_FILE is set in your environment for some other vendor's software, add the above path to the end of the line, separated from the previous path by a colon (:).2 Source your environment file.How to set LM_LICENSE_FILE on other machinesΣ To set the LM_LICENSE_FILE variable on other machines running ObjectTeam:1 Identify the port being used by the License Service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 71262 Open your environment settings file in a text editor and add the following line, replacing server with the name of your license server:.login:setenv LM_LICENSE_FILE 7126@server.profile:LM_LICENSE_FILE=7126@serverexport LM_LICENSE_FILENote: If LM_LICENSE_FILE is already set in your environment, add "7126@server" to the end of the line, separated from the previous path by a colon (:).3 Source your environment file.ID="36930"Start the license manager daemonΣ To start the license manager daemon, enter the following:/usr/cayenne/flexlm/bin/lmgrd -c /usr/cayenne/flexlm/license/cayenne.dat &Once you have installed ObjectTeam, you will configure the license server to start automatically as a service.For more information on using the FLEXlm utilities, see the FLEXlm End User Manual.Appendix C Installing ID="30785"InformixTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes how to install the Informix software. It contains the following sections:n How to install and configure an Informix server- How to configure your Informix server installation for use with an ObjectTeam installation- How to troubleshoot an Informix server installationn How to install and configure an Informix clientInstalling Informix for the First TimeIf you are installing ObjectTeam for the first time, Informix license cards with Serial Numbers and Keys are included. A license Serial Number and Key are required to complete the Informix installation. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42424" TYPE="XREF-TEXTCOPY"Installing Informix Product Files Cname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21549" TYPE="XREF-TEXTCOPY"Setting Up Informix Server Cname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17638" TYPE="XREF-TEXTCOPY"Setting Up Informix Client Cname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19ID="42424"Installing Informix Product FilesHow to ID="28805"install Informix filesΣ To install Informix files:1 Log in as root.2 Create a new group called informix (e.g., with group number 100).3 Add a new user called informix and assign it to the group informix.User informix should be the only member of the group informix.4 Create a new directory for the Informix product (e.g., /usr/informix) and change ownership and group to user informix.mkdir /usr/informixchown informix /usr/informixchgrp informix /usr/informixNote that the last part of the path must end in "informix".5 Set the INFORMIXDIR and PATH environment variables at the command line as follows:Bourne shell:INFORMIXDIR=/usr/informixexport INFORMIXDIRPATH=$PATH:$INFORMIXDIR/binexport PATHC shell:setenv INFORMIXDIR /usr/informixsetenv PATH ${PATH}:${INFORMIXDIR}/bin6 Change directory by entering the following command:cd $INFORMIXDIR7 Mount the CD on your file system, as described in the CD insert.8 Read the Informix CD by entering the command:tar xvf devicename/platform_directory/online.tarSolaris 2.5.1: tar xvf /cdrom/sol25inf/online.tarHP-UX: tar xvf /cdrom/HP102INF/ONLINE.TARAIX: tar xvf /cdrom/aix42inf/online.tarD-UX: tar xvf /cdrom/DUX40INF/ONLINE.TAR9 To install Informix-OnLine on any platform, enter the command:./installonlineThe following messages appear on the screen:Installation ScriptThis installation procedure must be run by root (super-user)It will change...Press RETURN to continue,or the interrupt key (usually CTRL-C or DEL) to abort.You need the Informix Serial number and Key which are includedon the license card included with your shipment.10 Press Return to continue the installation procedure.The following prompt appears:Enter your serial number (for example, INF#X999999) >11 Enter the 11-character serial number, and press Return.The following prompt appears:Enter your serial number KEY (uppercase letters only) >12 Enter the 6-character software serial number, and press Return.You will see a message and a prompt similar to the following example:WARNING:This software, and its authorized use and number of users....Press RETURN to continue,or the interrupt key (usually CTRL-C or DEL) to abort.13 Press Return to continue the installation.The installation will show messages similar to the following, until completion:Installing directory .Installing directory aaodir...Installation of Informix-OnLine Dynamic Server complete.ID="21549"Setting Up Informix ServerHow to set up Informix Server1 Log in as informix2 Add the following variables to your environment variables file:Bourne shell: INFORMIXDIR=/usr/informixexport INFORMIXDIRPATH=$PATH:$INFORMIXDIR/binexport PATHINFORMIXSERVER=serverexport INFORMIXSERVERC shell:setenv INFORMIXDIR /usr/informixsetenv PATH ${PATH}:${INFORMIXDIR}/binsetenv INFORMIXSERVER serverReplace server with the name of the machine on which you installed the Informix files. 3 Activate these settings by:Bourne shell:. ./.profileC shell:source .cshrc4 Make sure that the file system containing the Informix installation has enough free disk space to store the informix database by using:cd $INFORMIXDIRdf -k .There should be at least 100 MB available disk space.5 Prepare the Informix dataspace with the following commands:mkdir $INFORMIXDIR/datatouch $INFORMIXDIR/data/data1chmod 660 $INFORMIXDIR/data/data1Informix will reserve the space that will be allocated later. The space is determined by the Root Size field as described in Setting Up Informix Client on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19. The default setting for ObjectTeam is 100name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MB. 6 Solaris only: The preferred network connection type between Informix and the database server is onipcstr. To set this up, edit the $INFORMIXDIR/etc/onconfig file and add the line:NETTYPE ipcstr,,, #Configure poll thread(s) for nettype7 Edit the $INFORMIXDIR/etc/sqlhosts file and add the following line:server name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' nettype name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' hostname name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' service_namewhere:a The first column is the server name (default is the hostname).b The second column is the nettype. For Solaris, this is onipcstr. For HP-UX, D-UX and AIX, it is onsoctcp.c The third column is the hostname where the Informix server will run.d The fourth column is the service name, which is placed in /etc/services.Example for Solaris:poseidon name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' onipcstr name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' poseidon name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' sqlexecwhere poseidon is the name of the server. The name must be the host name of the server, and not its nickname.Example for HP-UX, D-UX, and AIX:poseidon name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' onsoctcp name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' poseidon name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' sqlexec8 Add the following line to the /etc/services or /etc/inet/services file:sqlexec name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' 1225/tcp name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' # Informix ServerIf you are running NIS or NIS+, this file may be on another node in your network, the one that maintains a global services file.You should verify that socket 1225 is not being used for another service.9 Check if you are user informix by the command id or whoami. This is very important because the following menu-driven program must be started as user informix (otherwise errors will occur). On some platforms, specific settings are needed to allow Informix utilities to display properly.Solaris (cmdtool): Bourne shell:TERM=vt100; export TERMC shell:setenv TERM vt100HP-UX (hpterm), AIX (aixterm), or D-UX (dxterm): Bourne shell:TERM=vt100TERMCAP=$INFORMIXDIR/etc/termcapexport TERM; export TERMCAPC shell:setenv TERM vt100setenv TERMCAP $INFORMIXDIR/etc/termcapAs an alternative to vt100, you can use xterm for TERM. TERMCAP should be set to $INFORMIXDIR/etc/termcap.10 Continue to Configuring Your Server Installation on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8.ID="13524"Configuring Your Server InstallationHow to configure your installationΣ To configure your installation:1 Configure the Informix installation by executing the following command:onmonitor2 Choose option Parameters, then Initialize.Using the tab or return keys, it is possible to switch between fields. A backtab can be done using an up-arrow. The following shows values which can be used for a new installation. After installation, these parameters can be changed.These settings assume that INFORMIXDIR is /usr/informix. Replace /usr/informix with the correct full path of your Informix installation. Your screen should look similar to the following when complete:FILENAME="00013.unk" ORIGFILE="pics/inf_init.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/informix.fm5.mif"3 Press ESC to record the changes.The onmonitor utility will indicate that the space for rootdbs will be allocated with the following message:Verifying physical disk space, please wait ...4 The Shared Memory form will now be shown.The Server Name field must be set. The default is the hostname of the machine you are installing on. If you do not know your machine's host name, use the hostname or uname -n UNIX commands. For ObjectTeam, you also need to increase the default number of LOCKS. The number of locks at the field Max # of Locks must be increased to at least 5000. The recommended starting value is 16394. Depending on the product usage, you may need to increase this number further. The maximum number of locks is 256,000. The Max # of Logical Logs must also be changed to 256.Your screen should look similar to the following when complete:FILENAME="00014.unk" ORIGFILE="pics/inf_shm.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/informix.fm5.mif"Note: For D-UX, the Stack Size should be 64.5 Press ESC again to record the changes.The onmonitor utility will respond with:Do you want to keep these changes to the parameters? (y/n)6 Respond y.Onmonitor will show messages similar to the following:WARNING: A critical shared memory parameter has just been modified.Please make note of the changes made.Press Return to continue.7 Press Return to continue.The Performance screen will come up. There are no parameters to change here.The screen looks like this:FILENAME="00015.unk" ORIGFILE="pics/inf_perf.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/informix.fm5.mif"Note: For D-UX, the Num of LRUS queues should be 8.8 Hit escape.The next screen is data replication. Change Lost & Found to the proper directory for your Informix installation, (or any valid directory), and hit Return.The screen looks like this:FILENAME="00016.unk" ORIGFILE="pics/inf_drep.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/informix.fm5.mif"9 Press EscapeOnmonitor will show the following message:Do you want to keep these changes to the parameters? (y/n)10 Respond y.The next screen is Diagnostics. The Console Msgs. parameters should be changed so that messages written to console will instead be written to a file, (e.g. /usr/informix/console.log).FILENAME="00017.unk" ORIGFILE="pics/inf_diag.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/informix.fm5.mif"11 Press Escape.Onmonitor will show the following message:Do you want to keep these changes to the parameters? (y/n)12 Respond yThe next screen is PDQ. No changes are necessary in this screen. The screen looks like this:FILENAME="00018.unk" ORIGFILE="pics/inf_pdq.gif" ORIGTYPE="X" ORIGDOC="../../sources/igun/informix.fm5.mif"13 Press ESCOnmonitor will show the following message:Do you really want to continue? (y/n)WARNING: The ROOT DBspace will be initialized.All previous data will be destroyed.Note: If you are reinstalling, and some databases exist, answering yes will destroy them. For a new install, it is safe to answer yes, because no data was created before.14 Respond y.Onmonitor will show the following message:Initializing, please wait...Press Return to continue.15 Press Return.Onmonitor will show the following message:Recovering please wait...16 Onmonitor will return to the Parameters menu and Informix will be in quiescent mode. (See the status bar -----). To bring Informix from Quiescent to Online, make the following menu choices: Exit, Mode, On-Line. Informix will now be in On-Line mode. (See the status bar -----).17 Exit onmonitor with the following two menu choices:Exit, ExitNote: All the parameter values are stored in the $INFORMIXDIR/etc/onconfig file. After installation some of these parameters can be changed, manually or through onmonitor.ID="15947"Testing Informix OnlineHow to test Informix OnlineΣ To test Informix OnLine:1 Start up dbaccess (found in $INFORMIXDIR/bin)2 Create an empty database by selecting Database | Create.Fill in "test" and press Return.3 Select Exit from the Create Database menu4 Select Create-New-Database.5 Select ExitThe status bar shows that the database test is currently being used.6 Close the database by selecting Close.7 To drop the test database, select Drop.Select the test database and press Return.8 You are asked if you want to drop the database. Answer Yes. The dbaccess utility answers with "Database Dropped".Note: Do NOT drop the sysmaster database. This will destroy your informix installation.If you see any error messages during this test, or if this test fails for any reason, please check the installation steps and the Informix OnLine release notes. The Informix OnLine release notes are listed in the $INFORMIXDIR/release/ONLINE_7.x file. Most errors are a result of operating system resource limitations (e.g., shared memory)ID="22747"Shutting Down Informix On-LineHow to shut down Informix OnLineΣ To shut down Informix On-Line:1 Enter the following command:$INFORMIXDIR/bin/onmode -kyOr in onmonitor, select Mode | Graceful-Shutdown. 2 Onmonitor asks if you want to shut down. Answer Yes.3 Select Take-Offline.4 Onmonitor asks if you want to shutdown. Answer Yes.5 Select Exit, Exit to exit onmonitor.ID="35914"Bringing Informix OnlineHow to bring Informix onlineYou can bring Informix online via the command line or using onmonitor.Σ To bring Informix online via the command line:1 Enter either of the following commands:$INFORMIXDIR/bin/oninit -yOr $INFORMIXDIR/bin/oninit -s2 Enter $INFORMIXDIR/bin/onmode -mΣ To bring Informix online via onmonitor:1 Select Mode | Startup.2 Press Return to continue and then select On-Line.How to start and stop the Informix server automatically (Solaris)1 After you install ObjectTeam, login as root and copy the file M4_home/etc/informix to /etc/init.d/informix.2 Edit /etc/init.d/informix and set the value of INFORMIXDIR.3 Create executable links to your informix file:ln -s /etc/init.d/informix /etc/rc3.d/S18informixln -s /etc/init.d/informix /etc/rc0.d/K20informixHow to start and stop the Informix server automatically (HP-UX)1 After you install ObjectTeam, login as root and copy the file M4_home/etc/informix to /sbin/init.d 2 Edit /sbin/init.d/informix and set the value of INFORMIXDIR.3 Create executable links to your informix file:ln -s /sbin/init.d/informix /sbin/rc2.d/S718informixln -s /sbin/init.d/informix /sbin/rc0.d/K720informixHow to start and stop the Informix server automatically (AIX)1 After you install ObjectTeam, login as root and copy the file M4_home/etc/informix to /etc/rc.informix. 2 Edit /etc/rc.informix and set the value of INFORMIXDIR.3 Add the following lines to /etc/inittab:informix:2:once: sh /etc/rc.informix startinformix:0:once: sh /etc/rc.informix stopHow to start and stop the Informix server automatically (D-UX)1 After you install ObjectTeam, login as root and copy the file M4_home/etc/informix to /sbin/init.d 2 Edit /sbin/init.d/informix and set the value of INFORMIXDIR.3 Create executable links to your informix file:ln -s /sbin/init.d/informix /sbin/rc3.d/S18informixln -s /sbin/init.d/informix /sbin/rc0.d/K20informixID="33681"TroubleshootingSituationIf you get the error:fatal error in shared memory initialization check the error log ~informix/online.log for more information.SituationYou get the following error when starting the Informix server either from within onmonitor or on the command line with the oninit -y command:Fatal error in shared memory initialization.Check the following items:1 On Solaris, add the following statements to the etc/system file (if they are not already in it), and reboot the node.set enable_sm_wa = 1set shmsys:shminfo_shmmax=268435456set semsys:seminfo_semmap=64set semsys:seminfo_semmni=4096set semsys:seminfo_semmns=4096set semsys:seminfo_semmnu=4096set semsys:seminfo_semume=64set shmsys:shminfo_shmmin=100set shmsys:shminfo_shmmni=100set shmsys:shminfo_shmseg=100Note: You can copy these lines from the ~informix/release/ONLINE_7.x file.2 Check that the INFORMIXSERVER environment variable is set.SituationYou get the following message after running ./installonline, or running any Informix utilities like tbinit, tbmonitor, or dbaccess:Unknown error message number '32766' Installation failed. You don't have the environment variable INFORMIXDIR set. This variable should point to the Informix directory that was created during the installation. You should also ensure that the informix/bin directory is in the path. See How to install Informix files on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2 for details on setting these variables. SituationWhen trying to bring Informix online you get an error message that the network is down OR when running dbaccess you get an error that the network is not trusted.To fix this, add the node names for the server (and clients, if applicable) to the /etc/hosts.equiv file on the machine running the Informix server.Note that the entries should contain the fully qualified name of the machine.ID="17638"Setting Up Informix ClientConfiguring the Informix ClientMachines set up as an ObjectTeam Master server or Slave server need to be configured as an Informix client if the Informix server installation is located on another host. If you are installing ObjectTeam under Solaris or HP-UX, you can either mount the Informix file system on the Master server and any Slave servers, or install the Informix product files on the Master server and any Slave servers.If you are installing ObjectTeam under D-UX or AIX, you must install the Informix product files on the ObjectTeam Master server and any Slave servers.This section describes how to set up a locally installed Informix client.Before you startThe Master server must have an entry in its .rhosts or /etc/hosts.equiv file that permits the user informix on the Slave server to start a remote shell on the Master server. How to set up an Informix Client1 Log in to the Slave server as informix2 Add the following variables to your environment variables file:Bourne shell: INFORMIXDIR=/usr/informixexport INFORMIXDIRPATH=$PATH:$INFORMIXDIR/binexport PATHINFORMIXSERVER=serverexport INFORMIXSERVERC shell:setenv INFORMIXDIR /usr/informixsetenv PATH ${PATH}:${INFORMIXDIR}/binsetenv INFORMIXSERVER serverReplace server with the name of the machine on which you installed the Informix files. 3 Activate these settings by:Bourne shell:. ./.profileC shell:source .cshrc4 Solaris only: The preferred network connection type between Informix and the database server is onipcstr. To set this up, edit the $INFORMIXDIR/etc/onconfig file and add the line:NETTYPE ipcstr,,, #Configure poll thread(s) for nettype5 Edit the $INFORMIXDIR/etc/sqlhosts file and add the following line:server name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' nettype name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' hostname name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' service_namewhere:a The first column is the server name (default is the hostname).b The second column is the nettype. For Solaris, this is onipcstr. For HP-UX, D-UX and AIX, it is onsoctcp.c The third column is the hostname where the Informix server will run.d The fourth column is the service name, which is placed in /etc/services.Example for Solaris:poseidon name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' onipcstr name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' poseidon name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' sqlexecwhere poseidon is the name of the server. The name must be the host name of the server, and not its nickname.Example for HP-UX, D-UX, and AIX:poseidon name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' onsoctcp name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' poseidon name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' sqlexec6 Add the following line to the /etc/services or /etc/inet/services file:sqlexec name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' 1225/tcp name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' # Informix ServerIf you are running NIS or NIS+, this file may be on another node in your network, the one that maintains a global services file.You should verify that socket 1225 is not being used for another service.Set up of the Informix client is complete.Appendix D ID="20431"TroubleshootingIntroductionIf something fails during the installation, the best solution is to uninstall ObjectTeam and run the setup program again. Error messagesMany errors start with the message "Cannot initialize client context". The important lines to look at are the last two or three lines. These usually contain some clear indication of the cause of the problem.When troubleshooting, be aware that some error messages only pop up after a timeout limit has been reached. These are usually set to one minute. If nothing happens, wait at least this time before taking action.Changes Made During InstallationIntroductionDepending on the installation:n Environment variables are set in your login file.n ObjectTeam configuration files are createdChanges made in a Master server or standalone installationEdit your .M4_login or .M4_profile file in a text editor. The following settings are made for a Master server installation:n The variable M4_home is set as an environment variable. All ObjectTeam tools use this variable. The default value is /usr/cayenne/objectteam.n $M4_home/bin is added to your PATH.n The file M4_home/etc/objservers.objservers is modified when you create a repository. For more details, see the ObjectTeam System Administrator's Guide for UNIX-based Systems.n The file M4_home/etc/m4env.m4env is created with the following ObjectTeam M4 variables:COLS="2"COLNAME="1" COLWIDTH="174p"COLNAME="2" COLWIDTH="255p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Set toCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_levelpathCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of your repositoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_brokerportCOLNAME="2" VALIGN="TOP" MOREROWS="0"Port on which broker is contacted. Default is 1825.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_imphostCOLNAME="2" VALIGN="TOP" MOREROWS="0"Machine running the ObjectTeam software.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_fm_international M4_ps_page_hM4_ps_page_wM4_a_printer_plenM4_lc_ctypeM4_lc_collateM4_ps_printer COLNAME="2" VALIGN="TOP" MOREROWS="0"Various internationalization and printing-related variables.Changes made in a Slave server installationn The variable M4_home is set as an environment variable. All ObjectTeam tools use this variable. The default value is /usr/cayenne/obejctteam.n The file M4_home/etc/m4env.m4env is created with the following ObjectTeam M4 variables:COLS="2"COLNAME="1" COLWIDTH="174p"COLNAME="2" COLWIDTH="255p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Set toCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_levelpathCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of your repositoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_nameserverhostCOLNAME="2" VALIGN="TOP" MOREROWS="0"The machine running as Master server.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_brokerportCOLNAME="2" VALIGN="TOP" MOREROWS="0"Port on which broker is contacted. Default is 1825.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_imphostCOLNAME="2" VALIGN="TOP" MOREROWS="0"Machine running the ObjectTeam software.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_fm_international M4_ps_page_hM4_ps_page_wM4_a_printer_plenM4_lc_ctypeM4_lc_collateM4_ps_printer COLNAME="2" VALIGN="TOP" MOREROWS="0"Various internationalization and printing-related variables.Clientn The variable M4_home is set as an environment variable. All ObjectTeam tools use this variable. The default value is /usr/cayenne/obejctteam.n The file M4_home/etc/m4env.m4env is created with the following ObjectTeam M4 variables:COLS="2"COLNAME="1" COLWIDTH="174p"COLNAME="2" COLWIDTH="255p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Set toCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_levelpathCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of your repositoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_brokerportCOLNAME="2" VALIGN="TOP" MOREROWS="0"Port on which broker is contacted. Default is 1825.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_imphostCOLNAME="2" VALIGN="TOP" MOREROWS="0"Machine running the ObjectTeam software.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_fm_international M4_ps_page_hM4_ps_page_wM4_a_printer_plenM4_lc_ctypeM4_lc_collateM4_ps_printer COLNAME="2" VALIGN="TOP" MOREROWS="0"Various internationalization and printing-related variables.Error messagesWhen troubleshooting, be aware that some error messages only pop up after a timeout limit has been reached. These are usually set to five minutes. If nothing happens, wait at least this time before taking action.General troubleshootingIn the event of problems, check the M4_home/logs/ot_brok.log file as well as the status of the ObjectTeam broker service.ProblemsStarting the browserERROR [115024]: Cannot obtain corporate id for 'levelpath'.ERROR [120051]: Name request for Corporate service 'levelpath' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120072]: Remote implementation 'levelpath' not found. ERROR [121001]: Implementation with id 'levelpath' not registered in implementation repositoryThe M4_levelpath is not set correctly.Set the ObjectTeam variable M4_levelpath to point to an existing repository, for example, M4_levelpath=/corporate;RW.This variable is defined in M4_home/etc/m4env.m4env or in the .Meta4UserEnv file in your login directory. Starting the DynaText browserError : Can't find config file '.ebtrc'.Could not open DATA_DIR (check your .ebtrc).The EBTRC variable is not set correctly or there is no .ebtrc file in your login directory. Set the environment variable EBTRC to point to the .ebtrc file. By default, this file is located at: /usr/cayenne/.ebtrcAlternatively, copy the file /usr/cayenne/.ebtrc to your login directory.Starting the browserFATAL[120041]: M4_brokerport not set and no definition for service named ot_broker on host '<hostname>'Add an ot_broker service in the services file. See Set ObjectTeam Environment Variables on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10.Starting the browser210048 Tcl Error: 'ERROR [210048]: Tcl Error: 'ERROR[220001]; Pixmap 'wmt' not found"The XBMLANGPATH variable is not set correctly.Set XBMLANGPATH to $M4_home/%T/%B:$M4_home/%T/%B.xpmAlternatively, you may have run out of colors. If you are running color-intensive applications, quit them and start ObjectTeam again.Starting the browser ld.so.1: /usr23/cayenne/objectteam/bin/otk: fatal: libcyntcl.so: can't open file: errno=2The LD_LIBRARY_PATH variable is not set correctly.Set LD_LIBRARY_PATH (only for platforms supporting shared libraries). The ObjectTeam shared libraries are in M4_home/lib.Starting the browser/usr23/cayenne/objectteam/bin/ot: /usr23/cayenne/objecttea/bin/otk: not foundThe M4_home variable is not set correctly.Set the ObjectTeam environment variable M4_home to point to the installation directory of ObjectTeam. The default is /usr/cayenne/objectteam.Starting the browserERROR [115024]: Cannot obtain corporate id for 'corporate'.ERROR [120051]: Name request for Corporate service 'corporate' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120072]: Remote implementation 'corporate' not found. ERROR [120048]: Operation 'Broker::getImpByName(String const & name, ImpDescriptor & descrip)' not invoked.ERROR [120020]: Operation implementation unavailable.The M4_home variable is not set correctly.Set the ObjectTeam environment variable M4_home to point to the installation directory of ObjectTeam. The default: is /usr/cayenne/objectteam.Starting the browserERROR [115024]: Cannot obtain corporate id for 'levelpath'.ERROR [120051]: Name request for Corporate service 'levelpath' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120072]: Remote implementation 'wronglevelpath' not found. ERROR [120057]: No response from server 'ot_broker' on host 'hostname'ERROR [120013]: ORB communication failureERROR [000146]: Connection refusedCheck if the ot_broker is running on the server. If not start the broker by entering $M4_home/bin/ot_broker &Check if the value for the broker port (M4_brokerport) is correct. Set the ObjectTeam environment variable M4_brokerport to a number via which the broker can be reached. This variable is defined in M4_home/etc/m4env.m4env or in the .Meta4UserEnv file in your login directory. The default value is 1825.Starting the browserERROR [123002]: Could not checkout license for OT_BROWSER_UNIXERROR [123001]: FLEXlm: Cannot find license file (-1,73:2) No such file or directoryThe LM_LICENSE_FILE variable is not set correctly.Set the FLEXlm system environment variable LM_LICENSE_FILE to point to:a. A valid local license file, e.g., /usr/cayenne/flexlm/license/cayenne.datb. port@host, if you are running a license server on another machine. To identify the port, log on to your machine running the license server and open the license file cayenne.dat The port appears as the last field on the server line, e.g. 7126@capellaNote: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended on the end, separated from the previous path by a colon (:).Starting the browserERROR [115024]: Cannot obtain corporate id for 'corporate'.ERROR [120051]: Name request for Corporate service 'corporate' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [121013]: Server 'dbserver' reports failure:ERROR [123002]: Could not checkout license for OT_SERVER_UNIXERROR [123001]: FLEXlm: cannot find license file (-1,72:2) No such file or directoryThe LM_LICENSE_FILE variable was not set correctly at the time the ot_broker was started.Set the LM_LICENSE_FILE correctly as explained below, kill the broker, then start it again by entering $M4_home/bin/ot_broker &.Set the FLEXlm system environment variable LM_LICENSE_FILE pointing to:a. A valid local license file, e.g., /usr/cayenne/flexlm/license/cayenne.datb. port@host, if you are running a license server on another machine. To identify the port, log on to your machine running the license server and open the license file cayenne.dat The port appears as the last field on the server line, e.g. 7126@capella.Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended on the end, separated from the previous path by a colon (:).Starting the browserERROR [115001]: Cannot initialize client context. ERROR [115024]: Cannot obtain corporate id for 'corporate'.ERROR [120051]: Name request for Corporate service 'corporate' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [121013]: Server 'dbserver' reports failure:ERROR [112152]: Error occurred while opening a repositoryERROR [110032]: Failed to execute query: 'CONNECT TO <name@server>'ERROR [000146]: Unable to load locale categoriesThe INFORMIXDIR variable was not set correctly at the time the ot_broker was started.Set the INFORMIXDIR variable to point to the Informix installation directory and kill the broker, then start it again by entering $M4_home/bin/ot_broker &. The default value is /usr/informix.Starting commands in a shell (dbdump etc.)ERROR [210040]: (Message not available)ERROR [001004]: Module 210 not initialized.ERROR [001001]: Error while reading message file 'etc/message/message.210'.SYSERR [000002]: No such file or directoryThe M4_home variable is not set correctlySet the ObjectTeam environment variable M4_home to point to the installation directory of ObjectTeam. The default is /usr/cayenne/objectteam.Installation Guide for Microsoft WindowsChapter 1 Preparing ID="16080"for InstallationTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes the steps that you should take before you install ObjectTeam.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12336" TYPE="XREF-TEXTCOPY"Choosing an Installation Type 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21051" TYPE="XREF-TEXTCOPY"Requirements 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18160" TYPE="XREF-TEXTCOPY"Network Software 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32992" TYPE="XREF-TEXTCOPY"Backing Up Your System 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18228" TYPE="XREF-TEXTCOPY"Creating a User Directory (Windows 95 Only) 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34684" TYPE="XREF-TEXTCOPY"Checking Virtual Memory 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="12336"Choosing an Installation TypeIntroductionA complete ObjectTeam installation contains the following components:n ObjectTeam server softwaren ObjectTeam client softwaren DBMS softwaren License management softwareTo decide the type of installation that you want to perform, you must first determine which computers will be running each of these sets of software.This section helps you answer these questions. Client/server ArchitectureObjectTeam has a client/server design. This means that the software can be distributed over a network of computers, with client computers and server computers executing different types of processes.FILENAME="00019.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/ignt/igntprep.fm5.mif"Client computersClient computers run the ObjectTeam client software. End-users use the client software, for example, to edit diagrams, run reports, and generate code. Model data created by users is stored centrally in a database on the server. Generated code and documents are stored on a user's own machine.Server computersA server computer runs the ObjectTeam server software, and database software for storing users' project data. The server software usually starts up at system boot time, and does things like interact with the database and coordinate requests from clients. Users generally do not directly invoke server software. By default, the maximum number of client computers you can attach to a server is unlimited.A client/server configuration allows multiple users to work simultaneously with ObjectTeam, and thus share data. ObjectTeam databaseObjectTeam stores project data in a database. The database management system (DBMS) used is Sybase SQL Anywhere. By default, the installation program automatically installs the database software on the server.ObjectTeam license managerThe various features of ObjectTeam, such as browsers and code generators, are all licensed individually. In ObjectTeam, a licensing system maintains a count of the usage of each feature. The license management system used by ObjectTeam is FLEXlm from Globetrotter Software. Installation typesObjectTeam distinguishes between the following types of machine:COLS="2"COLNAME="1" COLWIDTH="132p"COLNAME="2" COLWIDTH="315p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigurationCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"Master ServerCOLNAME="2" VALIGN="TOP" MOREROWS="0"This is a machine that runs all the ObjectTeam server software as well as the client software. There must always be a single Master server present in your network. In a default installation, the Master server also runs the SQL Anywhere software and the License server software.COLNAME="1" VALIGN="TOP" MOREROWS="0"Slave ServerCOLNAME="2" VALIGN="TOP" MOREROWS="0"This is an optional server running on a separate machine from the Master server. You can choose to install one or more Slave servers to distribute the load of the Master server. A Slave server runs a subset of the ObjectTeam server and SQL Anywhere software. You can also choose to install the client software together with the Slave server software. COLNAME="1" VALIGN="TOP" MOREROWS="0"ClientCOLNAME="2" VALIGN="TOP" MOREROWS="0"This is a machine that only runs the client software. Example configurationsWhich installation you perform on a machine depends on what kind of overall configuration in which you want to run ObjectTeam. The following examples show some default configurations covered by the instructions in this guide.StandaloneThis is the simplest configuration. A single machine is configured as Master server, and is running the ObjectTeam server software, ObjectTeam client software, SQL Anywhere software and FLEXlm license software. You might use this if you are working on a laptop for example.FILENAME="00020.tif" ORIGSEQ="3" ORIGTYPE="I" ORIGDOC="../../sources/ignt/igntprep.fm5.mif"You can run a standalone ObjectTeam installation under Windows 95 or Windows NT. Client/serverIn this example, a machine configured as Master server is running the ObjectTeam server and client software and is serving multiple client machines. The SQL Anywhere software and FLEXlm license software are also installed on the Master server. FILENAME="00021.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/ignt/igntprep.fm5.mif"In a client/server installation, the server only runs on Windows NT. Client software runs on both Windows 95 and Windows NT.Distributed Master and Slave serversIn this example, to spread the load on the Master server, a separate machine has been configured as an ObjectTeam Slave server and is serving several of its own clients. FILENAME="00022.tif" ORIGSEQ="11" ORIGTYPE="I" ORIGDOC="../../sources/ignt/igntprep.fm5.mif"In a Master/Slave configuration, the Master and Slave must be running under Windows NT Server rather than Windows NT Workstation.The Master server runs SQL Anywhere server software. Slave servers run SQL Anywhere client software. The correct database software is installed along with the ObjectTeam software when you install a Master or Slave server. ObjectTeam clients do not run any SQL Anywhere software.ObjectTeam client machines can run off either the Master or Slave server. By default, the maximum number of client computers you can attach to a server is unlimited.Custom installationsThe default ObjectTeam installation automates where components such as the database and license manager software are installed. Depending on the size of your ObjectTeam installation, you may want to customize your installation to improve performance.For example, you can:n Run the license management software on a separate machine from the Master server.n Run the database software on a separate machine from the Master server.ID="21051"RequirementsProduct requirementsObjectTeam uses or integrates with various other software packages, such as:n Repository DBMS'sn Software development tools, such as compilers, class libraries, etc.n Version and configuration management productsn Document publishing packagesn Requirements tracking packagesFor details on the requirements for these packages, read the Certification matrix. Hardware requirements for your workstation are displayed during the installation procedure. You should also read the ObjectTeam Read Me First Notes before starting installation. These contain last-minute product information that may affect the installation. Reading the ObjectTeam Certification matrix and Read Me First NotesΣ To read the Certification matrix and Read Me First Notes, open the file CD_drive:\certify.htm and CD_drive:\readme.htm in a web browser.ID="18160"Network SoftwareIntroductionThe ObjectTeam client software requires the system to be configured with Microsoft TCP/IP network software. Note that your PC must have a static IP address.Refer to your operating system documentation (from Microsoft) for information on how to enable the TCP/IP protocol.ID="32992"Backing Up Your SystemIntroductionBefore you perform any installation, it is best to do a backup of all important data on your system, including the registries. If your backup software doesn't support backing up registries, back these up separately following the instructions below.The Windows RegistryWhen you perform an installation on Windows NT or 95, various changes are made to the registry. This file is used by Windows to set its environment at start up. If this file becomes corruptedname='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]'for example, because of a problem during an installationname='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]'Windows will not be able to start up. It is therefore recommended that you save your registry to a file and back it up both before and after installing or upgrading ObjectTeam (or any other software). That way, if something goes wrong during the installation, and the registry becomes corrupted, you can restore it.How to back up your registryUsually when you install an application, information about that application is written to the registry, and the previous contents of the registry are copied to a backup file. Windows keeps several backups. You can force Windows to make a backup of the current registry using the Repair Disk Utility.Σ To back up your registry:1 In a DOS prompt, run RDISK.The Repair Disk Utility window appears.2 Click on Update Repair info.This makes a copy of the current registry information in a file.3 Click on Create Emergency Disk.A dialog appears prompting you to insert a floppy. This option creates a floppy from which you can boot, in the event that your registry becomes completely corrupted.4 When the emergency disk is created, click Exit.How to restore your registryIf your registry becomes corrupted for any reason, you can restore it from the backed up copy.Σ To restore your registry:1 Reboot the machine.2 During the start-up sequence, the following sentence is displayed:Press space bar NOW to invoke last known good menu.3 Press the space bar and follow the instructions to restore the previous configuration.If your registry is completely corrupted and all copies have been lost, you must boot from the emergency floppy you made earlier.Creating a ID="18228"User Directory (Windows 95 Only)IntroductionObjectTeam reads and writes environment variables to and from a file in the user's home directory. In order to startup, users must have their own directory.Under Windows NT, this is set by default. Under Windows 95, you must set this option.Creating a User Profile on Windows 95Before users can use the ObjectTeam product on Windows 95, a profiles environment must be created. A user profile allows a user to customize his or her own preferences and desktop settings. Σ To check whether a user has a profile:1 Select Start | Settings | Control Panel.2 Double-click on the Passwords control panel. 3 Under User Profiles, select the option "Users can customize their preferences and desktop settings." You do not have to select the individual desktop icons or individual start menu options.The default users' home directory is: drive:\Windows\Profiles\user_name.ID="34684"Checking Virtual MemoryIntroductionThe amount of virtual memory required to run ObjectTeam depends, in part, on the size of your projects. Initially, Cayenne recommends 75 to 125 MB. As you continue to use the product and your projects grow, you might need to adjust the virtual memory setting on your workstation. You can specify the amount of virtual memory for any local drive that has space available for permanent memory. You must specify virtual memory as permanent.How to check and set virtual memory for Windows NT 4.0Σ To check and set virtual memory for Windows NT 4.0:1 Select the Start button in the status bar. (If the Start button is not visible, press Ctrl + Esc.)A pop-up menu appears.2 Select Settings | Control Panel.The Control Panel appears.3 Double-click on the System icon.The System window appears.4 Select the Performance tab.5 In the Virtual Memory box, check to see that the total paging file size for all disk volumes is in the 75-125 MB range. If it is not, select the Change button.Reset the total paging file size in the Virtual Memory window and select OK.How to check and set virtual memory for Windows 95Σ To check and set virtual memory for Windows 95:1 Select the Start button in the status bar. (If the Start button is not visible, press Ctrl + Esc.)A pop-up menu appears.2 Select Settings | Control Panel.The Control Panel window appears.3 Double-click on the System icon.The System window appears.4 Select the Performance tab.5 Select the Virtual Memory button.6 Select the radio button labeled Let Windows Manage My Virtual Memory Settings.Chapter 2 InstID="16161"allationTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter guides you through the installation of the ObjectTeam software. UpgradingIf you are upgrading from a previous ObjectTeam installation, go to REFID="21035" TYPE="XREF-TEXTCOPY"Chapter 3, Upgrading From a Previous Release, instead.Backing upAs a precaution, before installing this or any product, you should perform a backup of your system. For details, see REFID="32992" TYPE="XREF-TEXTCOPY"Backing Up Your System.Default directoryIn this chapter, the installation directory for the ObjectTeam product files is indicated as M4_home. By default, this is C:\Cayenne\Tools\.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26303" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Master Server 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13878" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Slave Server 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40840" TYPE="XREF-TEXTCOPY"Installing an ObjectTeam Client 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22435" TYPE="XREF-TEXTCOPY"Running ObjectTeam Remotely 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19073" TYPE="XREF-TEXTCOPY"Uninstalling ObjectTeam Software 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27ID="26303"Installing an ObjectTeam Master ServerIntroductionThis section explains how to install ObjectTeam:n On a machine running as Master server in a client/server configuration under Windows NTn In standalone configuration under Windows NT or Windows 95For more information on these configurations, see REFID="12336" TYPE="XREF-TEXTCOPY"Choosing an Installation Type.RequirementsWindows NTIf you are installing in client/server configuration, you must be running Windows NT server. If you are installing in standalone configuration, you can use Windows NT Server or Windows NT Workstation.Windows 95If you are installing in standalone configuration under Windows 95, make sure you have user profiles configured, as described in REFID="18228" TYPE="XREF-TEXTCOPY"Creating a User Directory (Windows 95 Only).StepsInstallation of an ObjectTeam Master server (including in standalone configuration) involves the following steps:COLS="2"COLNAME="1" COLWIDTH="57p"COLNAME="2" COLWIDTH="393p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="26789" TYPE="XREF-TEXTCOPY"Install Your LicenseCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="39892" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files (this also installs the SQL Anywhere database software).COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="10971" TYPE="XREF-TEXTCOPY"Create a Cayenne Repository.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Optional: Configure ObjectTeam modules as described in REFID="38042" TYPE="XREF-TEXTCOPY"Chapter 4, Activating Modules.ID="26789"Install Your LicenseLicensingTo install ObjectTeam 7.1.1, you must configure licensing. How you do this depends on whether you have a temporary or permanent license:Temporary licenseYou must install your ObjectTeam license, as described in this section.Permanent licenseYou must install a license server, as decribed in REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server. After you have done that, continue to REFID="39892" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files.How to install your licenseΣ To install your temporary license file:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Make a FLEXlm license directory:C:\cayenne\flexlm\license3 If you received the license:- On a floppy or CD, copy the license to C:\cayenne\flexlm\license\cayenne.dat- Via email, copy and paste the new feature information into an empty text file and save it as C:\cayenne\flexlm\license\cayenne.dat- Via fax, enter the new feature information by hand into an empty text file, and save it as C:\cayenne\flexlm\license\cayenne.datObtaining a permanent licenseYour temporary license allows you to install and run ObjectTeam for a limited period. If after installing ObjectTeam, you decide you want to make your installation permanent, you need to obtain a permanent license. For details on how to obtain a permanent license, see REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server.ID="39892"Install the ObjectTeam Product FilesHow to install the product filesΣ To install the ObjectTeam product files:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Shut down any other running applications, including DOS windows.3 Insert the ObjectTeam CD into the CD drive. (This can be a local or networked CD drive.)4 In the Windows Explorer, double-click on CD_drive:\Setup.exe.5 Proceed through the Welcome screen to the Select Products dialog box.6 The following choices are presented:- ObjectTeam- DocExpress- DocIt7 Select ObjectTeam.For details on installing DocIt or DocExpress, see REFID="16254" TYPE="XREF-TEXTCOPY"Appendix A, Installing DocExpress and DocIt. 8 To view ObjectTeam's Read Me First Notes, click the Product Notes button. The Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation!9 Click Install to proceed with the installation.The Product Requirements dialog box shows you the complete list of hardware and software requirements for your selected components. 10 If your workstation meets all of the listed hardware and software requirements, click Continue to proceed with installation.The ObjectTeam install program starts up.11 Proceed through the Welcome dialog.12 Windows 95 only: A dialog box is displayed asking you to make sure that TCP/IP is configured. For details on how to do this, refer to your Windows 95 documentation or Online Help. Click OK to continue.13 The Select Products dialog box displays the default selection of components to install. For a Master server installation, select Server files, Sybase SQL Anywhere files, and Client files. Optionally, select Help files and Product Documentation files. Note: If you want to use an existing Sybase SQL Anywhere 5.5 installation, do not select the option to install this software. However, before you can use your existing installation, you must move the SQL Anywhere settings for SQLANY and PATH to the Windows NT system environment. If you do choose to install the SQL Anywhere software, it is installed in the M4_home\sqlany55 directory and these variables are set automatically. 14 By default, the ObjectTeam software is installed in C:\Cayenne\Tools\. If you wish to install ObjectTeam elsewhere, click on the Browse... button and select the desired location. Note: Click the Disk Space button to display available disk space information about available hard drives.The selected components are installed. A progress bar informs you of the progress of the installation.15 Windows NT only: The Server Type dialog asks you to identify the type of server you want to install: Master or Slave. The option Master is selected by default. Click on Next to accept this default.Remember you can have only one ObjectTeam Master server in your network. 16 Windows NT only: The Type of Install dialog asks you to identify the type of installation: Standalone or Client/Server. This choice determines some SQL Anywhere settings. Select your desired installation and click on Next.17 The Server Broker Port Information dialog asks you to enter the broker port you want to use to communicate with clients. Click Next to accept the default of 1825. Warning: If you change this setting, you must also change it during every client and Slave server installation. If the numbers don't match, the client will not be able to communicate with the Broker.18 You are asked for the location of your license file:a If you are running the license server software on this machine, or your license file is stored locally, the default is C;\Cayenne\Flexlm\license\cayenne.dat. b If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a semi-colon (;).The installation script installs menus in the Start menu, and installs the Cayenne Repository Broker as a system service. You are returned to the Cayenne Install Wizard.19 Click Exit.A dialog box is displayed asking if you want to reboot now or later for your changes to take effect. 20 Select Now and click on OK.Next stepTo complete the ObjectTeam installation on the Master server, create a repository for your project data, as described in REFID="10971" TYPE="XREF-TEXTCOPY"Create a Cayenne Repository. ID="10971"Create a Cayenne RepositoryIntroductionAfter you have installed the ObjectTeam Master server software from the CD, and rebooted your system to automatically start the ObjectTeam system services, create a repository for your project data. How to create a repository Σ To create a repository:1 Log on to the Master server (as administrator under Windows NT).2 Windows 95: Make sure that the ObjectTeam Broker service started up at boot time in a DOS window. If not, reboot your system.3 Windows NT: Check that the ObjectTeam Broker service is running:a Select Start | Settings | Control Panel.b Double-click on the Services icon.c In the Services window, make sure that the word "Started" appears next to the Cayenne Repository Broker Service.Note: All logging for this service is dumped into the file M4_home\logs\ot_broker.log.4 Select Start | Programs | Cayenne Repository | Corporate Management.The Corporate Management tool appears.5 Select File | New...The New Repository dialog appears.FILENAME="00023.unk" ORIGFILE="pics/newrepos.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntinst.fm5.mif"All fields are explained below.6 Fill in the fields, then click OK.A Monitor window is started which runs the dbserver command to create the repository. If the repository is created successfully, it becomes selected in the Corporate Management tool.FieldsThe New Repository dialog contains the following fields:COLS="2"COLNAME="1" COLWIDTH="138p"COLNAME="2" COLWIDTH="309p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FieldCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"Corporate nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the corporate repository. This will appear as the corporate object (that is the top level) in the ObjectTeam Browser.COLNAME="1" VALIGN="TOP" MOREROWS="0"Make this repository the defaultCOLNAME="2" VALIGN="TOP" MOREROWS="0"This makes this repository the one that will be displayed in your Browser. You should select this.COLNAME="1" VALIGN="TOP" MOREROWS="0"Directory in which to create the repositoryCOLNAME="2" VALIGN="TOP" MOREROWS="0" The full pathname of the directory in which the file-system part of the repository is stored. The recommended value is C:\Cayenne\repos.COLNAME="1" VALIGN="TOP" MOREROWS="0"User Environment Root directoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"Optional. The directory in which all generated files, such as code files, are stored. The value specified here is assigned to the corporate-level File System Path Part property. Cayenne strongly recommends that you specify a directory on a network drive.Note: See the discussion of the user environment in the ObjectTeam Project Management Guide for more information about the File System Path Part property.COLNAME="1" VALIGN="TOP" MOREROWS="0"Database nameCOLNAME="2" VALIGN="TOP" MOREROWS="0" This is the name of the database to be created.COLNAME="1" VALIGN="TOP" MOREROWS="0"Database directoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"The full pathname of the directory in which database files are stored. The recommended value is C:\Cayenne\repos.COLNAME="1" VALIGN="TOP" MOREROWS="0"Database passwordCOLNAME="2" VALIGN="TOP" MOREROWS="0"You specify a password for the database here. This is used by ObjectTeam to access the database. To enter a password, click on the Enter button. This opens an entry dialog in which you can enter the password. The password must start with a letter. You cannot click OK until you have entered a password. COLNAME="1" VALIGN="TOP" MOREROWS="0"Database hostCOLNAME="2" VALIGN="TOP" MOREROWS="0"Optional. The name of the machine on which SQL Anywhere is running. Only fill this in if you are creating a repository on a Slave server. Do not fill it in if you are creating a repository on the Master server (the default situation).COLNAME="1" VALIGN="TOP" MOREROWS="0"Database serverCOLNAME="2" VALIGN="TOP" MOREROWS="0"Optional: This is the name of the SQL Anywhere server. (Note this does not refer to the machine name.) Only fill this in if you are running SQL Anywhere on a machine other than the Master server. Do not fill it in if you are running SQL Anywhere on the Master server (the default situation).Short pathnamesDo not enter pathnames containing spaces in the Repository directory or Database directory fields. Use the short name instead. For example, instead of:D:\Objectteam datause:D:\Object~1Check the properties of the directory to find the actual short name.Checking your repositoryTo check if your repository has been created successfully, open the Browser. Σ To start the Browser:1 In the Corporate Management tool, if the repository is not already selected, select View | Refresh and select the new repository.2 Select File | Open. The Browser opens.Next stepsObjectTeam consists of a base product and a number of optional features. Each optional feature is implemented as an ObjectTeam module. If you have purchased any such feature, the corresponding modules should first be activated.For details on how to activate modules, go to REFID="38042" TYPE="XREF-TEXTCOPY"Activating Modules.ID="13878"Installing an ObjectTeam Slave ServerIntroductionThis section explains how to install ObjectTeam on a machine running as Slave server in a client/server configuration under Windows NT.For more information on this configuration, see REFID="12336" TYPE="XREF-TEXTCOPY"Choosing an Installation Type.Before you install a Slave server, you must have an ObjectTeam Master server in your network.StepsInstallation of an ObjectTeam Slave server involves the following steps:COLS="2"COLNAME="1" COLWIDTH="57p"COLNAME="2" COLWIDTH="393p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="40681" TYPE="XREF-TEXTCOPY"Share the Disk Containing the Repository Directory (the directory on the Master server on which the file system portion of the repository is stored.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="13606" TYPE="XREF-TEXTCOPY"Verify Your Master Server Requirements for the repository database.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="13913" TYPE="XREF-TEXTCOPY"Configure a User AccountCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="20681" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files (this also installs the SQL Anywhere database software).COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Optional: Configure ObjectTeam modules as described in REFID="38042" TYPE="XREF-TEXTCOPY"Chapter 4, Activating Modules.ID="40681"Share the Disk Containing the Repository DirectoryIntroduction1 Log on to your Master server as administrator.2 Open the Explorer, and right-click on the name of the disk containing the repository directory.3 In the context menu, select Sharing.The Properties window appears.4 Select Shared As, and enter a share name for the shared disk(the default is the name of the directory itself).5 Click OK to share this disk.6 Log in to the Slave server as administrator and select Tools | Map Network Drive.7 In the Shared Directories list, locate the shared disk and select it.8 Make sure the Reconnect at Logon option is checked.9 Click OK to mount this disk.ID="13606"Verify Your Master Server RequirementsIntroductionIf you want to install a Slave server, be aware of the following requirement:n When you installed a Master server, you should have selected the option Client/Server. Selecting this enables an SQL Anywhere database client on the Slave server to connect to the SQL Anywhere server on the Master server.How to check your SQL Anywhere ServiceΣ To check your SQL Anywhere service on the Master server:1 Log in to the Master server as administrator.2 Select Start | Programs | Cayenne Repository | Service Manager. The Service Manager window appears.FILENAME="00024.unk" ORIGFILE="pics/servmang.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntinst.fm5.mif"3 The name OTservice should appear in the Service Name field, and the Start button should be depressed.4 If the service is not running, click the Start button.5 If the service does not exist follow the steps below.How to create a new serviceΣ To create a new service:1 In the SQL Anywhere Service Manager window, click New.The Service Type window appears.FILENAME="00025.unk" ORIGFILE="pics/servtype.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntinst.fm5.mif"2 Network Server is the default. Click OK to accept this.The Edit Service Configuration window appears.FILENAME="00026.unk" ORIGFILE="pics/servcnfg.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntinst.fm5.mif"3 Enter OTservice as the name of the new service. 4 In the Parameters field, enter -n server, where server is the name of the Master server.5 Select the Automatic Startup radio button.6 Make sure the path for the SQL Anywhere executable is correct. If it is not, click on Path and locate the executable (by default C:\Cayenne\Tools\Sqlany55\Win32\Dbsrv50.exe). 7 Select the check box Allow Service To Interact With Desktop.8 Click OK to register your settings.ID="13913"Configure a User AccountIntroductionIf you are planning to install a Slave server, you must have correctly configured a user account.User accountWhen you install an ObjectTeam Slave server, you specify, among other things:n The Master server on which your ObjectTeam services are runningn The pathname of the repository driven Details of an account under which the Slave can log onto the Master to access these servicesThe ObjectTeam services must be run under this account so that the remote disk can be attached. The account should be an account in the Administrator group, in any Domain. The account must have the right "log on as a service". If you specify an account that does not have the "log on as a service" right, then when the ot_broker attempts to start, when you reboot, you will get an error.Assigning "log on as service" rightsΣ To give an account "log on as service" rights:1 Log on as local administrator onto the Slave server.2 Select Start | Programs | Administrative Tools | User Manager.3 Select Policies | UserRights.4 Click on Show advanced user rights.5 Select "Log on as a service" from the Right menu.If the user (or group that the user belongs to) is not shown, proceed with the following steps.6 Click on Add. A form is displayed.7 Select a machine or domain from the List Names From field. The machine or domain should be appropriate for the administrator Account specified.8 Select the Administrator group.9 Click on Add.10 Click OK, and then OK again.Changing your passwordΣ If at any time, you change the password of your account, you must do the following:1 On the Slave server, open the Services Control Panel.2 Select the ObjectTeam Broker Service and click Startup, and type in the new password for the user account in the form that is displayed.You will get a message back that says the account has been granted the "log on as a service" right.ID="20681"Install the ObjectTeam Product FilesHow to install the product filesΣ To install the ObjectTeam product files:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Shut down any other running applications, including DOS windows.3 Insert the ObjectTeam CD into the CD drive. (This can be a local or networked CD drive.)4 In the Windows Explorer, double-click on CD_drive:\Setup.exe.5 Proceed through the Welcome screen to the Select Products dialog box.6 The following choices are presented:- ObjectTeam- DocExpress- DocIt7 Select ObjectTeam.For details on installing DocIt or DocExpress, see REFID="16254" TYPE="XREF-TEXTCOPY"Appendix A, Installing DocExpress and DocIt. 8 To view ObjectTeam's Read Me First Notes, click the Product Notes button. The Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation!9 Click Install to proceed with the installation.The Product Requirements dialog box shows you the complete list of hardware and software requirements for your selected components. 10 If your workstation meets all of the listed hardware and software requirements, click Continue to proceed with installation.The ObjectTeam install program starts up.11 Proceed through the Welcome dialog.12 Windows 95 only: A dialog box is displayed asking you to make sure that TCP/IP is configured. For details on how to do this, refer to your Windows 95 documentation or Online Help. Click OK to continue.13 The Select Products dialog box displays the default selection of components to install. For a Slave server installation, select Server files, Sybase SQL Anywhere files, and Client files. Optionally, select Help files and Product Documentation files. Note: If you want to use an existing Sybase SQL Anywhere 5.5 installation, do not select the option to install this software. However, before you can use your existing installation, you must move the SQL Anywhere settings for SQLANY and PATH to the Windows NT system environment. If you do choose to install the SQL Anywhere software, it is installed in the M4_home\sqlany55 directory and these variables are set automatically. 14 By default, the ObjectTeam software is installed in C:\Cayenne\Tools\. If you wish to install ObjectTeam elsewhere, click on the Browse... button and select the desired location. Note: Click the Disk Space button to display available disk space information about available hard drives.The selected components are installed. A progress bar informs you of the progress of the installation.15 The Server Type dialog asks you to identify the type of server you want to install: Master or Slave. Select Slave.16 The Slave Server Configuration dialog asks you for the Master server hostname and the UNC path. Enter these.The UNC (Universal Naming Convention) is the share name of the disk on the Master server on which the repository directory is stored. It must have the following format:\\machine_name\shared_disk_alias 17 The User Account dialog asks you for details of the user account under which the services will be started. The services must be run under this account so that the remote disk can be attached. The account should be an account in the Administrator group, in any Domain. The account must have the right "log on as a service". If you specify an account that does not have the "log on as a service" right, then when the ot_broker attempts to start, you will get an error. For details on how to give an account this right, see REFID="13913" TYPE="XREF-TEXTCOPY"Configure a User Account.18 The Server Information dialog asks you to enter the broker port of the Master server.Note: The server name is the name (not the IP address) of the ObjectTeam Master server. The default broker port is 1825. You must enter the same number as you entered when you installed the Master server. If the numbers don't match, the client will not be able to communicate with the ot_broker on the Master server. If you are in doubt as to the correct number, check the value of the M4_brokerport variable in the M4_home/etc/m4env.m4env file on the Master server.19 The Repository Name dialog asks you for the name of the repository you want to connect to. Enter a repository name and click Next.The repository name is entered as the M4_levelpath variable in the M4_home\etc\m4env.m4env file. 20 You are asked for the location of your license file:a If you are running the license server software on this machine, or your license file is stored locally, the default is C;\Cayenne\Flexlm\license\cayenne.dat. b If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a semi-colon (;).The installation script installs menus in the Start menu, and installs the Cayenne Repository Broker as a system service. You are returned to the Cayenne Install Wizard.21 Click Exit.A dialog box is displayed asking if you want to reboot now or later for your changes to take effect. 22 Select Now and click on OK.Next stepsObjectTeam consists of a base product and a number of optional features. Each optional feature is implemented as an ObjectTeam module. If you have purchased any such feature, the corresponding modules should first be activated.For details on how to activate modules, go to REFID="38042" TYPE="XREF-TEXTCOPY"Activating Modules.ID="40840"Installing an ObjectTeam ClientIntroductionThis section explains how to install ObjectTeam:n On a machine running as a client in a client/server configuration under Windows NT or Windows 95For more information on these configurations, see REFID="12336" TYPE="XREF-TEXTCOPY"Choosing an Installation Type.Before you install a client, you must have an ObjectTeam Master server in your network.StepsInstallation of an ObjectTeam client involves the following steps:COLS="2"COLNAME="1" COLWIDTH="57p"COLNAME="2" COLWIDTH="393p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="27349" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Optional: Configure ObjectTeam modules as described in REFID="38042" TYPE="XREF-TEXTCOPY"Chapter 4, Activating Modules.Before you beginWindows 95Before starting, make sure you have user profiles configured, as described in REFID="18228" TYPE="XREF-TEXTCOPY"Creating a User Directory (Windows 95 Only).ID="27349"Install the ObjectTeam Product FilesHow to run the installationΣ To run the installation:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Shut down any other running applications, including DOS windows.3 Insert the ObjectTeam CD into the CD drive. (This can be a local or networked CD drive.)4 In the Windows Explorer, double-click on CD_drive:\Setup.exe.5 Proceed through the Welcome screen to the Select Products dialog box.6 The following choices are presented:- ObjectTeam- DocExpress- DocIt7 Select ObjectTeam.For details on installing DocIt or DocExpress, see REFID="16254" TYPE="XREF-TEXTCOPY"Appendix A, Installing DocExpress and DocIt. 8 To view ObjectTeam's Read Me First Notes, click the Product Notes button. The Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation!9 Click Install to proceed with the installation.The Product Requirements dialog box shows you the complete list of hardware and software requirements for your selected components. 10 If your workstation meets all of the listed hardware and software requirements, click Next to proceed with installation.The ObjectTeam install program starts up.11 Proceed through the Welcome dialog.12 Windows 95 only: A dialog box is displayed asking you to make sure that TCP/IP is configured. For details on how to do this, refer to your Windows 95 documentation or Online Help. Click OK to continue.13 The Select Products dialog box displays the default selection of components to install. For a Client installation, select Client files. Optionally, select Help files and Product Documentation files. 14 By default, the ObjectTeam software is installed in C:\Cayenne\Tools\. If you wish to install ObjectTeam elsewhere, click on the Browse... button and select the desired location. Note: Click the Disk Space button to display available disk space information about available hard drives.The selected components are installed. A progress bar informs you of the progress of the installation.15 The Server Information dialog asks you to enter the server name and the broker port for this client.Note: The server name is the name (not the IP address) of the computer running the ObjectTeam Master or Slave server software. The default broker port is 1825. You must enter the same number as you entered when you installed the Master server. If the numbers don't match, the client will not be able to communicate with the ot_broker on the server. If you are in doubt as to the correct number, check the value of the M4_brokerport variable in the M4_home/etc/m4env.m4env file on the Master server.16 The Repository Name dialog asks you for the name of the repository you want to connect to. Enter a repository name and click Next.The repository name is entered as the M4_levelpath variable in the M4_home\etc\m4env.m4env file. 17 You are asked for the location of your license file:a If you are running the license server software on this machine, or your license file is stored locally, the default is C;\Cayenne\Flexlm\license\cayenne.dat. b If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a semi-colon (;).Windows NT: The installation script places menus in your Start menu, then sets some system environment variables.Windows 95: The installation script places menus in your Start menu, then modifies your AUTOEXEC.BAT file to set the system environment variables. You are returned to the Cayenne Install Wizard.18 Click Exit.A dialog box is displayed asking if you want to reboot now or later for your changes to take effect. 19 Select Now and click on OK.The setup program then reboots your computer.Testing your installationΣ To test your installation, start the ObjectTeam Browser:1 Select Start | Programs | Cayenne ObjectTeam | Browser.Next stepsObjectTeam consists of a base product and a number of optional features. Each optional feature is implemented as an ObjectTeam module. If you have purchased any such feature, the corresponding modules should first be activated.For details on how to activate modules, go to REFID="38042" TYPE="XREF-TEXTCOPY"Activating Modules.ID="22435"Running ObjectTeam RemotelyHow to start the ObjectTeam Browser remotelyNormally you will run the ObjectTeam client software from the machine it is installed on. It is also possible to install the client software on one client or server machine and run it from another machine over the network.Σ To run the client software on a remote machine:1 Share the drive on which the client software is installed:a On the machine on which you want to display the Browser, open the Explorer and select Tools | Map Network Drive.b Select the drive on which the client software is located and map it to a free letter.2 On your own machine, set M4_home to the following, replacing drive with the appropriate value. If the installation is not in the C:\Cayenne\Tools directory, enter the correct value.set M4_home = drive:\Cayenne\ToolsNote: Windows NT: Open the System control panel and set this as a System variable. Under Windows 95: Edit the AUTOEXEC.BAT file.3 Enter the following in an MS-DOS window or batch file to start the Browser, replacing drive with the appropriate value:drive:\Cayenne\Tools\bin\otk.exe drive:\Cayenne\Tools\tcl\desk.tcl Σ Alternatively, you can create a shortcut as follows:1 Set M4_home as described above.2 Reboot your machine.3 Share the drive on which the client software is installed.4 On the machine on which you want to display the Browser, open the Explorer and select Tools | Map Network Drive.5 Select the drive on which the client software is located and map it to a free letter.6 Open the drive in the Explorer and open the C:\Cayenne\Tools\bin folder.7 Drag the file otk.exe to the desktop to create a shortcut icon.8 Right-click on the icon and select Properties from the pop-up menu.9 Click on the Shortcut tab and enter the following in the Target field.drive:\Cayenne\Tools\bin\otk.exe drive:\Cayenne\Tools\tcl\desk.tcl The Start In field should read:drive:\Cayenne\Tools\bin10 Double-click on the shortcut icon to start the Browser.ID="19073"Uninstalling ObjectTeam SoftwareIntroductionThis section describes how to uninstall an ObjectTeam Master server.Uninstalling a Master ServerIntroductionThis section describes how to uninstall an ObjectTeam Master server or Standalone machine under Windows NT or a Standalone machine on Windows 95:Be aware that all configuration files will be removed by the uninstall. You must remove the repository directory by hand.Process overviewUninstalling ObjectTeam consists of the following tasks:COLS="2"COLNAME="1" COLWIDTH="55p"COLNAME="2" COLWIDTH="391p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Remove your repositories.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"On the Master server, remove the Cayenne Repository broker and all SQL Anywhere services.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"On the license server, shut down and remove the FLEXlm service.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"On every machine on which you installed ObjectTeam software, run the Uninstall program.Remove the repository directoryΣ To remove your repositories:1 Log on (as administrator under NT).2 Select Start | Programs | Cayenne Repository.The Corporate Management tool appears.3 Select the name of the repository and select File | Delete.The Delete Repository dialog appears.4 Make sure the options Database, Directory and Server entry are checked. Also make sure the the option "Shutdown dbservers before deletion" is checked.All ObjectTeam dbservers will shut down after all users have exited ObjectTeam applications.5 Click OK to delete the repository.6 Repeat steps 3 to 5 for each remaining repository.How to uninstall services (Windows NT)Before you uninstall ObjectTeam, check that the Cayenne Repository broker and any SQL Anywhere services you have created are stopped.Σ To check services:1 While logged on to the Master server as administrator.2 Select Start | Settings | Control Panel.3 Double-click on the Services icon.4 Make sure the the Cayenne Repository broker and any SQL Anywhere services are stopped.5 Select Start | Programs | Cayenne Repository | Service Manager.6 Select each ObjectTeam service in the Service Name field and select Remove.7 When you have removed all services, select Close.8 Reboot the machine to remove the services.How to uninstall the FLEXlm serviceIf your machine is also a license server, you should also remove the FLEXlm service you created for ObjectTeam. Σ To remove the FLEXlm service:1 While logged on as administrator, select Start | Settings | Control Panels.2 Double-click on the FLEXlm icon.3 Select the Setup tab and select the ObjectTeam license service in the Service Name field.4 Select Remove, then select OK.5 Reboot the machine to remove the service.How to uninstall ObjectTeamΣ To uninstall ObjectTeam under Windows NT or Windows 95:1 Log on (as administrator if you are running under NT).2 Open the Control Panels window.3 Double-click on Add/Remove Programs.4 Select the Install/Uninstall tab.5 Select ObjectTeam, and click on Add/Remove.The ObjectTeam files are removed.6 Reboot your computer.Σ Alternatively, to uninstall ObjectTeam from an MS-DOS window under Windows NT:1 Log on as administrator.2 Start an MS-DOS window.3 Enter the following command:%systemroot%\uninst -f%M4_home%\DeIsL1.isu4 Reboot your computer.Chapter 3 Upgrading ID="21035"From a Previous ReleaseTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes the procedures to follow if you wish to upgrade ObjectTeam version 5.x or 6.1.1 to version 7.1.1 on PCs running Microsoft Windows. Before you startBefore starting this upgrade procedure, you must have:n A working ObjectTeam installation. n A new license fileBacking upAs a precaution, before installing this or any product, you should perform a backup of your system. For details, see REFID="32992" TYPE="XREF-TEXTCOPY"Backing Up Your System.Default directoryIn this chapter, the installation directory for the ObjectTeam product files is indicated as M4_home. By default, this is C:\Cayenne\Tools\, however you can install ObjectTeam elsewhere on your machine.Reading the Read Me First NotesThe Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation.To read the Read Me First Notes, open the file cd_drive:\readme.txt in a text editor, or open the file cd_drive:\readme.htm in a Web browser.For details of the supported Operating Systems and DBMS versions, open the file cd_drive:\certify.htm in a web browser.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28308" TYPE="XREF-TEXTCOPY"Upgrading an ObjectTeam Master Server 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22920" TYPE="XREF-TEXTCOPY"Upgrading an ObjectTeam Slave Server 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34715" TYPE="XREF-TEXTCOPY"Upgrading an ObjectTeam Client 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18ID="28308"Upgrading an ObjectTeam Master ServerIntroductionThis section discusses how to upgrade an ObjectTeam Master server from ObjectTeam 5.1.1, 5.2.1 or 6.1.1.StepsUpgrading an ObjectTeam Master server from a previous version involves the following steps:COLS="2"COLNAME="1" COLWIDTH="46p"COLNAME="2" COLWIDTH="399p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="26293" TYPE="XREF-TEXTCOPY"Dump Your RepositoriesCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="26868" TYPE="XREF-TEXTCOPY"Back Up Your ObjectTeam InstallationCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="20021" TYPE="XREF-TEXTCOPY"Stop All ObjectTeam-Related ServicesCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="20016" TYPE="XREF-TEXTCOPY"Install Your LicenseCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="24896" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files.COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="14753" TYPE="XREF-TEXTCOPY"Convert Your RepositoriesCOLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Optional: Configure ObjectTeam modules as described in REFID="38042" TYPE="XREF-TEXTCOPY"Chapter 4, Activating Modules.COLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"Optional: Restore Corporate-level customization files.ID="26293"Dump Your RepositoriesIntroductionIn ObjectTeam, a repository consists of a database part and a file system part. The directory in which the file system part is stored is called the repository directory. This contains individual directories for each repository, called corporate directories. To convert your repository data to ObjectTeam 7.1.1, you must first dump the data from each repository to disk. The ObjectTeam dump facility dumps data from a single repository into its corresponding corporate directory. The result is a structure like the following:M4_home/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'corproot/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'repository_name/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBDUMP/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'tablesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'project_id/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBDUMP/name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'tablesThe dumped database data is reloaded into the SQL Anywhere database when you run the convert program.Note: By default, your 5.x or 6.1.1 repositories were created in the M4_home\corproot directory. If you created a repository in some other directory, either within or outside M4_home, the database part will be dumped to that directory instead. Make sure you also back up that directory after dumping your repository. Before you startIf you have any customization files on any repository level other than corporate, you should delete these. Upload user environment filesΣ Before you dump your repository you should make sure it is complete by uploading the working versions of files in the file system, such as generated source files.Σ To upload your files from the user environment:1 Log on as administrator.2 Select Start | Programs | ObjectTeam | User Environment.The ObjectTeam User Environment Tool starts up.3 In the User Environment Tool, select your repository.4 Select View | Refresh to collate a list of all working versions of repository files in the file system.5 Select all the files which are unfrozen and select File | Upload.6 The files are frozen and loaded into the repository.How to dump your repository data from ObjectTeam 5.x or 6.1.1Σ To dump a repository from ObjectTeam 5.x or 6.1.1:1 While logged in as administrator, select Start | Programs | ObjectTeam | Corporate Management.The Corporate Management Tool starts up.2 In the Corporate Management Tool, select your repository.3 Select File | Backup.The Backup Repository dialog appears.FILENAME="00027.unk" ORIGFILE="pics/backrep611.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntupgr.fm5.mif"4 Select the Dump Database option, and deselect the Archive Repository option. Fill in the database password.5 Click Shutdown to shut down any running dbservers. Note: The dbservers will only shut down after all users have exited ObjectTeam.6 Click OK to proceed with the dump.The repository is dumped to the DBDUMP directory in the corporate directory. ID="26868"Back Up Your ObjectTeam InstallationIntroductionOnce you have dumped and backed up all repositories, you should make a complete backup of your ObjectTeam installation AND your repository databases. If for any reason you want to go back to your previous installation you can then restore your entire environment.Backing up your ObjectTeam installation Σ Once you have dumped and backed up all repositories:1 While logged in as administrator, back up the entire M4_home directory and DBMS databases to separate media, such as tape. Once you have successfully completed the upgrade, you can remove the backup if you wish.Note: If you have dumped any repositories to directories outside M4_home, be sure to back up these directories as well.Customization filesIf you have made any customizations to files on Corporate level (those in the M4_home\etc directory and M4_home\tcl directories) be aware that these are deleted during the upgrade to version 7.1.1. Lower-level customization files such as those on Project or System level, are stored in the repository, and are therefore not deleted by the upgrade procedure.You can restore files from your backup to the new module customization directories (M4_home\modules\module\etc) once you have run the upgrade, but be aware that customizations from 5.x or 6.1.1 may not work with 7.1.1. For more details on customization and modules, see the ObjectTeam Customization Guide.Note also that the names of some customization files have changed from previous versions. For a complete list of all customization files, see the ObjectTeam Customization Guide.ID="20021"Stop All ObjectTeam-Related ServicesBefore you upgradeWhen you dumped your repository data, you shutdown your ObjectTeam installation. Before you can upgrade, you must also remove any running ObjectTeam services.How to stop ObjectTeam servicesΣ To stop ObjectTeam services:1 In the Control Panels window, double-click on the Services icon.The Services windows appears.2 Look for the following services and click on Stop for each:n ObjectTeam 5.x: - ObjectTeam Broker- ObjectTeam License server- Portmapn ObjectTeam 6.1.1: - ObjectTeam Broker- Your Flexlm service (e.g., "Cayenne license manager")How to remove SSA servicesΣ If you created any SSA services for use with a slave server you must also remove these:1 In the ObjectTeam program group, double-click on the SSA Service Manager. The SQL Anywhere Service Manager window appears.2 For each service you defined, select its name end click Remove, then click Close.ID="20016"Install Your LicenseLicensingTo upgrade to ObjectTeam 7.1.1, you must configure licensing. How you do this depends on whether you have a temporary or permanent license:Temporary licenseYou must install your ObjectTeam license, as described in this sectionPermanent licenseYou must install a license server, as decribed in REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server. After you have done that, continue to REFID="24896" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product Files.Copying your licenseΣ To install your temporary license file:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Make a FLEXlm license directory:C:\cayenne\flexlm\license3 If you received the license:- On a floppy or CD, copy the license to C:\cayenne\flexlm\license\cayenne.dat- Via email, copy and paste the new feature information into an empty text file and save it as C:\cayenne\flexlm\license\cayenne.dat- Via fax, enter the new feature information by hand into an empty text file, and save it as C:\cayenne\flexlm\license\cayenne.datID="24896"Install the ObjectTeam Product FilesBefore you startBefore you install the ObjectTeam product files, check your PATH variable and remove any entries relating to your previous ObjectTeam and SQL Anywhere installation.How to install the product filesΣ To install the product files:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Shut down any other running applications, including DOS windows.3 Insert the ObjectTeam CD into the CD drive. (This can be a local or networked CD drive.)4 In the Windows Explorer, double-click on CD_drive:\Setup.exe.5 Proceed through the Welcome screen to the Select Products dialog box.6 The following choices are presented:- ObjectTeam- DocExpress- DocIt7 Select ObjectTeam.For details on installing DocIt or DocExpress, see REFID="16254" TYPE="XREF-TEXTCOPY"Appendix A, Installing DocExpress and DocIt. 8 To view ObjectTeam's Read Me First Notes, click the Product Notes button. The Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation!9 Click Install to proceed with the installation.The Product Requirements dialog box shows you the complete list of hardware and software requirements for your selected components. 10 If your workstation meets all of the listed hardware and software requirements, click Next to proceed with installation.The ObjectTeam install program starts up.11 Proceed through the Welcome dialog.A warning is displayed informing you that an existing installation has been detected.12 Click Next to upgrade your installation.A warning is displayed reminding you that your repositories must be dumped before upgrading. 13 Click Yes to continue.14 A dialog appears, asking you if you want to install the online documentation. Click Yes to accept.The Sybase SQL Anywhere dialog asks if you want to install the SQL Anywhere 5.5 files.15 If you want to use an existing Sybase SQL Anywhere installation, select the second option. However, before you can use your existing installation, you must move the SQL Anywhere settings for SQLANY and PATH to the Windows NT system environment. The SQL software is then installed in the M4_home\sqlany55 directory and the SQLANY and PATH variables are set automatically.16 You are asked if this is a standalone or client/server installation. For more details, see REFID="16080" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing for Installation.The setup program deletes your current installation. The ObjectTeam software loads into the directory you specified. A progress bar informs you of the progress of the installation.17 You are asked to specify the complete path to the license file. The default is C:\Cayenne\Flexlm\license\cayenne.dat. The product files are now installed. You must now convert your repository data.ID="14753"Convert Your RepositoriesCopy your repository to the new locationΣ Before you convert your repositories, it is recommended to move them to C:\Cayenne\repos.1 Copy your old corporate directories to C:\Cayenne\repos using either the Explorer or the MS-DOS xcopy command. For example, if your old repository directory was in C:\ot4omt\corproot, enter the following in an MS-DOS window:xcopy C:\ot4omt\corproot C:\Cayenne\repos /eConverting your repositoriesΣ To convert your repositories, you must run M4_home\bin\convert61to71 in an MS-DOS window. convert61to71 -P password -d dbDir -h host -s server dbName dumpDirConvert61to71 converts an ObjectTeam 5.x or 6.1.1 repository dumped in the directory dumpDir, to an ObjectTeam 7.1.1 repository. The dbName denotes the name of the new database in SQL Anywhere. This database is stored in directory dbDir.The arguments are: COLS="2"COLNAME="1" COLWIDTH="139p"COLNAME="2" COLWIDTH="309p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ArgumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"-P passwordCOLNAME="2" VALIGN="TOP" MOREROWS="0"Plain password for accessing the new databaseCOLNAME="1" VALIGN="TOP" MOREROWS="0"-d dbDirCOLNAME="2" VALIGN="TOP" MOREROWS="0"Database directory. This is the directory in which the database file will be stored.COLNAME="1" VALIGN="TOP" MOREROWS="0"-h hostCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the machine running the SQL Anywhere database server.COLNAME="1" VALIGN="TOP" MOREROWS="0"-s serverCOLNAME="2" VALIGN="TOP" MOREROWS="0"This is the name of the SQL Anywhere database server. By default this is the same as host. Note however, that server does not refer to the name of a machine.For more details, type convert61to71 -help.ExampleThe following line shows an example conversion:convert61to71 -P corp_xyz -d c:\cayenne\repos -h neptune -s neptune my_corp_db c:\cayenne\repos\my_corpID="22920"Upgrading an ObjectTeam Slave ServerIntroductionThis section discusses how to upgrade an ObjectTeam Slave server from ObjectTeam 5.1.1, 5.2.1, or 6.1.1.Note: The following instructions refer to the ObjectTeam home directory as M4_home. By default, this is C:\Cayenne\Tools\, however ObjectTeam may be installed elsewhere on your machine.OverviewUpgrading a Slave server on Windows NT consists of the following steps:COLS="2"COLNAME="1" COLWIDTH="57p"COLNAME="2" COLWIDTH="393p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="13606" TYPE="XREF-TEXTCOPY"Verify Your Master Server RequirementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="15450" TYPE="XREF-TEXTCOPY"Install the ObjectTeam Product FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Optional: Configure ObjectTeam modules as described in REFID="38042" TYPE="XREF-TEXTCOPY"Chapter 4, Activating Modules.ID="13606"Verify Your Master Server RequirementsIntroductionIf you want to upgrade a Slave server, be aware of the following requirement:n When you upgraded a Master server, you should have selected the option Client/Server. Selecting this enables an SQL Anywhere database client on the Slave server to connect to the SQL Anywhere server on the Master server.How to check your SQL Anywhere ServiceΣ To check your SQL Anywhere service on the Master server:1 Log in to the Master server as administrator.2 Select Start | Programs | Cayenne Repository | Service Manager. The Service Manager window appears.FILENAME="00028.unk" ORIGFILE="pics/servmang.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntupgr.fm5.mif"3 The name OTservice should appear in the Service Name field, and the Start button should be depressed.4 If the service is not running, click the Start button.5 If the service does not exist follow the steps below.How to create a new serviceΣ To create a new service:1 In the SQL Anywhere Service Manager window, click New.The Service Type window appears.FILENAME="00029.unk" ORIGFILE="pics/servtype.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntupgr.fm5.mif"2 Network Server is the default. Click OK to accept this.The Edit Service Configuration window appears.FILENAME="00030.unk" ORIGFILE="pics/servcnfg.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntupgr.fm5.mif"3 Enter OTservice as the name of the new service. 4 In the Parameters field, enter -n server, where server is the name of the Master server.5 Select the Automatic Startup radio button.6 Make sure the path for the SQL Anywhere executable is correct. If it is not, click on Path and locate the executable (by default C:\Cayenne\Tools\Sqlany55\Win32\Dbsrv50.exe). 7 Select the check box Allow Service To Interact With Desktop.8 Click OK to register your settings.ID="15450"Install the ObjectTeam Product FilesHow to upgrade a Slave ServerΣ To upgrade as Slave Server:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Shut down any other running applications, including DOS windows.3 Insert the ObjectTeam CD into the CD drive. (This can be a local or networked CD drive.)4 In the Windows Explorer, double-click on CD_drive:\Setup.exe.5 Proceed through the Welcome screen to the Select Products dialog box.6 The following choices are presented:- ObjectTeam- DocIt- DocExpress7 Select ObjectTeam.For details on installing DocIt or DocExpress, see REFID="16254" TYPE="XREF-TEXTCOPY"Appendix A, Installing DocExpress and DocIt. 8 To view ObjectTeam's Read Me First Notes, click the Product Notes button. The Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation!9 Click Install to proceed with the installation.The Product Requirements dialog box shows you the complete list of hardware and software requirements for your selected components. 10 If your workstation meets all of the listed hardware and software requirements, click Next to proceed with installation.The ObjectTeam install program starts up.11 Proceed through the Welcome dialog.The Existing Installation dialog appears to inform you that an existing ObjectTeam installation has been detected. 12 Select Next to upgrade your existing installation.Upgrading your existing installation removes your current installation, then makes a new installation. 13 A confirmation dialog is displayed informing you of the consequence of your choice. Click Yes to continue or No to stop the upgrade.14 You are asked if you are want to install the product documentation. 15 You are asked if you want to install SQL Anywhere. The default is Yes. (Choose No only if you want to use an existing SQL Anywhere 5.5 installation.)16 You are asked for the installation directory. The default is C:\Cayenne\Tools.The setup program deletes your installation and the ObjectTeam software loads into the directory you specified. A progress bar indicates the progress of the installation.17 The User Account dialog asks you for details of the user account under which the services will be started. The services must be run under this account so that the remote disk can be attached. The account should be an account in the Administrator group, in any Domain. The account must have the right "log on as a service". If you specify an account that does not have the "log on as a service" right, then when the ot_broker attempts to start, you will get an error. For details on how to give an account this right, see REFID="13913" TYPE="XREF-TEXTCOPY"Configure a User Account.18 You are asked for the location of your license file:a If you are running the license server software on this machine, or your license file is stored locally, the default is C:\Cayenne\Flexlm\license\cayenne.dat. b If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a semi-colon (;).The installation script places an ObjectTeam menu in your Start menu, then sets some system environment variables.You are returned to the Cayenne Install Wizard.19 Click Exit.A dialog box is displayed asking if you want to reboot now or later for your changes to take effect. 20 Select Now and click on OK.The setup program then reboots your computer.Next stepsObjectTeam consists of a base product and a number of optional features. Each optional feature is implemented as an ObjectTeam module. If you have purchased any such feature, the corresponding modules should first be activated.For details on how to activate modules, go to REFID="38042" TYPE="XREF-TEXTCOPY"Activating Modules.ID="34715"Upgrading an ObjectTeam ClientHow to run the upgradeΣ To run the upgrade:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Shut down any other running applications, including DOS windows.3 Insert the ObjectTeam CD into the CD drive. (This can be a local or networked CD drive.)4 In the Windows Explorer, double-click on CD_drive:\Setup.exe.5 Proceed through the Welcome screen to the Select Products dialog box.6 The following choices are presented:- ObjectTeam- DocExpress- DocIt7 Select ObjectTeam.For details on installing DocIt or DocExpress, see REFID="16254" TYPE="XREF-TEXTCOPY"Appendix A, Installing DocExpress and DocIt. 8 To view ObjectTeam's Read Me First Notes, click the Product Notes button. The Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation!9 Click Install to proceed with the installation.The Product Requirements dialog box shows you the complete list of hardware and software requirements for your selected components. 10 If your workstation meets all of the listed hardware and software requirements, click Next to proceed with installation.The ObjectTeam install program starts up.11 Proceed through the Welcome dialog.12 The Existing Installation dialog is displayed, informing you that an existing ObjectTeam installation has been detected. Select Next to upgrade your existing installationUpgrading your existing installation removes your current installation, then makes a new installation. 13 A confirmation dialog is displayed informing you of the consequence of your choice. Click Yes to continue or No to stop the upgrade.14 A dialog is displayed asking if you want to install the Product documentation. Click Yes to accept.15 You are asked for the installation directory. The default is C:\Cayenne\Tools.The ObjectTeam software loads into the directory you specified. A progress bar informs you of the progress of the installation.16 A dialog is displayed asking for the location of your license file. The default is C:\Cayenne\Flexlm\license\cayenne.dat. Click Next.17 You are asked for the location of your license file:a If you are running the license server software on this machine, or your license file is stored locally, the default is C:\Cayenne\Flexlm\license\cayenne.dat. b If you are running the license server software on another machine, you must identify the port being used by the license service on the server and the host name of the server. On the license server, open the license file cayenne.dat in a text editor. The port appears as the last field on the SERVER line. Cayenne Software uses the port number 7126 by default. For example:SERVER neptune 08005a88359e 7126Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended to the end, separated from the previous path by a semi-colon (;).Windows NT: The installation script places an ObjectTeam menu in your Start menu, then sets some system environment variables.Windows 95: The installation script places an ObjectTeam menu in your Start menu, then modifies your AUTOEXEC.BAT file to set the system environment variables. You are returned to the Cayenne Install Wizard.18 Click Exit.A dialog box is displayed asking if you want to reboot now or later for your changes to take effect. 19 Select Now and click on OK.The setup program then reboots your computer.Next stepsObjectTeam consists of a base product and a number of optional features. Each optional feature is implemented as an ObjectTeam module. If you have purchased any such feature, the corresponding modules should first be activated.For details on how to activate modules, go to REFID="38042" TYPE="XREF-TEXTCOPY"Activating Modules.Chapter 4 Activating ID="38042"ModulesTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes how to activate optional ObjectTeam functionality provided in licensed modules.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27316" TYPE="XREF-TEXTCOPY"ObjectTeam Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2ID="27316"ObjectTeam ModulesIntroductionObjectTeam consists of a base product and a number of optional features. Each optional feature is implemented as an ObjectTeam module. To use the feature, you must activate the module. LicensingMost modules require a valid license. If ObjectTeam displays license-related error messages, you may not have a valid license. Refer to REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server for more information.Modules and repository levelsThe instructions here cover how to activate modules on Corporate level for an entire corporate repository. You must have root access to do this. Modules activated on Corporate level are available by default for all users of this repository on every level.You do not have to activate all modules on Corporate level. Users can activate them on any other level in the repository, as long as they are licensed.Which ObjectTeam modules are availableA module is a directory of files that implement an optional ObjectTeam feature. The directory name is the module name. By default, all modules are stored in the modules directory of your M4_home directory.Modules on the following features are supplied with ObjectTeam. COLS="3"COLNAME="1" COLWIDTH="150p"COLNAME="2" COLWIDTH="198p"COLNAME="3" COLWIDTH="279p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FeatureCOLNAME="2" VALIGN="TOP" MOREROWS="0"ModuleCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"Code GenerationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ADA83 Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Ada Professional Developers Toolkit COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ADA95 Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Ada Professional Developers Toolkit COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"C++ Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for C++COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CORBA IDL Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for CORBA IDLCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Delphi Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for DelphiCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Forte Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for FortΘCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Java Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for JavaCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"NewEra Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for Informix NewEraCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent C++ GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for C++COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PowerBuilder Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for PowerBuilderCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Smalltalk Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for SmalltalkCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Visual Basic Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Code Generation Guide for Visual BasicCOLNAME="1" VALIGN="TOP" MOREROWS="0"Version ControlintegrationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClearCase IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam ClearCase Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Continuus IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Continuus Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Razor IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Razor Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"Requirement engineering integrationCOLNAME="2" VALIGN="TOP" MOREROWS="0"DOORS IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam DOORS Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"RTM IntegrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam RTM Integration GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"Document GenerationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker 5.0COLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OMT FrameMaker 5.0COLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OMT WordCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OMT Word 97COLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"WordCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Word 97COLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Document Generation GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"MiscellaneousCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Corporate modelingCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Project Management GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Groundworks (VAR) interfaceCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Modeling GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"OMTCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Modeling GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Microsoft Repository InterfaceCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Project Management GuideCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"SecurityCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ObjectTeam Project Management GuideNote: Not all modules are available on all platforms. Code GenerationIn previous releases of ObjectTeam, target language for code generation was set using the variables M4_package and M4_target_lang. This mechanism has been replaced by modules. These variables are no longer used. Note: The C++ code generation implemented in the C++ Code Generation module is different from previous versions of ObjectTeam. The previous implementation of C++ code generation is available in the compatibility module Persistent C++ Generation. For more details, see chapter on compatibility in the ObjectTeam Code Generation Guide for C++.User-defined modulesYou can create your own ObjectTeam modules. For details, see ObjectTeam Customization Guide.ID="13855"How to Activate a Module on Corporate levelΣ To activate a module:1 In the Browser, open the <customization files> pseudo-object on Corporate level.The objects etc and tcl appear.2 Open the etc object.3 A list of all customization files on Corporate level appear. 4 Double-click on the modules.modules object. The Modules Availability Editor starts up.FILENAME="00031.unk" ORIGFILE="../shared_files/pics/modedit.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntmods.fm5.mif"5 Select Edit | New. 6 The Select Module dialog appears, displaying a list of all available modules.Note: If your modules directory is not the modules directory of your M4_home directory, click the Browse button to locate the module directory in the file system. 7 Select the name of the module you wish to activate and click OK.The new module has been added to the list of active modules8 Save the modules.modules file and exit the Module Availability Editor.Note: If an error message on conflicting modules appears, refer to Resolving Conflicting Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14 for details.9 Select Utilities | CloneNote: Because of the way customization files are read by ObjectTeam, you have to clone (or restart) the Browser if you want the changes made to modules.modules files on Corporate level and User Customization level to take effect.Customization files on these levels are only read at start-up.ID="10485"Checking if a module is activeΣ To check which modules are active on a particular Browser level:1 Move to the Browser level of your choice2 Select Utilities | Show Active ModulesThe Active Modules dialog box appears, listing all the modules that are active on the current Browser level.FILENAME="00032.unk" ORIGFILE="../shared_files/pics/actmod.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntmods.fm5.mif"ObjectTeam Module SpecificationsIntroductionA modules.modules customization file contains one or more module specifications. Each module specification activates or deactivates a module. A modules.modules customization file can exist at any Browser level, from corporate level through user levelHow module specifications are readThe module specifications in modules.modules files are incrementally read by ObjectTeam. The specifications in a modules.modules file on Corporate level, for example, are read when a user starts ObjectTeam, whereas those in a modules.modules file on Project level are read when a user opens the Project in the ObjectTeam Browser.The set of module specifications on a certain Browser level is the result of ObjectTeam's adding module specifications from all the modules.modules files on higher levels.This implies that if you want the changes made in a certain modules.modules file to take effect, you first have to make ObjectTeam read the modules.modules file. Note: If you made changes to a modules.modules file on Corporate level or User Customization level, you cannot move up one level anymore; the changes only take effect if you either clone or restart the Browser.ExampleIf the modules.modules file was changed on Project level, in a project called ProjectX, for example, you should first move up (by selecting the Corporate object in the Navigation Area, for example). If you then open ProjectX again, ObjectTeam adds the module specifications in this file to the current set of module specifications.The Module Availability EditorIntroductionThe Module Availability Editor is the tool with which you create, activate, delete and manipulate ObjectTeam module specifications. It starts up if you edit the customization file modules.modules.FILENAME="00033.unk" ORIGFILE="../shared_files/pics/modedtr.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntmods.fm5.mif"MenusThe following menus and menu entries are available in the Module Availability Editor:COLS="3"COLNAME="1" COLWIDTH="57p"COLNAME="2" COLWIDTH="150p"COLNAME="3" COLWIDTH="240p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MenuCOLNAME="2" VALIGN="TOP" MOREROWS="0"Menu EntryCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"ReloadCOLNAME="3" VALIGN="TOP" MOREROWS="0"Rereads the module specificationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SaveCOLNAME="3" VALIGN="TOP" MOREROWS="0"Saves the changes made in the Module Availability EditorCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ExitCOLNAME="3" VALIGN="TOP" MOREROWS="0"Quits the Module Availability EditorCOLNAME="1" VALIGN="TOP" MOREROWS="0"EditCOLNAME="2" VALIGN="TOP" MOREROWS="0"NewCOLNAME="3" VALIGN="TOP" MOREROWS="0"Adds a new module specificationSee How to Activate a Module on Corporate level on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Add Required ModulesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Adds to the selected module the modules that are specified as requiredModules See Required Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Change | Select StateCOLNAME="3" VALIGN="TOP" MOREROWS="0"Activates the selected module: it changes its state from off to on or vice versaCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Change | LocationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Use this option if the location of a module has changedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"InfoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Brings up an information dialog box listing details, such as module type, module directory location and required modulesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DeleteCOLNAME="3" VALIGN="TOP" MOREROWS="0"Deletes the selected module specification(s) COLNAME="1" VALIGN="TOP" MOREROWS="0"ViewCOLNAME="2" VALIGN="TOP" MOREROWS="0"ToolBarCOLNAME="3" VALIGN="TOP" MOREROWS="0"Turns the Tool Bar on or offCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Context AreaCOLNAME="3" VALIGN="TOP" MOREROWS="0"Turns the Context Area on or offCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Message AreaCOLNAME="3" VALIGN="TOP" MOREROWS="0"Turns the Message Area on or offCOLNAME="1" VALIGN="TOP" MOREROWS="0"OptionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"FontCOLNAME="3" VALIGN="TOP" MOREROWS="0"Use this option to change the font or font size used in the Display AreaCOLNAME="1" VALIGN="TOP" MOREROWS="0"CheckCOLNAME="2" VALIGN="TOP" MOREROWS="0"RequirementsCOLNAME="3" VALIGN="TOP" MOREROWS="0"Checks if all the modules required by the modules in the Display Area have been addedSee Required Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ConflictsCOLNAME="3" VALIGN="TOP" MOREROWS="0"Checks if there are any modules that conflict with other modulesSee Conflicting Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ExistenceCOLNAME="3" VALIGN="TOP" MOREROWS="0"Checks if all the module directories existCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AllCOLNAME="3" VALIGN="TOP" MOREROWS="0"Checks on requirements, conflicts and existenceCOLNAME="1" VALIGN="TOP" MOREROWS="0"FilterCOLNAME="2" VALIGN="TOP" MOREROWS="0"Filter on Current File EntriesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Use this option if you only want to see those module specifications in the Display Area that can be edited on the current level.How ObjectTeam Modules InterrelateIntroductionCertain ObjectTeam modules require other modules to work properly, others are only supporting other modules, and some modules exclude each other. Every module directory contains a file called properties.properties. This file contains certain fields through which dependencies between modules and module types are specified. These fields are discussed in this section.For more informationSee ObjectTeam Customization Guide for details on the properties.properties file.In this sectionThis section contains the following subsections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32587" TYPE="XREF-TEXTCOPY"Required Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28274" TYPE="XREF-TEXTCOPY"Conflicting Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14623" TYPE="XREF-TEXTCOPY"Resolving Conflicting Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22656" TYPE="XREF-TEXTCOPY"Supporting Modules 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="32587"Required ModulesIntroductionIf a particular module require other modules in order to operate properly, the following fields can be used in the properties.properties file to specify required modules:n requiredModulesn requiredModuleTypesViewing required module (types)Users of the Module Availability Editor can see which modules and module types are required by a module by selecting Edit | Info. for that module. The Information Box that appears lists, among other things, the required modules and module types, if applicable.FILENAME="00034.unk" ORIGFILE="../shared_files/pics/info.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntmods.fm5.mif"requiredModulesIn this field, a list of required modules, separated by spaces, can be specified. If a module that requires other modules is selected in the Module Editor, the required module(s) will be automatically added to the modules.modules file too.requiredModuleTypesIf a module requires another module, but there is more than one module of that type available, a list of required module types is specified. If a module that requires other module types is selected in the Module Editor, a dialog box appears, listing all the available modules of that type. After a user of the Module Editor selects the module of his choice, this module is added to the modules.modules file.In the properties.properties file of the module C++ Code Generation, for example, the following module types are specified as requiredModuleTypes:n DevelEnv (C++ compilers)n CppClassLib (Class Libraries)Checking for requirementsYou can check if all the requirements have been met for all the modules by selecting Check | Requirements in the Module Availability Editor. If there are any requirements missing, an Information dialog box will list them.Tip: Check | All runs a more extensive check: on required modules, conflicting modules, and the existence of module directories.ID="28274"Conflicting ModulesIntroductionCertain modules exclude each other: if the module C++ Code Generation is active for a particular system, for example, the module Java Code Generation cannot be active at the same time.The following fields in the properties.properties file can be used to specify conflicting modules:n conflictingModulesn conflictingModuleTypesNote: A user of the Module Editor is still able to add a module that conflicts with another module, but will get an error message when he attempts to save the modules.modules file.Saving a conflicting modules.modules fileWhen you try to save a modules.modules file that contains conflicts, the following dialog box appears.FILENAME="00035.unk" ORIGFILE="../shared_files/pics/savemod.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntmods.fm5.mif"YesThe file is not saved. You should correct the conflict(s) by deactivating one of the conflicting modules (see Resolving Conflicting Modules on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14 for details). Use Check | Conflicts to find out which modules are conflicting.NoAll the modules in the modules.modules file that cause a conflict are deactivated, after which the file is saved.CancelCancels the operation.Viewing conflicting module (types)Users of the Module Availability Editor can see which modules or module types are defined as conflicting with the module by selecting Edit | Info for that module. The Information Box that appears lists, among other things, the conflicting modules and module types, if applicable.FILENAME="00036.unk" ORIGFILE="../shared_files/pics/info.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntmods.fm5.mif"conflictingModulesIn this field, a list of modules that are supposed to conflict with the current module can be specified. The list is separated by commas.conflictingModuleTypesIn this field, a list of module types that are supposed to conflict with the current module are listed. The list is separated by commas.Checking for conflictsYou can check for conflicts in the Module Availability Editor by selecting Check | Conflicts. If there are any conflicts, an Information dialog box will list them.Tip: Check | All runs a more extensive check: on required modules, conflicting modules, and the existence of module directories.ID="14623"Resolving Conflicting ModulesModule specifications and browser levelsThe Module Availability Editor displays the current set of module specifications: the result of incrementally read modules.modules files (see Checking if a module is active on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5). You can only edit or delete the modules that have been added on the current levelExample of a module conflictYou could encounter a situation in which you would like to add and activate a module that conflicts with a module that has been added and activated on a higher level. For example, the C++ Code Generation module is activated on Corporate level, but for one particular Project you would like to generate Java code.How to resolve a module conflictΣ To resolve a module conflict:1 Open the customization file modules.modules on the Browser level of your choice.The specifications you are going to add to this file will be valid on the current Browser level and below. (Project level and below, for example)2 In the Module Availability Editor, add the same module as the one on a higher level that is causing the conflict (C++ Code Generation, for example)Use Edit | New to bring up the Select Module dialog box. Select the module of your choice from this box.3 Deactivate the newly added module using Edit | Change | Select State The module's state is now off.4 Add the module that would conflict if the conflicting module on a higher level were not deactivated (Java Code generation, for example).Make sure its state is on.The new module is now only active for the configuration, phase, project or system for which the customization file modules.modules was added.ID="22656"Supporting ModulesIntroductionSupporting modules are modules that are required by other modules, but are not useful independently. As users usually do not need to know about supporting modules, they are, by default, not listed in the Select Module dialog box. This box appears if a user of the Module Editor selects Edit | New.Tip: With the check button Show Supporting Modules in the Select Module dialog box, supporting modules can be included in the list.isSupportingModuleThe field isSupportingModule in the properties.properties file is used to identify a module as supporting. The only possible values are yes or no. An empty value defaults to no.Appendix A Installing ID="16254"DocExpress and DocItTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionThis chapter describes how to install DocExpress and DocIt for ObjectTeam.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11471" TYPE="XREF-TEXTCOPY"Installing DocExpress Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31344" TYPE="XREF-TEXTCOPY"Installing DocIt Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5ID="11471"Installing DocExpressIntroductionThis section describes how to install DocExpress under Windows.Note: In order to use DocExpress, ObjectTeam must also be installed.LicensingDocExpress is licensed by the same license server that licenses ObjectTeam. Your ObjectTeam license file should contain feature lines for DocExpress. For more details on FLEXlm licensing, and how to add features to your license file, see REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server.How to install DocExpressΣ To install DocExpress:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Shut down any other running applications, including DOS windows.3 Insert the ObjectTeam CD into the CD drive. (This can be a local or networked CD drive.)4 In the Windows Explorer, double-click on CD_drive:\Setup.exe.5 Proceed through the Welcome screen to the Select Products dialog box.6 The following choices are presented:- ObjectTeam- DocExpress- DocIt7 Select DocExpress.8 To view DocExpress's Read Me First Notes, click the Product Notes button. The Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation!9 Click Install to proceed with the installation.The Product Requirements dialog box shows you the complete list of hardware and software requirements for your selected components. 10 If your workstation meets all of the listed hardware and software requirements, click Next to proceed with installation.The DocExpress install program starts.11 You are asked for the installation directory. The default is C:\Cayenne\OTDocTools.The DocExpress product files are installed.12 The install program asks you if you want it to set some environment variables. Click Next to let the setup set the variables.You are returned to the Cayenne Install Wizard.13 A dialog asks if you want to reboot your machine now or later. Select Now and click OK.Setting your environmentBefore using DocExpress, you must set the environment variable HOME. Σ Under Windows 95, set this in your autoexec.bat file as follows:1 Open the autoexec.bat file in an editor and enter the following line:set HOME %HOMEDRIVE% %HOMEPATH%Σ Under Windows NT, set this as a system environment variable:1 While still logged in as Administrator (or as a user who belongs to the Administrator group), select Start|Settings|Control Panel.2 In the Control Panel window, double-click on the System icon.3 In the System Properties window, select the Environment tab.4 Set HOME as a System Environment Variable with the following value:%HOMEDRIVE% %HOMEPATH%5 Select OK to close the System window.6 Close the Control Panel.7 Reboot the machine.Reading the DocExpress online manualsYou can access the ObjectTeam product documentation directly from the CD, as described in the CD insert. Alternatively you can install the product documentation on your hard drive.Σ To access the online DocExpress documentation:1 Select Start | Programs | Cayenne ObjectTeam | Product Documentation.2 In the DynaText Collection window, select the ObjectTeam collection and double-click on the DocExpress Set.The DocExpress books are opened in the reader window.ID="31344"Installing DocItIntroductionThis section describes how to install DocIt under Windows.RequirementsFor details of the hardware and software requirements, see the Read Me First Notes on the CD.You must have installed ObjectTeam before you install DocIt.Installation workflowTo install DocIt, you must:1 Add a DocIt feature line to the license file on the license server (if it does not already include this).2 Install the DocIt software.LicensingDocIt is licensed by the same license server that licenses ObjectTeam. Your ObjectTeam license file should contain a feature line for DocIt. For more details on FLEXlm licensing, and how to add features to your license file, see REFID="19159" TYPE="XREF-TEXTCOPY"Appendix B, Configuring a License Server.How to install DocItΣ To install DocIt:1 Log on to the computer (with administrator privileges if you are installing under Windows NT). 2 Shut down any other running applications, including DOS windows.3 Insert the ObjectTeam CD into the CD drive. (This can be a local or networked CD drive.)4 In the Windows Explorer, double-click on CD_drive:\Setup.exe.5 Proceed through the Welcome screen to the Select Products dialog box.6 The following choices are presented:- ObjectTeam- DocExpress- DocIt7 Select DocIt.8 To view ObjectTeam's Read Me First Notes, click the Product Notes button. The Read Me First Notes contain last-minute product information that may affect the installation. You must read these notes before starting installation!9 Click Install to proceed with the installation.The Product Requirements dialog box shows you the complete list of hardware and software requirements for your selected components. 10 If your workstation meets all of the listed hardware and software requirements, click Next to proceed with installation.The DocIt install program starts up.11 You are asked for the installation directory. The default is C:\Cayenne\OTDocTools.The DocIt product files are installed.12 The install program asks you if you want it to set some environment variables. Click Next to let the setup set the variables.You are returned to the Cayenne Install Wizard.13 A dialog asks if you want to reboot your machine now or later. Select Now and click OK.Setting your environmentBefore using DocIt, you must set the environment variable HOME. Σ Under Windows 95, set this in your autoexec.bat file as follows:1 Open the autoexec.bat file in an editor and enter the following line:set HOME %HOMEDRIVE% %HOMEPATH%Σ Under Windows NT, set this as a system environment variable:1 While still logged in as Administrator (or as a user who belongs to the Administrator group), select Start|Settings|Control Panel.2 In the Control Panel window, double-click on the System icon.3 In the System Properties window, select the Environment tab.4 Set HOME as a System Environment Variable with the following value:%HOMEDRIVE% %HOMEPATH%5 Select OK to close the System window.6 Close the Control Panel.7 Reboot the machine.Reading the DocIt online manualsΣ To access the online DocIt documentation:1 Select Start | Programs | Cayenne ObjectTeam | Product Documentation.2 In the DynaText Collection window, select the ObjectTeam collection and double-click on the DocIt Set.The DocIt books are opened in the reader window.Appendix B Configuring a ID="19159"License ServerTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIntroductionObjectTeam uses FLEXlm, a license management product from Globetrotter Software, Inc. to control licensing.This chapter describes:n How licensing works in ObjectTeamn How to set up a license server under Microsoft Windowsn How to obtain a permanent licenseMaster serverYou must follow the instructions in this chapter before you install or upgrade an ObjectTeam Master server. If you are installing a Slave server or Client, you must already have installed a Master server, so you can skip this chapter.Demo installationIf you only want to install a demonstration copy of ObjectTeam for trial purposes, you can skip this chapter. A demo installation does not need a license server.UNIX license serverIf you want to use a UNIX workstation as your license server, refer to the ObjectTeam Installation Guide for UNIX-based Systems.Related documentationRequired readingYou should read the FLEXlm End User Manual before installing the FLEXlm license software. The FLEXlm manual provides valuable information on network license management and site customization; for example, it provides details about the license file and various license administration tools. Recommended reading:For more information on network license management and UNIX system administration, read the FLEXlm Programmer's Guide (available from Globetrotter Software, Inc.) and Essential System Administration by Aeleen Frisch (published by O'Reilly & Associates, ISBN 0-937175-80-3).Online informationTo obtain the most current information about FLEXlm, you can access Globetrotter Software's World Wide Web page:http://www.globetrotter.com This home page provides access ton An online version of the FLEXlm End User Manualn FLEXlm end-user technical support, and answers to frequently asked questions (FAQs)n A question-and-answer server via the FLEXlm wizardIn this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14820" TYPE="XREF-TEXTCOPY"Licensing in ObjectTeam Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39823" TYPE="XREF-TEXTCOPY"Installing the License Server Software Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7ID="14820"Licensing in ObjectTeamIntroductionThis section explains the use of licensing in ObjectTeam, the difference between temporary and permanent licenses.Tip: If you are not interested in how licensing works and just want to get on with installation, skip to Installing the License Server Software on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7.License componentsLicense serverIn an ObjectTeam installation, a single machine in the network acts as license server. By default, this is the same machine as the ObjectTeam Master server. The license server consists of the following components:n A license manager daemon, lmgrd, that is started automatically when the machine is booted and runs as a service. This daemon receives requests for features from other workstations on the network and assigns them to the Cayenne daemon.n A Cayenne daemon, cayenne, that controls the usage of ObjectTeam features according to the number of licenses available in the license filen A license file, cayenne.dat n A license file variable, LM_LICENSE_FILE, that points to the location of the license file. Other machinesOn all machines running ObjectTeam software, the following component is necessary:n A license file variable, LM_LICENSE_FILE, that points to the address of the license serverTemporary licensesTo use ObjectTeam, you must obtain a license from Cayenne. Licenses are keyed to the ID of the machine on which you are running the license software. So before we can supply a license, you must inform us of this ID using the license request form.Issuing the license can take a day or so, so to get you started in the meantime, Cayenne supplies a temporary license that is not linked to a machine ID. This temporary license is valid for a limited period and usually comes on a floppy in your ObjectTeam package, though you may also receive it via email or fax.The temporary license file is made up of feature lines, each controlling the use of a single ObjectTeam feature. This is an example of a feature line:FEATURE OT_BROWSER_WIN cayenne 7.100 11-jan-98 0 2CF2F7D2EF08C75F701F "" DEMOUntil you receive the permanent license, you must install a copy of the temporary license on every workstation on which you install ObjectTeam software. The temporary license then controls access to all features on that machine itself; you cannot run a license server with a temporary license. During installation of ObjectTeam, you are prompted to set the LM_LICENSE_FILE variable to point to the location of your local temporary license file.Permanent licensesA permanent license is what Globetrotter refers to in the FLEXlm End User Manual as a floating license. This means it is installed on a particular machine in the network that acts as a license server. The license server controls the usage of ObjectTeam features by any workstation connected to the license server.Contents of a permanent license fileA license file is made up of a server line, a daemon line and a number of feature lines. This is an example of a license file:SERVER neptune 008005a88359e 7126DAEMON cayenne C:\cayenne\flexlm\bin\cayenne.exeFEATURE OT_BROWSER_WIN cayenne 7.100 11-jan-98 10 2CF2F7D2EF08C75F701F ""n The server line identifies the name and (encrypted) hostid or volume serial number of the license server, and the port on which it receives license requests.n The daemon line identifies the name and location of the cayenne daemon, responsible for managing ObjectTeam licenses.n A feature line identifies a particular ObjectTeam licensed feature, the version of ObjectTeam for which it is valid, the expiry date and the number of workstations that can use it simultaneously. If this is a nodelocked feature, the hostid is also specified.Replacing a temporary license with a permanent licenseOnce you receive your permanent license, you:n Install it on the license server.n Start the license server.n Remove the temporary licenses installed on each machine running ObjectTeam.n Reset LM_LICENSE_FILE on each machine running ObjectTeam to point to the license server. On a machine other than the license server, LM_LICENSE_FILE has the format port@server, where port is the TCP/IP port being used by the license server, and server is the host name of the server running the license service. These are identified in the server line of the license file. Licensing processOnce the license server is running, it controls the use of ObjectTeam features. When a user tries to start an ObjectTeam feature, such as a Browser, ObjectTeam:n Examines LM_LICENSE_FILE to find the address of the license server. On a client for example, this has the format port@server.n Makes a request for a feature with the appropriate name (such as OT_BROWSER_WIN). The request is passed to the license server at the specified address. The license manager daemon on the license server:n Receives the request on the specified port.n Searches the license file for the feature with the specified name. On the feature line is also listed the name of the daemon which is reponsible for controlling this feature, namely cayenne.n Passes the request to the cayenne daemon, which then grants or denies a license based on the number of licenses available.Editing license filesNormally, your license file contains all the features that you need to use ObjectTeam. If you subsequently decide that you would like to use additional features of ObjectTeam, you can order additional licenses for each feature. To make a new license available, you simply add a new feature line to your existing license file.Σ To edit the license file:1 Make a copy of your current license file.2 Open the license file (by default C:\Cayenne\Flexlm\license\cayenne.dat) using a text editor.3 Edit the license file as needed:- To add a new feature, type (or copy and paste) the new feature line into the file. If you are typing the license information, be careful to avoid typing mistakes.- To deactivate a feature, comment it out by typing a hash character (#) at the start of the line. - To replace a feature, deactivate the old line and add the new one as described above.4 Save the edited file.ID="39823"Installing the License Server SoftwareIntroductionBefore you install or upgrade an ObjectTeam Master server, you must configure a machine in your network as a license server. This can be the same machine as the Master server (for example, in the case of a standalone installation), or some other machine.This section describes how to install the FLEXlm license software on a Master server or standalone machine, as well as the changes you need to make to certain server files.Note: You cannot use a machine running Windows 95 as a license server in a client/server installation. If you want to run ObjectTeam in a client/server installation, you must use a machine running Windows NT as the license server. ID="32637"How to install the license management softwareΣ To install the license management software:1 Log on to the server (as Administrator, or as a user who belongs to the Administrator group if you are using Windows NT).2 Insert the CD into your CD drive, which can be a local or networked drive.3 Go to CD_drive:\objecttm\win32\flexlm\ where CD_drive is the letter of the CD drive.4 Double-click on setup.exe.You are prompted for the installation location of the FLEXlm files. The default is C:\Cayenne\Flexlm. You should install FLEXlm on the same drive on which you will install ObjectTeam. If there is not enough space on C drive, use another drive. If the Cayenne directory does not already exist, it is created.Next stepsIf you have a:n Temporary license, you need to obtain a permanent license, as described in Obtaining a Permanent License on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8.n Permanent license, install the permanent license and start the license server, as described in Installing a Permanent License on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10.ID="36976"Obtaining a Permanent LicenseIntroductionTo carry out this procedure, your system must be configured with Microsoft TCP/IP network software. Note that your PC must have a static IP address and host name.Refer to your operating system documentation (from Microsoft) for information on how to enable the TCP/IP protocol.Obtaining a permanent licenseTo obtain a permanent license, you must find out the host ID of your machine and submit it to Cayenne using the License Request Form. Σ To order a license:1 Select Start | Settings | Control Panel.2 Double-click the FLEXlm icon.The FLEXlm license manager window appears.3 Select the Advanced tab.FILENAME="00037.unk" ORIGFILE="pics/licman2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntflex.fm5.mif"4 Click Diagnostics.A list of IDs is displayed.FILENAME="00038.unk" ORIGFILE="pics/licids.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntflex.fm5.mif"5 Windows NT: The id you need is the server's hostid. This is the second from bottom line.Windows 95 Standalone: The id you need is the server's Disk Serial Number. This is the bottom line.6 Submit a license request in either of the following ways:- Go to the license request form provided on Cayenne Software's World Wide Web page at: http://www.cayennesoft.com/license. - Print out the form provided on the CD (CD_drive:\lic_req.txt or CD_drive:\lic_req.htm), fill it in and fax it to us at 617-273-0618.If you are ordering from outside the United States, contact your Cayenne sales office.Cayenne will send you a new license for the product by electronic mail or by fax. Once you receive a permanent license, carry out the instructions in Installing a Permanent License on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10. ID="40695"Installing a Permanent LicenseIntroductionOnce you receive a permanent license, you can start the license server. Carry out the steps in this section while logged into the license server as Administrator (or as a user who belongs to the Administrator group).Install your permanent license fileΣ To install your permanent license file:1 If you received the permanent license:- On a floppy, copy the permanent license to C:\Cayenne\Flexlm\license\cayenne.dat.- Via email, copy and paste the new feature information into an empty text file and save it as C:\Cayenne\Flexlm\license\cayenne.dat.- Via fax, enter the new feature information by hand into an empty text file, and save it as C:\Cayenne\Flexlm\license\cayenne.dat.2 Open the license file in a text editor and check that the DAEMON line points to the correct location of the cayenne daemon, for example:DAEMON cayenne C:\Cayenne\Flexlm\bin\cayenneHow to set LM_LICENSE_FILE on the license server under Windows NTOn a license server running under Windows NT, you must now set the license file environment variable, LM_LICENSE_FILE, to point to the permanent license:Σ To set the LM_LICENSE_FILE variable on the license server:1 Select Start|Settings|Control Panel.2 In the Control Panel window, double-click on the System icon.3 In the System Properties window, select the Environment tab.4 Set LM_LICENSE_FILE as a System Environment Variable with the following value:C:\Cayenne\Flexlm\license\cayenne.datNote: If there is already an LM_LICENSE_FILE setting, then add the above path at the end of the line, separated from the previous path by a semi-colon (;).5 Select OK to close the System window.6 Close the Control Panel.7 Reboot the machine.How to start the license manager daemon on a Master server or standaloneΣ During installation of the FLEXlm software, a control panel was also installed:1 In the Control Panels window, double-click on the FLEXlm icon.2 Select the Setup tab.3 Fill in the Service name, location of the license daemon executable, location of the license file and where you wish log files to be stored. The following figure shows the recommended settings.FILENAME="00039.unk" ORIGFILE="pics/licman.gif" ORIGTYPE="X" ORIGDOC="../../sources/ignt/igntflex.fm5.mif"4 Select the Start Server at Power Up check box. 5 Windows NT: Select the Use NT Services check box. This ensures that lmgrd starts automatically when the machine is rebooted.6 Select the Control tab.7 Select the Start button to start the license server.For more information on using the control panel, such as how to stop or remove the service, see the FLEXlm End User Manual.Appendix C TroubleID="39959"shootingTYPE="MIFmarker"TYPE="number"0TYPE="text"Installation GuideIf installation failsIf something fails during the installation, the best solution is to run the Uninstall script, as described in Uninstalling ObjectTeam Software on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27, and run the setup program again. Error messagesMany errors start with the message "Cannot initialize client context". The important lines to look at are the last two or three lines. These usually contain some clear indication of the cause of the problem.When troubleshooting, be aware that some error messages only pop up after a timeout limit has been reached. These are usually set to one minute. If nothing happens, wait at least this time before taking action.Changes Made During InstallationIntroductionDepending on the installation:n Windows environment variables are setn Windows services are installedn ObjectTeam configuration files are createdHow to check your environment variablesΣ Windows NT: Select Start | Settings | Control Panel, and double click on the System control panel. Select the Environment tab.Σ Windows 95: Edit your autoexec.bat file in a text editor.How to check your servicesΣ Windows NT: Select Start | Settings | Control Panel, and double click on the Services control panel. Check that the ObjectTeam Broker service is running.Changes made in a Master server or standalone installationThe following changes are made for a Master server or standalone installation:n Windows NT: The ObjectTeam Broker is installed as a Windows NT service. n Windows 95: The ObjectTeam Broker is installed as a executable that starts at boot.n The variable M4_home is set as an environment variable. All ObjectTeam tools use this variable. The default value is C:\Cayenne\tools.n The variable SQLANY is set as an environment variable. Default is C:\Cayenne\tools\sqlany55.n The variable LM_LICENSE_FILE is set as an environment variable. Default is C:\Cayenne\Flexlm\license\cayenne.dat.n %M4_home%\bin and %SQLANY%\win32 are added to your PATH.n The file M4_home\etc\objservers.objservers is modified when you create a repository. For more details, see the ObjectTeam System Administrator's Guide for Microsoft Windows.n The file M4_home\etc\m4env.m4env is created with the following ObjectTeam M4 variables:COLS="2"COLNAME="1" COLWIDTH="174p"COLNAME="2" COLWIDTH="255p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Set toCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_levelpathCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of your repositoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_brokerportCOLNAME="2" VALIGN="TOP" MOREROWS="0"Port on which broker is contacted. Default is 1825.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_imphostCOLNAME="2" VALIGN="TOP" MOREROWS="0"Machine running the ObjectTeam software.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_orb_lingerCOLNAME="2" VALIGN="TOP" MOREROWS="0"The time to wait for contact with brokerCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_orb_linger__lockserverCOLNAME="2" VALIGN="TOP" MOREROWS="0"The time to wait for contact with lockserverCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_masterserverCOLNAME="2" VALIGN="TOP" MOREROWS="0"This is set if this machine is a Mster server in a client/server (i.e. not standalone) installation.Changes made in a Slave server installationn The ObjectTeam Broker is installed as a Windows NT service. n The variable M4_home is set as an environment variable. All ObjectTeam tools use this variable. The default value is C:\Cayenne\tools.n The variable LM_LICENSE_FILE is set as an environment variable. Default is port@host.n The file M4_home\etc\m4env.m4env is created with the following ObjectTeam M4 variables:COLS="2"COLNAME="1" COLWIDTH="174p"COLNAME="2" COLWIDTH="255p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Set toCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_levelpathCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of your repositoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_nameserverhostCOLNAME="2" VALIGN="TOP" MOREROWS="0"The machine running as Master server.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_brokerportCOLNAME="2" VALIGN="TOP" MOREROWS="0"Port on which broker is contacted. Default is 1825.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_imphostCOLNAME="2" VALIGN="TOP" MOREROWS="0"Machine running the ObjectTeam software.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_orb_lingerCOLNAME="2" VALIGN="TOP" MOREROWS="0"The time to wait for contact with brokerCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_orb_linger__lockserverCOLNAME="2" VALIGN="TOP" MOREROWS="0"The time to wait for contact with lockserverClientn The variable M4_home is set as an environment variable. All ObjectTeam tools use this variable. The default value is C:\Cayenne\tools.n The variable LM_LICENSE_FILE is set as an environment variable. Default is port@host.n The file M4_home\etc\m4env.m4env is created with the following ObjectTeam M4 variables:COLS="2"COLNAME="1" COLWIDTH="174p"COLNAME="2" COLWIDTH="255p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Set toCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_levelpathCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of your repositoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_brokerportCOLNAME="2" VALIGN="TOP" MOREROWS="0"Port on which broker is contacted. Default is 1825.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_imphostCOLNAME="2" VALIGN="TOP" MOREROWS="0"Machine running the ObjectTeam software.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_orb_lingerCOLNAME="2" VALIGN="TOP" MOREROWS="0"The time to wait for contact with brokerCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_orb_linger__lockserverCOLNAME="2" VALIGN="TOP" MOREROWS="0"The time to wait for contact with lockserverError messagesWhen troubleshooting, be aware that some error messages only pop up after a timeout limit has been reached. These are usually set to five minutes. If nothing happens, wait at least this time before taking action.General troubleshootingIn the event of problems, check the M4_home\logs\ot_brok.log file as well as the status of the ObjectTeam broker service.Problems Starting the Browser or Other ToolStarting the browserERROR [115001]: Cannot initialize client contextERROR [115024]: Cannot obtain corporate id for 'levelpath'.ERROR [120051]: Name request for Corporate service 'levelpath' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120072]: Remote implementation 'levelpath' not found.ERROR [121001]: Implementation with id 'levelpath' not registered in implementation repositoryThe M4_levelpath variable is not set correctly.Set the ObjectTeam variable M4_levelpath to point to an existing repository, e.g., M4_levelpath=/corporate;RW. You can examine the existing repositories using the Corporate Management Tool. This variable is defined in %M4_home%/etc/m4env.m4env or in the .Meta4UserEnv file in your login directory. Starting the browserERROR [115001]: Cannot initialize client context.ERROR [115024]: Cannot obtain corporate id for 'levelpath'.ERROR [120051]: Name request for Corporate service 'levelpath' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120072]: Remote implementation 'wronglevelpath' not found.ERROR [120014]: Request for 'ot_broker' at host 'HOSTNAME' timed out after 60000 millisecondsThe SQLANY variable is not set correctly and/or the Path variable is not set to %SQLANY%\win32 in the System Environment.Set the Sybase SQL Anywhere system environment variable SQLANY to point to the installation directory of SQL Anywhere. On Windows NT this is done in the System Control Panel. On Windows'95 this is done in the autoexec.bat file.The default value is C:\Cayenne\Tools\sqlany55.Starting the browserERROR [210040]: (Message not available)ERROR [001004]: Module 210 not initialized.ERROR [001001]: Error while reading message file 'etc/message/message.210'.SYSERR [000002]: No such file or directoryThe M4_home variable is not set correctlySet the ObjectTeam system environment variable to point to the installation directory of ObjectTeam. On Windows NT this is done in the System Control Panel. On Windows 95 this is done in the autoexec.bat file.The default value is C:\Cayenne\Tools.Starting the browserERROR [115001]: Cannot initialize client contextERROR [115024]: Cannot obtain corporate id for 'levelpath'.ERROR [120051]: Name request for Corporate service 'levelpath' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120072]: Remote implementation 'levelpath' not found.ERROR [120048]: Operation 'Broker::getImpByName(String const & name, ImpDescriptor & descrip)' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120042]: Could not set address for broker at host 'HOSTNAME',port #numberERROR [011001] Host was not foundThe M4_imphost variable is not set correctlySet the ObjectTeam client variable M4_imphost to the host where an ObjectTeam broker runs, e.g., M4_imphost=capella;RW. This variable is defined in the %M4_home%/etc/m4env.m4env file or in the .Meta4UserEnv file in your login directory.Starting the browserERROR [115001]: Cannot initialize client contextERROR [115024]: Cannot obtain corporate id for 'levelpath'.ERROR [120051]: Name request for Corporate service 'levelpath' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120072]: Remote implementation 'levelpath' not found.ERROR [120014]: Request for 'ot_broker' at host 'HOSTNAME' timed out after 60000 millisecondsThe M4_brokerport variable is not set correctly.Set the ObjectTeam environment variable M4_brokerport to a number via which the broker can be reached. This variable is defined in %M4_home%/etc/m4env.m4env or in the .Meta4UserEnv file in your login directory. Default value: 1825Starting the browserERROR [123002]: Could not checkout license for OT_BROWSER_WINERROR [123001]: FLEXlm: Cannot find license file (-1,73:2) No such file or directoryThe LM_LICENSE_FILE variable is not set correctly.Set the FLEXlm system environment variable LM_LICENSE_FILE to point to:n A valid local license file, e.g., C:\Cayenne\Flexlm\license\cayenne.datn port@host, if you are running a license server on another machine. To identify the port, log on to your machine running the license server and open the license file cayenne.dat The port appears as the last field on the server line, e.g., 7126@capella.On Windows NT this variable is set using in the Control Panel, System. On Windows 95 this variable is set in the autoexec.bat file.Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended on the end, separated from the previous path by a semicolon (;).Starting the browserERROR [115024]: Cannot obtain corporate id for 'corporate'.ERROR [120051]: Name request for Corporate service 'corporate' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [121013]: Server 'dbserver' reports failure:ERROR [123002]: Could not checkout license for OT_SERVER_WINERROR [123001]: FLEXlm: cannot find license file (-1,72:2) No such file or directoryThe LM_LICENSE_FILE variable was not set correctly at the time the ot_broker was started.Set the FLEXlm system environment variable LM_LICENSE_FILE to point to:n A valid local license file, e.g., C:\Cayenne\Flexlm\license\cayenne.datn port@host, if you are running a license server on another machine. To identify the port, log on to your machine running the license server and open the license file cayenne.dat The port appears as the last field on the server line, e.g., 7126@capella.On Windows NT this variable is set using in the Control Panel, System. On Windows 95 this variable is set in the autoexec.bat file.Once you have set LM_LICENSE_FILE, reboot your machine.Note: If LM_LICENSE_FILE is set in your environment for some other vendor's software, enter the displayed path with the location of your ObjectTeam license file appended on the end, separated from the previous path by a semicolon (;).Starting the Corporate Management ToolERROR [115024]: Cannot obtain corporate id for 'levelpath'.ERROR [120051]: Name request for Corporate service 'levelpath' not invoked.ERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120072]: Remote implementation 'levelpath' not found.ERROR [120014]: Request for 'ot_broker' at host 'HOSTNAME' timed out after 60000 millisecondsThe M4_brokerport variable is not set correctlySet the ObjectTeam environment variable M4_brokerport to a number via which the broker can be reached. This variable is defined in %M4_home%/etc/m4env.m4env or in the .Meta4UserEnv file in your login directory. Default value: 1825Starting the User Environment Tool210048 TclError 'ERROR [120048]: Operation 'Nameserver::serverDefinition(int temporaryAlso)' not invokedERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120071]: Remote implementation 2.1 not foundERROR [120014]: Request for 'ot_broker' at host 'HOSTNAME' timed out after 60000 millisecondsThe M4_brokerport variable is not set correctlySet the ObjectTeam environment variable M4_brokerport to a number via which the broker can be reached. This variable is defined in %M4_home%/etc/m4env.m4env or in the .Meta4UserEnv file in your login directory. Default value: 1825Starting the Lock Management ToolERROR [120048]: Operation 'LockManager::sfindLocks(LockDescription const & desc)' not invokedERROR [120020]: Operation implementation unavailable.ERROR [120033]: Error accessing implementation repository.ERROR [120071]: Remote implementation 100.1 not foundERROR [120014]: Request for 'ot_broker' at host 'HOSTNAME' timed out after 60000 millisecondsThe M4_brokerport variable is not set correctlySet the ObjectTeam environment variable M4_brokerport to a number via which the broker can be reached. This variable is defined in %M4_home%/etc/m4env.m4env or in the .Meta4UserEnv file in your login directory. Default value: 1825Starting the browser115001 Cannot initialize client context115024 Cannot obtain corporate id for 'levelpath'.120051 Name request for Corporate service 'levelpath' not invoked.120020 Operation implementation unavailable.120033 Error accessing implementation repository.121013 Server 'dbserver' reports failure112152 Error occurred while opening a repository110005 Connect to database 'levelpath' using connect string 'UID="DBA";PWD="janw";ENG=hostname;START=DBCLIENT -xtcpip{DOBROAD=NO;HOST=hostname} ;AutoStop=yes;DBN=janw;DBF=c:\cayenne\repos\janw.db failed.000080 unable to start database engineThe computer name and DNS-hostname are not the same. Σ To check the computer name:1 Select Start | Control panels | Network | IdentificationΣ To check the DNS hostname:1 Select Start | Control panels | Network | Identification | Protocols | TCP/IP | properties | DNSProblems Creating a RepositoryCreating a repositoryDbserver V7.1.1 Fri Oct 18 20:58:36 1997Repository not createdERROR [112116]: Could not get unique implementation identifier.ERROR [121069]: Duplicate server name 'newrep'.Dbserver V7.1.1 finishedYou are trying to create a repository with a name that already exists. Start the Client/Server Configuration tool to see which repositories already exist.Creating a repositoryDbserver V7.1.1 Fri Oct 18 20:58:36 1997Oct 28 17:37:06 1996@<localhost>@185@4@dbserver.exe|object is ready: contact at udp port 1054Info from 'ot_broker': Starting new server, please wait...Info from 'ot_broker': Server 'lockserver' is ready.The name specified is not recognized as an internal or external command, operable program or batch file.Repository not created.ERROR [112105]: Creation of repository database 'newrep' failed.ERROR [110013]: Creation of database 'C:\CayenneObjectteam\repos\newrep.db' failed.Oct 28 17:37:07 1997@<localhost>@185@4@dbserver.exe|udp connection: closing port 1054Dbserver V7.1.1 finishedThe dynamic link library dbl50t.dll could not be found in the specific path. Check your PATH variable.Creating a repositoryΣ When trying to create a repository, you receive the following message:Dbserver V7.1.1 Fri Oct 18 20:58:36 1997Oct 28 17:53:14 1997@<localhost>@222@4@dbserver.exe|object is ready: contact at udp port 1069Repository not created.ERROR [112105]: Creation of repository database 'newrep' failed.ERROR [110012]: Create database can only be executed on serverOct 28 17:53:15 1997@<localhost>@222@4@dbserver.exe|udp connection: closing port 1069Dbserver V7.1.1 finishedCreation fails because the new repository was created with the wrong database server specified. Open the Create Repository dialog box again and check the server name.It can also mean that the server name given is the Computer Name, rather than the DNS Host Name, which is used by ObjectTeam as host name.To check this, start up the Network configure utility from the Control Panel. In this window you will see the Computer Name. The DNS Host Name can been shown by selecting the "TCP/IP Protocol" in the window with "Installed Network Software" and clicking on "Configure...".The TCP/IP configuration window will appear. In this window click on "DNS...". The window that now will appear will give you the DNS Host Name. It is recommended to make the Computer Name and DNS Host Name the same.After this has been changed, reboot your system.User SetGetting StartedHow to Use This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Getting StartedAbout this manualThis manual provides an introduction to ObjectTeam, an object-oriented software development environment that supports models-to-code application development.PrerequisitesThis manual assumes that you are familiar with the following products and concepts:n The operating system you are using. For more information, see your operating-system documentation.n The Unified Modeling Language (UML) for Object-Oriented Development, as developed by Grady Booch, Ivar Jacobson, and James Rumbaugh.Chapter 1 OverviewTYPE="MIFmarker"TYPE="number"0TYPE="text"Getting StartedObjectTeamObjectTeam provides a complete environment for developing object-oriented applications. It automates the UML and OMT methodologies and provides utilities for checking your diagrams, reporting on diagram contents, creating formal project documentation, managing development projects, and generating code. Cayenne repositoryObjectTeam supports team-oriented development by providing a common repository for all project data. The repository is implemented using a relational database. The relational database management system (RDBMS) that you use depends on your ObjectTeam package.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22630" TYPE="XREF-TEXTCOPY"ObjectTeam 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35123" TYPE="XREF-TEXTCOPY"Cayenne Repository 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3ID="22630"ObjectTeamDiagrams and phasesObjectTeam defines a set of diagram editors for modeling an application. It also provides a project hierarchy that includes the four software development phases: Analysis, System Design, Object Design, and Implementation. You use the editors and the project hierarchy to build your diagrams and move them through the software development phases.Development utilitiesObjectTeam provides development utilities, such as Check, Reports, and Compare, that are useful in all phases of software development.Code generationAfter fully defining your UML or OMT diagrams, you can use the ObjectTeam code generators to generate code for both persistent and non-persistent objects.n The data of a persistent object persists beyond the lifetime of a single program execution. It is stored in a permanent data store, such as an RDBMS. To support persistent objects, the code generators generate SQL scripts that create the database and its tables, as well as the SQL code for accessing the data in the database. Note: (Only the C++ and Informix NewEra code generators support persistent objects.)n The data of a non-persistent object exists only during the execution of its related program. To support non-persistent objects, the code generators generate OOPL code (for example, C++ or 4GL).Document generationAt the end of each phase, project teams often need to produce formal project documentation for presentation to management. You can use a desktop publishing system to refine the files generated by the Document Generator.Project management utilitiesProject management utilities, such as Configuration Management, Version Control, and Access Control, allow you to coordinate software development projects throughout your organization.Customize as neededSpecial files allow you to customize most ObjectTeam components.ID="35123"Cayenne RepositoryIntroductionYou communicate with the repository through the ObjectTeam user interface. For example, the ObjectTeam Browser, which appears when you start ObjectTeam, displays the repository data. You create, modify, and delete repository data using the utilities provided by the ObjectTeam Browser and other ObjectTeam windows.Project hierarchyIn the ObjectTeam Browser, project data is organized hierarchically:FILENAME="00040.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/gs/overv.fm5.mif"n The Corporate level contains all projects and corporate data. n The Project level contains all data for a project. n The Configuration level contains object versions from a particular project that a particular developer is working on.n The Phase level contains object versions from a particular project that are in a particular phase of software development: Analysis, System Design, Object Design, or Implementation.n The System level contains object versions that are in a particular subsystem of the application.Project dataYou create project data at the System level. In the repository, ObjectTeam stores project data as file versions, components, and items.n When you create a diagram, ObjectTeam stores the diagram in the repository as a file version.Note: File versions are repository objects; they do not appear in the directory structure of the operating system. In the ObjectTeam documentation, files that appear in the directory structure of the operating system are called external files. n When you draw an object in a diagram, ObjectTeam stores the graphic element in the repository as a component.n When you name the object in the diagram, you create a syntactic element that has meaning within your project. ObjectTeam stores the syntactic element in the repository as an item.Chapter 2 FeaturID="12522"esTYPE="MIFmarker"TYPE="number"0TYPE="text"Getting StartedIntroductionObjectTeam provides a powerful environment for modeling, project management, and code generation. This chapter introduces you to the main features of ObjectTeam.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SECTION PAGECOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28250" TYPE="XREF-TEXTCOPY"Diagrams 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13564" TYPE="XREF-TEXTCOPY"Phases 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16410" TYPE="XREF-TEXTCOPY"Browser 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18741" TYPE="XREF-TEXTCOPY"Class Browser 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42042" TYPE="XREF-TEXTCOPY"Checking 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41706" TYPE="XREF-TEXTCOPY"Version and Configuration Management 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31782" TYPE="XREF-TEXTCOPY"Reports 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27316" TYPE="XREF-TEXTCOPY"Activating Modules 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12703" TYPE="XREF-TEXTCOPY"Document Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29719" TYPE="XREF-TEXTCOPY"Access Control 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21916" TYPE="XREF-TEXTCOPY"Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="28250"DiagramsIntroductionObjectTeam provides a set of diagrams that you can use to describe various aspects of your application. The ability to examine your application from different points of view promotes thorough analysis. This section describes the default diagrams supported by ObjectTeam. The diagram notation is based on the Unified Modeling Language (UML) for Object-Oriented Development, developed by Grady Booch, Ivar Jacobson, and James Rumbaugh.Note: ObjectTeam also supports optional OMT diagrams. For details, see the ObjectTeam Modeling Guide.Six diagramsObjectTeam supports the following diagrams:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Diagram PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30620" TYPE="XREF-TEXTCOPY"Class Diagrams 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19451" TYPE="XREF-TEXTCOPY"Collaboration Diagrams 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34406" TYPE="XREF-TEXTCOPY"Sequence Diagrams 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28936" TYPE="XREF-TEXTCOPY"State Transition Diagrams 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30643" TYPE="XREF-TEXTCOPY"Use Case Diagrams 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4ID="30620"Class DiagramsYou use Class Diagrams, such as the one shown below, to describe classes and their relationships, attributes, and operations. These diagrams serve as the source for code generation.FILENAME="00041.unk" ORIGFILE="pics/cad_ex.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/feat.fm5.mif"ID="19451"Collaboration DiagramsYou use Collaboration Diagrams, such as the one shown below, to model how different elements of a model interact with each other.FILENAME="00042.unk" ORIGFILE="pics/cod_ex.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/feat.fm5.mif"ID="34406"Sequence DiagramsYou use Sequence Diagrams, such as the one shown below, to model a dialog between an end user and objects in the application. Each Sequence Diagram describes a single real-world scenario. A complete set of Sequence Diagrams would fully describe the application; however, typically you use Sequence Diagrams to describe only the more complex aspects of the application.FILENAME="00043.unk" ORIGFILE="pics/etd_ex.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/feat.fm5.mif"ID="28936"State Transition DiagramsYou use State Transition Diagrams, such as the one shown below, to describe the life cycle of a class (or an instance of that class). This diagram displays the messages received by a class and the state changes resulting from those messages. Typically, you use State Transition Diagrams to describe only classes that have complex life cycles.FILENAME="00044.unk" ORIGFILE="pics/std_ex.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/feat.fm5.mif"ID="30643"Use Case DiagramsYou use Use Case Diagrams, such as the one shown below, to model how an external user of the system (such as an end user or another system) interacts with the system. Each Use Case Diagram contains one or more Use Case objects, which can be further refined in additional Use Case Diagrams. A complete set of Use Case Diagrams describes all the different ways in which the system can be used.FILENAME="00045.unk" ORIGFILE="pics/ucd_ex.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/feat.fm5.mif"For more informationREFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3, Tutorial: Basic Operations, provides instructions for creating a Sequence Diagram and a Class Diagram. For more information about each diagram, see the ObjectTeam Modeling Guide.ID="13564"PhasesFour phasesObjectTeam divides the software development cycle into four phases:n Analysisn System Designn Object Designn ImplementationThis section describes each phase.One set of diagramsObjectTeam supports models-to-code application development. In ObjectTeam, you model your application using the diagrams described in REFID="28250" TYPE="XREF-TEXTCOPY"Diagrams. You build the application by moving the diagrams through the four development phases in an iterative cycle, adding more detail at each phase.Using the same set of diagrams in each development phase has two benefits:n The techniques you learn for working with the diagrams can be applied throughout the development cycle.n You do not have to transform the diagrams at the end of each phase; instead, you simply copy them to the next phase. (Copying the diagrams allows you to refine and enhance them for the current phase without losing valuable information from the previous phase.)AnalysisThe goal of the Analysis phase is to define the application requirements. During this phase, your objective is to ensure that end users and developers have a clear understanding of the application's functions.The following diagrams are the most important during the Analysis phase:n Use Case Diagrams, Sequence Diagrams, and Collaboration Diagrams describe real-world scenarios that the application must address.n Class Diagrams describe the classes required to implement an application that addresses the scenarios described by the Sequence Diagrams.System DesignThe goal of the System Design phase is to define the application architecture, dividing the application into systems to facilitate development. The ideal application architecture maximizes the interaction among classes in each system (cohesion) and minimizes the interaction among systems (coupling).During the System Design phase:n The Class Diagrams from the Analysis phase describe the communication among classes, which can help you define system boundaries.n For each system, a new Class Diagram describes the classes in that system.Object DesignThe goal of the Object Design phase is to refine and enhance the Class Diagrams for each system until it is detailed enough for implementation. Most of the activities in this phase depend on your implementation environment (for example, the programming language and database that you plan to use).If you are using ObjectTeam to generate code, you use this phase to specify the detailed information needed by the code generator. You might also make the contents of existing class libraries available to the code generator by reverse engineer the existing class libraries.ImplementationThe goal of the Implementation phase is to generate and refine the application code.The Class Diagrams are the source for code generation. Using this information, ObjectTeam generates code to implement classes and their relationships, attributes, and operations.Customizing the phasesBy default, ObjectTeam uses the four phases described in this section. However, you can add or delete phases to meet the needs of your project or development organization.For more informationREFID="31837" TYPE="XREF-TEXTCOPY"Chapter 4, Tutorial: Project Management Operations, provides instructions for moving diagrams from one phase to the next. For more information about phases, see the ObjectTeam Modeling Guide.ID="16410"BrowserIntroductionObjectTeam uses the following primary windows:n The Browser appears when you start ObjectTeam.n You use Diagram editors to create and edit diagrams.n You use the Class Browser to find and examine classes.This section describes the Browser; the next section describes the Class Browser. The diagrams are described in REFID="28250" TYPE="XREF-TEXTCOPY"Diagrams, and REFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3, Tutorial: Basic Operations, provides instructions for working with diagram editors.Purpose of the BrowserThe Browser is the main user interface for ObjectTeam. You use the Browser to do the following:n Create and manipulate objects, such as projects, configurations, phases, systems, and diagramsn Run utilities, such as the Check and Reports utilitiesn Generate project documentationn Generate coden Manage projects using features such as version and configuration managementBrowser windowThe Browser window consists of three areas:n Context area (top)n Navigation area (left)n Information area (right)FILENAME="00046.unk" ORIGFILE="pics/brwsdefa.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/feat.fm5.mif"Context areaThe Context area identifies the project, configuration, phase, and system of the active object and view; it is a read-only area.Navigation areaThe Navigation area displays the hierarchy of corporate data. In the Navigation area, you can do the following:n Click on the navigation buttons to fold and unfold the hierarchy. (The buttons appear as plus signs in Windows, as shown in the previous illustration, and triangles in UNIX.)n Click on an object to make it the active object, displaying its contents (child objects) in the Information area and updating the Context area.Information areaThe Information area displays the child objects of the active object. In the Information area, you can do the following:n Click on an object to select it. Typically, you select one or more objects before selecting an action from the menu bar.n Double-click on an object to open it.ID="20297"For more informationREFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3, Tutorial: Basic Operations, provides instructions for working with the Browser. For more information, see the ObjectTeam Modeling Guide.ID="18741"Class BrowserIntroductionClasses are the primary objects in your model. The Class Browser allows you to quickly access classes and their relationships, attributes, and operations.Class Browser windowThe Class Browser window consists of six areas:FILENAME="00047.unk" ORIGFILE="pics/clasbrws.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/feat.fm5.mif"n The Context area at the top of the window identifies the current project, configuration, phase, and system of the selected class.n The Superclasses list box displays the parent classes of the selected class.n The Classes list box displays all classes in the current phase or system.Double-click on a class in the Classes list box to populate the other areas of the Class Browser with information about that class. n The Subclasses list box displays the child classes of the selected class.n The Features list box displays the attributes and operations of the selected class.n The Associations list box displays the relationships of the selected class. (Generalizations are not displayed in the Associations list box. Instead, you view inheritance by selecting View | Flat.) You can use this view to navigate between classes.Search utilityThe Class Browser provides a search utility that allows you to search for a class, attribute, or operation. For example, you can use the search utility to find each class that includes an UpdateCustomer operation. Wildcard searches are supported.FiltersThe Class Browser provides filters that allow you to restrict the information displayed in the Features list box. For example, you can set the filter to display only operations in the Features list box.Accessing the Class DiagramFrom the Class Browser, select Utilities | Edit CD to open any Class Diagram in which the selected class appears.For more informationREFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3, Tutorial: Basic Operations, provides instructions for working with the Class Browser. For more information, see the ObjectTeam Modeling Guide.ID="42042"CheckingThree types of checkingObjectTeam ensures the integrity of your diagrams by providing the following:n Automatic syntax checking during diagram editingn Check options for explicit diagram checking n Syntax checking for code generationAutomatic checking for diagram editingEach ObjectTeam diagram has its own set of semantics. The diagram editors provide automatic syntax checking to ensure that the diagrams are syntactically correct for the methodology you are using (e.g., UML). If you attempt to create an invalid object or connection, ObjectTeam displays an error message and terminates the operation.Check optionsAfter you have completed your diagrams, you can invoke the Check options to ensure that each diagram is complete and correct, and that each diagram accurately reflects the information presented in the other diagrams. ObjectTeam provides the following Check options:n Check Contents checks the semantic definition of a particular diagram. Each diagram has its own Check Contents option. For example, the Check Contents option for the Class Diagram includes a rule to check that attributes and roles on the same class all have unique names.n Check Local Model examines one or more selected classes in a system. It ensures that the class as defined in the Class Diagram accurately reflects information about that class as defined in the other diagrams. For example, the Check Local Model option ensures that if a class receives a message in the Sequence Diagram it has an operation defined in the Class Association Diagram to handle that message.n Check Global Model is similar to Check Local Model, however, it examines all classes in a system.n Check Use Case Model checks all Use Case Diagrams.Syntax checking for code generationWhen you generate code, ObjectTeam automatically invokes the Check Global Model option to check all classes in the system. This helps to prevent errors that might interrupt code generation.Customizing checkingLike many features of ObjectTeam, you can customize checking by implementing your own rules or by modifying the ObjectTeam rules.The ObjectTeam Customization Guide describes how to customize ObjectTeam. It assumes familiarity with ObjectTeam and proficiency in programming.ID="27575"For more informationREFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3, Tutorial: Basic Operations, provides instructions for checking your diagrams. For more information, see the ObjectTeam Modeling Guide.ID="41706"Version and Configuration ManagementIntroductionObjectTeam provides version and configuration management facilities. These tools are essential for incremental and team-oriented development.Object versionsObjectTeam allows you to create multiple versions of an object. Each version is in one of three states: working, frozen, or background.n The working version is the only version of an object that you can modify. To prevent conflicting changes to an object, ObjectTeam ensures that there is only one working version of each object.n Frozen versions of an object are stored in the repository, but cannot be modified. When you create a new version of an object, the previous version is automatically frozen. n Background versions of an object, which are always frozen, are removed from the repository. They can be returned to the repository as needed.ConfigurationsConfigurations allow several developers to work on the same application without interfering with one another. Each configuration identifies the object versions that a particular developer is using. To prevent conflicting changes to an object, ObjectTeam ensures that the working version of an object appears in one configuration only.ExampleThe following example illustrates how versions and configurations are used in the development environment.Jill and Jon are developers working on the same application. Jill creates version 1.0 of the Core system. When the system is stable, she freezes it and creates version 2.0.Jon adds links in his configuration to version 1.0 of the Core system so that he can develop other systems that interact with it. Because Jon is using frozen version 1.0 of the Core system, Jill can continue her work on version 2.0 of the Core system.For more informationREFID="31837" TYPE="XREF-TEXTCOPY"Chapter 4, Tutorial: Project Management Operations, provides instructions for creating versions and configurations. For more information, see the ObjectTeam Project Management Guide.ID="31782"ReportsIntroductionReports provide current information about your project. They are intended for internal use by team members throughout the development cycle.Document generationThe Document Generator helps you produce documentation for formal presentations. For more information, see REFID="12703" TYPE="XREF-TEXTCOPY"Document Generation.Standard reportsObjectTeam provides a variety of reports, including reports on projects, phases, systems, documents, and classes. For a complete list of reports, see the ObjectTeam Modeling Guide.User-defined reportsObjectTeam allows you to define your own reports and add them to the product. For more information, see the ObjectTeam Customization Guide.Generating a reportYou can generate a report from the Browser, a diagram editor, or the operating-system command line. ObjectTeam displays the report in a window similar to the one shown below. From this window, you can save the report to a file or print it.FILENAME="00048.unk" ORIGFILE="pics/rprtoutp.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/feat.fm5.mif"For more informationREFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3, Tutorial: Basic Operations, provides instructions for generating reports. For more information, see the ObjectTeam Modeling Guide.ID="27316"Activating ModulesIntroductionObjectTeam consists of a base product and a number of optional features. Each optional feature is implemented in a directory of files called a module. To use a feature, you must activate the module for tha feature. You must have a license for each active module.Activating modulesModules are usually activated on Corporate level for an entire corporate repository. You must have root access to do this. Modules activated on Corporate level are available by default for all users of this repository on every level.You do not have to activate all modules on Corporate level. You can activate them on any other level in the repository, as long as they are licensed.For details on how to activate modules, refer to the ObjectTeam Installation Guide.ID="12703"Document GenerationIntroductionObjectTeam provides a variety of document generation facilities. The built-in Document Generator helps you produce high-quality documentation for formal presentations. Alternatively, the optional integrated packages DocExpress and DocIt allow you to produce documentation complying with various commercial, government and military standards.This section summarizes the features of ObjectTeam's built-in Document Generator. For details on DocExpress and DocIt, refer to their respective documentation.Document generation is a ObjectTeam module.Document contentsEach document consists of the following elements:n A Document Structure Matrix defines the file sections, property sections, and local sections in the document, as well as the order in which they appear.n One or more file sections link to diagrams or text files in ObjectTeam.n One or more property sections link to file or item properties in ObjectTeam.n One or more local sections link to files created outside ObjectTeam (for example, ASCII text files or PostScript files).How to generate a documentΣ To generate a document:1 Choose a desktop publishing system.2 Define the structure of the document.3 Generate the document.A description of each of these steps follows.Choosing a desktop publishing systemThe ObjectTeam Document Generator supports the following desktop publishing systems:n FrameMaker« (on UNIX-based systems)n Interleaf« (on UNIX-based systems)n Microsoft Word« (under Microsoft Windows)Note: If you wish to use another desktop publishing systems, you must customize the Document Generator.Defining the document structureYou define the structure of a document by specifying a Document Structure File name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' a specially formatted text file that provides input to the Document Generator. ObjectTeam provides two Document Structure Files for each desktop publishing system: one file for the Analysis, System Design, and Object Design phases, and one file for the Implementation phase. You can use one of ObjectTeam's Document Structure Files, or create your own.Generating the documentYou select the Document Structure File to generate the complete document. Alternatively, you can select one or more file, property, or local sections to generate only those sections. In either case, ObjectTeam generates documentation files for your desktop publishing system. You can then modify or reformat the document from the publishing system.Note: The changes that you make from the publishing system are not preserved if you later regenerate the document.For more informationThe ObjectTeam Document Generation Guide ObjectTeam's built-in document generation in greater detail. It assumes familiarity with ObjectTeam.For more information on DocExpress and DocIt, refer to their respective documentation. ID="29719"Access ControlIntroductionIn ObjectTeam, you manage security by defining users, roles, and access rules.Access control is an ObjectTeam module.UsersUsers are the user names defined in the repository; for example, schmidt or oleary. Generally, each person who uses ObjectTeam is defined as a user.Users are defined at the Corporate level of the repository.RolesRoles are the job functions defined in the repository. Generally, one role is defined for each user name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' this role has the same name as the user name. Additional roles then define common job functions, such as analyst or programmer.Roles are defined at the Corporate level of the repository.Access rulesAccess rules are defined for each role. For each action on an object (for example, the action destroyAction on a System object), access rules define one of three permissions:n Allowed explicitly grants the role permission to perform the action.n Prohibited explicitly denies the role permission to perform the action.n Undefined grants or denies permission based on the permissions for other roles. If another role has Allowed permission, Undefined is the same as Prohibited. If no other role has Allowed permission, Undefined is the same as Allowed.Role linksA role link between a user and a role indicates that the user has access to that role. The user can activate or deactivate the role during a session. The user's default role, usually the role that has the same name as the user name, cannot be deactivated.Role links can be defined at the Corporate or Project level.Granting and denying accessWhen a user attempts to manipulate an object, ObjectTeam allows the action unless one of the following is true:n The user has access to one or more roles that explicitly allow the action, but has not activated any of those roles.n The user has access to one or more roles that explicitly prohibit the action and has activated at least one of those roles.n There is a role that explicitly allows the action, but the user does not have access to that role.If a user has activated two roles, one that explicitly allows the action and one that explicitly prohibits the action, ObjectTeam prohibits the action.For more informationREFID="31837" TYPE="XREF-TEXTCOPY"Chapter 4, Tutorial: Project Management Operations, provides instructions for modifying access to particular objects. For more information, see the ObjectTeam Project Management Guide.ID="21916"Code GenerationModeling and code generationUsing ObjectTeam, you create a model that describes an application and then generate code from that model. The model does not fully define your application; you must edit the generated code to complete the application. However, to ensure that the model remains viable throughout the development cycle, the code generator preserves your edits when you later regenerate the code.Each code generator is a ObjectTeam module.Phases and code generationIn the first two software development phases, Analysis and System Design, you define the requirements and architecture of your application. During these phases, you do not consider the implementation environment. You address the implementation environment in the final two phases, Object Design and Implementation.n In the Object Design phase, you complete the Class Diagrams, which are the source for code generation.n In the Implementation phase, you generate the code and complete the application. This phase provides facilities for- Generating code- Merging edits to generated code back into your model- Compiling the code- Executing the code- Debugging the codeWhat ObjectTeam generatesThe ObjectTeam code generators generate persistent code, nonpersistent code, and makefiles. (Some code generators only generate nonpersistent code.)n Persistent code implements classes that exist beyond a single program execution. Such classes are typically defined in an RDBMS. For example, persistent code might be generated as SQL and ESQLC++ files.n Nonpersistent code implements classes that exist for a single program execution only. For example, nonpersistent code might be generated as H++ and C++ files.n Makefiles are the files that build the application.Customizing code generationYou can also customize the code generators. For example, you might define new class attributes and then modify your code generator to generate code based on the values of those attributes.For more informationEach code generator is specific to a programming language. For more information, refer to the ObjectTeam Code Generation Guide for your programming language. It assumes familiarity with ObjectTeam and proficiency in programming.Chapter 3 Tutorial: ID="21870"Basic OperationsTYPE="MIFmarker"TYPE="number"0TYPE="text"Getting StartedIntroductionREFID="12522" TYPE="XREF-TEXTCOPY"Chapter 2, Features, introduced you to the main features of ObjectTeam. In this chapter, you will use some of these features.ScenarioIn this tutorial, you will be an analyst for a company that rents CDs and videos. You will create a project and start to define the classes in the business applications.Takes about one hourThis tutorial should take you about one hour to complete, but there is no time limit. Feel free to take your time and explore. However, if you want to compare your results with those in this chapter, note the features that you want to investigate and return to them after completing the tutorial.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SECTION PAGECOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17156" TYPE="XREF-TEXTCOPY"Creating the Project Hierarchy 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20468" TYPE="XREF-TEXTCOPY"Creating a Class Diagram 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18468" TYPE="XREF-TEXTCOPY"Creating a Sequence Diagram 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37001" TYPE="XREF-TEXTCOPY"Using the Class Browser 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12341" TYPE="XREF-TEXTCOPY"Checking the Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'30COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34705" TYPE="XREF-TEXTCOPY"Creating Reports 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'32COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41513" TYPE="XREF-TEXTCOPY"Customizing ObjectTeam 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'34ID="17156"Creating the Project HierarchyProject hierarchyBefore you can begin work on a project, you must create the project hierarchy in the repository. The project hierarchy consists of the following elements:n Projectn Configurationn Phasen SystemIn this section, you create the project hierarchy. Then, you explore the Browser and the project hierarchy.Start ObjectTeamΣ To start ObjectTeam:n In Windows 95 or Windows NT 4.0, select Programs | ObjectTeam | Browser from the Startup menu.n In UNIX, run the ot script.Note: If you cannot start ObjectTeam, refer to the ObjectTeam Installation Guide or contact your system administrator.The Browser appears. By default, you are at the Corporate level name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the highest level of the repository. The Information area displays a list of all of the projects in the repository.Note: Various ObjectTeam features are made available through modules. Depending on which modules you have configured, your Browser may appear different to the screenshots in this chapter.FILENAME="00049.unk" ORIGFILE="pics/brwsr1st.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Create a projectYou create projects at the Corporate level. If you are not at the Corporate level, click on the Corporate object in the Navigation area of the Browser. Note: The Corporate object has the same name as the Cayenne repository; it is always the first object in the Navigation area. In this tutorial, the Corporate object is repos960415.Σ To create a project:1 Select File | New | Project.The New Project window appears.2 Enter XYZ_Project as the name of the project, where XYZ are your initials.3 Select OK.ObjectTeam adds your project to the repository and updates the Information area.FILENAME="00050.unk" ORIGFILE="pics/brwrepol.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"If you cannot create a projectIf you do not have permission to create a project in the repository, in the next procedure, use an existing project that you are allowed to modify. In step one, move to the Project level by clicking on the name of the existing project in the Navigation area of the Browser.Create a configurationYou create configurations at the Project level. Σ To create a configuration in the project you just created:1 Move to the Project level by double-clicking on the name of your project in the Information area of the Browser.ObjectTeam updates the Context area and displays the contents of your project in the Information area. In this case, the project is empty.FILENAME="00051.unk" ORIGFILE="pics/brwconfl.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"2 Select File | New | Configuration Version.The New Config Version window appears.3 Enter XYZConfig as the name of the configuration, where XYZ are your initials.4 Select OK.ObjectTeam adds the configuration to your project and updates the Information area.Configuration versionsObjectTeam supports versions of configurations. When you create a configuration, you actually create a version (v1) of the configuration. Therefore, the ObjectTeam documentation generally refers to configurations as Configuration versions. ObjectTeam also supports versions of phases and systems, which you will create next, and versions of diagrams, which you will create later in this chapter.Create a phaseYou create phases at the Configuration level.Σ To create a phase:1 Move to the Configuration level by double-clicking on the name of your Configuration version in the Information area of the Browser.ObjectTeam updates the Context area and displays the contents of your Configuration version in the Information area. In this case, the configuration is empty.2 Select File | New | Phase Version.The New Phase Version window appears.3 Select Analysis, then select OK.ObjectTeam adds the phase to your Configuration version and updates the Information area.Create a systemYou create systems at the Phase level.Σ To create a system:1 Move to the Phase level by double-clicking on the Analysis phase in the Information area of the Browser.ObjectTeam updates the Context area and displays the contents of your Analysis phase in the Information area. In this case, the phase is empty.2 Select File | New | System Version.The New System Version window appears.3 Enter XYZSystem as the name of the system, where XYZ are your initials.4 Select OK.ObjectTeam adds the System version to your Analysis Phase version and updates the Information area.In the next sectionNow that you have created a project hierarchy, you can explore the hierarchy and learn more about the Browser.COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TOPIC PAGECOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16794" TYPE="XREF-TEXTCOPY"Exploring the Repository Hierarchy 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13196" TYPE="XREF-TEXTCOPY"Changing the Appearance of the Browser 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30215" TYPE="XREF-TEXTCOPY"Using Shortcuts 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12ID="16794"Exploring the Repository HierarchyIntroductionIn this section, you use the Browser to explore the repository hierarchy.Fold and unfold the hierarchyThe Navigation area of the Browser displays the repository hierarchy. You use the fold and unfold symbols to hide and show portions of the hierarchy.Σ To hide and show portions of the hierarchy:1 Hide the contents of the Corporate hierarchy by clicking on the fold symbol to the left of the Corporate object. (In Windows, the fold symbol is a minus sign; in UNIX, it is a down-pointing triangle.)Note: You might have to scroll the Navigation area to see the fold symbol to the left of the Corporate object.ObjectTeam hides the Corporate hierarchy, changing the fold symbol to an unfold symbol.2 Display the contents of the Corporate hierarchy by clicking on the unfold symbol to the left of the Corporate object. (In Windows, the unfold symbol is a plus sign; in UNIX, it is a right-pointing triangle.)ObjectTeam displays the Corporate hierarchy, changing the unfold symbol to a fold symbol.Open an objectWhen you open one of the objects that you have just created, ObjectTeam displays its contents in the Information area, changes the active level of the repository, and identifies the active level in the Context area of the Browser. Σ To open an object, click on it in the Navigation area or double-click on it in the Information area.1 Open the Corporate object by clicking on it in the Navigation area.Note: The Corporate object never appears in the Information area.Corporate is now the active level of the repository. The Information area displays all of the projects in the Corporate hierarchy.2 Open your project, noticing the changes to the Context and Information areas.The project is now the active level of the repository. The project name appears in the Context area and the Information area displays the configurations in the project. 3 Open your Configuration version, then your Analysis Phase version, and, finally, your System version.Other ways to open objectsYou can also open an object by:n Selecting the object in the Information area and then selecting File | Open.n Selecting the object in the Information area and then clicking the Open icon on the toolbar.n Clicking on the object in the Information area with the right mouse button and selecting Open from the pop-up context menu.Note: You can select an object only in the Information area.Close an objectWhen you close an object, you move up a level in the repository hierarchy.Σ To close the System version, select File | Close.The phase is now the active level of the repository. The Information area displays the System versions in this phase.ID="13196"Changing the Appearance of the BrowserIntroductionIn this section, you use various options to change the format, view, layout, and fonts of the Browser.Change the format of the Information areaThe View menu of the Browser provides three format options for the Information area: n Large Iconsn Small Iconsn Details (the default)Σ To change the format of the Information area:1 Select View.2 Select the desired view option.Tip: Try each of the view options.Change the viewThe active view in the Browser determines the types of objects that appear in the Information area. Each level of the repository has a Default view. Many levels also have alternative views, such as Pseudo, Data, and Process.Σ To change the active view:1 Select View | Pseudo.The pseudo objects appear in the Information area.2 Select View | Default.The default objects appear in the Information area.Pseudo objectsTERM1="pseudo-objects" TERM2="in Browser"Pseudo objects contain project management information; they are used with features such as access control and customization. In the repository hierarchy, their names are enclosed in angle brackets (<>).Change the size of the Navigation and Information areasThe Navigation and Information areas fill the Browser; however, you can change the size of the areas.Σ To change the size of the Navigation and Information areas:1 Locate the border separating the two areas.- If you are using Windows, move the pointer to the border separating the two areas. The pointer changes to a double-ended arrow.- If you are using UNIX, move the pointer to the small box near the bottom of the border separating the two areas. The pointer changes to a plus sign (+).2 Drag the border to the left or right.Change the size of the BrowserΣ To change the size of the Browser, drag the lower right corner of the window.Change the fontNote: Before you change the font, note the font information. You may decide to restore the font after changing it.Σ To change the font:1 Select Options | Font.The Font window appears.2 Select a font, then select OK.ID="30215"Using ShortcutsIntroductionThis section describes some of the user interface shortcuts you can use in ObjectTeam.ToolbarEach ObjectTeam window provides a toolbar for fast access to common menu choices. TERM1="toolbar" TERM2="in Browser"To see the menu choice associated with an active toolbar icon, move the cursor over the icon. Context menusThe ObjectTeam Browser and diagram editors provide context menus for fast access to common menu choices. Note: The options that appear in this menu depend on the object you click on.Σ To display a context menu in the Browser, Right-click on any object in the Information area. Σ To display a context menu in a diagram editor, Right-click on any object in, or on the background of, the Drawing area. Note: The right mouse button has an additional function in the diagram editors. If you right-click while drawing a connector, the last connector vertex you drew is removed. By repeatedly right-clicking, you can remove a series of vertices. For more information on editing diagrams, see the ObjectTeam Modeling Guide.Keyboard shortcutsSo far, you have used the mouse to select menu items. To select menu items using the keyboard, use the mnemonics or keyboard accelerators.n Mnemonics. Each menu item has an underlined character. To invoke a menu item: - In Windows, press Alt and the underlined character. For example, to select File | Close, press Alt + F C.- In UNIX, press Meta and the underlined character. For example, to select File | Close, press Meta + F C.n Keyboard accelerators. Next to certain menu item, you will see a key combination that you can use to invoke the item. For example, to select File | Close, press Ctrl + C.Tear-off menusIn UNIX, you can tear off a menu and move it to a more convenient location.Σ To tear off the Edit menu:1 Click on Edit to display the menu.2 Select the dotted line at the top of the menu.The Edit menu appears in a separate window, which you can move to the desired location.Σ To remove the Edit menu window, select Close from its window menu.AlternativeClick on the title bar of the Edit menu window to make it active, then press Escape.What to do nextYou have had an opportunity to explore the project hierarchy, the Browser, and some of the user interface shortcuts. If you would like to spend more time working with these features, feel free to do so. In the next section, you will create a Class Diagram.ID="20468"Creating a Class DiagramIntroductionClass Diagrams (CDs) define your classes. In this section, you create the following CD:FILENAME="00052.unk" ORIGFILE="pics/cad_ex.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Create a CDΣ To create a CD:1 Open your System version.Tip: In the Navigation area, click on the name of the system.2 Select File | New | Class Diagram.The New CD window appears.3 Enter CoreClasses as the name of your CD and select the Edit button.ObjectTeam creates the CD and opens the CD editor.Open the CDIf you select OK instead of Edit, ObjectTeam creates the CD, but does not open the editor. To open the CD editor, double-click on the name of the CD in the Information area.ID="26398"Explore the Control PanelThe symbols in the Control Panel of each diagram are described in the online Help.Σ To read about the Control Panel symbols:1 If any object is selected in the diagram, click on the background of the diagram to deselect it.2 Select Help | What's This.The Help panel for the CD editor appears.3 Click on the hypertext link to the Control Panel.4 Read about the CD Class and Association symbols.5 Close the Help window.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TOPIC PAGECOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16235" TYPE="XREF-TEXTCOPY"Creating Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22213" TYPE="XREF-TEXTCOPY"Creating an Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34026" TYPE="XREF-TEXTCOPY"Completing the Class Diagram 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="16235"Creating ClassesIntroductionIn this section, you use the CD editor to create the following four classes: FILENAME="00053.unk" ORIGFILE="pics/classes.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Each class is represented by a symbol that contains three text areas. From top to bottom, the text areas contain:n Class namen Attributesn OperationsBefore you beginBefore you create the classes, ensure that the Initial Fold option is off. (This option is described later in this section.)Σ To ensure that the Initial Fold option is off:1 In the CD editor, select Options.2 Is there a check mark next to the Initial Fold option?If yes, select Initial Fold to turn off the option.If no, Initial Fold is already off. Click on the background of the CD editor to close the Options menu. Create classesΣ To create classes in the CD:1 Select the class symbol from the Control Panel.FILENAME="00054.unk" ORIGFILE="pics/clasicon.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"ObjectTeam enters Insert mode and the pointer changes to a plus sign (+).2 Click where you want to place the class in the CD.ObjectTeam places the class in that location.Tip: If you create a class accidentally, click the right mouse button to undo the insertion. This is the same as selecting Edit | Undo.3 Click in the top text area of the class.An I-bar appears, indicating that you can enter text.4 Enter Member as the class name. Object names in ObjectTeam are case sensitive.Tip: If you make a mistake while entering text, you can use the Backspace key to delete the character before the cursor, or use the Delete key to delete the character after the cursor.5 Click in the middle text area of the class and enter the attributes name and address. Use a carriage return to separate the attribute names.Tip: Use the Tab key to move between the three areas of a class.As you enter the attribute names, ObjectTeam displays the following messages in the Message Area: Searching for Member.cdmCreated Member.cdmClass Definition Matrices (CDMs) are described following this procedure.6 Repeat steps 2 through 5 to create the four classes shown in the CD in the beginning of this section (see REFID="16235" TYPE="XREF-TEXTCOPY"Creating Classes for the CD).7 Select the Select symbol to exit Insert mode.FILENAME="00055.unk" ORIGFILE="pics/selicon.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Class Definition Matrix (CDM)Each class has a CDM, which has the same name as the class. The CDM stores information about the contents of a class and links to each diagram in which the class appears. The CDM is created automatically when you enter the first attribute or operation for a class. You cannot open and edit a CDM; ObjectTeam updates the CDM for you when you edit a class in a CD editor or the Properties dialog box (as described later in this chapter).Move the classesMove the classes so that they are arranged as shown in the beginning of this section (see REFID="16235" TYPE="XREF-TEXTCOPY"Creating Classes).Tip: Make sure that you have selected the Select symbol and are in Select mode before continuing.Σ To move a class, select it and then drag it to the new location.Σ To move multiple classes:1 Select the classes.Tip: To select multiple objects, press and hold the Ctrl key while you select each one. (Alternatively, press and hold the left mouse button, then use the mouse to draw a box around the objects that you want to select.)2 Select Edit | Move.The selected objects move to the location of the cursor.3 Click where you want to place the objects.Fold and unfold classesYou can fold and unfold classes. When you fold a class, only its name appears in the CD; this can be useful for large diagrams.Σ To fold one or more classes:1 Select the classes.2 Select Edit | Fold.Σ To unfold the classes, select the classes, then select Edit | Unfold. Tip: If you want your CD to look like the one shown in the tutorial, unfold all the classes.Initial Fold optionThe Initial Fold option determines whether new classes appear folded or unfolded. If Initial Fold is on, the classes appear folded.Save the CDΣ To save the CD, select File | Save or the Save icon on the toolbar.ID="22213"Creating an AssociationIntroductionIn this section, you use the CD editor to create an association between the Member and Product classes.AssociationsAn association defines the relationship between two classes. The ends of the association represent the multiplicity of the relationship.n A filled circle represents a many association.n A hollow circle represents an optional association.n A line with no circle represents a mandatory association.ExampleIn the CD that you are creating, the association between Member and Product is a many-to-many association. It indicates that each member can rent multiple products, and each product can be rented by multiple members.FILENAME="00056.unk" ORIGFILE="pics/cadassoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Create the associationΣ To create the Rents association:1 Select the Association symbol from the Control Panel.FILENAME="00057.unk" ORIGFILE="pics/assoicon.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"ObjectTeam enters Insert mode.2 From the multiplicity selectors at the bottom of the Control Panel, select a multiple association for the left end of the association and a multiple association for the right end. FILENAME="00058.unk" ORIGFILE="pics/multicn2.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"3 Create the association by clicking on Member and then clicking on Product.ObjectTeam draws the association between the classes.Tip: If you click on Member, then click on the background, ObjectTeam creates a vertex. You can create as many vertices as you want before clicking on Product to complete the association. (Vertices are described following this procedure.)4 Select the Select symbol to exit Insert mode.FILENAME="00059.unk" ORIGFILE="pics/selicon.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"5 Select the association.An I-bar appears, indicating that you can enter text.6 Enter rents as the association name.Optionally, you can add a role name and constraints to each end of the association. Click just below the end of the association to enter a role name. Click just above the end of the association to enter a constraint.Tip: Use the Tab key to cycle through the text areas on a association.Reroute the association lineΣ To reroute the association line, use the Vertex symbol:1 Select the Vertex symbol from the Control Panel.FILENAME="00060.unk" ORIGFILE="pics/vertxicn.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"ObjectTeam enters Vertex mode.2 Select any point on the line and drag it to a new location.ObjectTeam creates a vertex.3 Select the Select symbol to exit Vertex mode.Σ To delete a vertex:1 Select the vertex.A small square of selection points appears over the vertex.2 Select Edit | Delete.Save the CDYou might want to save your CD again at this time.Σ To save the CD, select File | Save or the Save icon on the toolbar.ID="34026"Completing the Class DiagramIntroductionIn this section, you complete the CD shown in the section REFID="20468" TYPE="XREF-TEXTCOPY"Creating a Class Diagram by creating a link attribute and a generalization.Link classesA link class allows you to specify a class on an association. FILENAME="00061.unk" ORIGFILE="pics/cadlink.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Create the link classΣ To create the link class:1 Select the Class symbol from the Control Panel.ObjectTeam enters Insert mode.2 Click where you want to place the link class.ObjectTeam places the link class in that location.3 Click in the text area of the link class and enter the name Rents and the attributes rentalDate and returnDate. Use a carriage return to separate the attribute names.4 Select the Link symbol from the Control Panel.FILENAME="00062.unk" ORIGFILE="pics/link.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"5 Click on the Rents association, then click on the link class.ObjectTeam draws a loop from the association to the link class.6 Select the Select symbol to exit Insert mode.FILENAME="00063.unk" ORIGFILE="pics/selicon.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Class hierarchies and generalizationsA class hierarchy allows you to define the parent-child relationships between classes. The parent class is the generalization of the child classes.ExampleIn the Class Diagram that you are creating, Product is a generalization of CD (compact disc) and Video. FILENAME="00064.unk" ORIGFILE="pics/cadgener.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Create the generalizationΣ To create the generalization:1 Select the Generalization symbol from the Control Panel.FILENAME="00065.unk" ORIGFILE="pics/generic2.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"2 Click on Product, then click on the CD class.ObjectTeam draws the first part of the generalization.3 Click on the triangle of the generalization, then click on Video.ObjectTeam draws the second part of the generalization.4 Select the Select symbol to exit Insert mode.Save the CDSave the CD, which should look like the CD shown in the section REFID="20468" TYPE="XREF-TEXTCOPY"Creating a Class Diagram.Σ To save the CD, select File | Save or the Save icon on the toolbar.Specifying Item PropertiesIntroductionDiagrams provide a great deal of information about a model; however, they do not provide all of the details you need for successful code generation. ObjectTeam provides item properties to store additional information about many of the diagram objects.DefinitionsA component is a graphical element in a diagram. For example, when you create a class in the CD, you create a component.An item is a semantic element in the repository. For example, when you enter the name for a class, you create an item. When you add attributes to the class, you create additional items.An item property is a fact about an item. Item propertiesObjectTeam defines a number of item properties for each type of item. You use the Edit Properties window to specify values for item properties.Specify item properties for Member Σ To specify item properties for the Member class:1 In the CD, select the Member class.2 Select Item | Edit Properties.The Edit Properties window appears.3 Select Member.A tab for Free Text, the only item property available for classes, appears in the Edit Properties window.FILENAME="00066.unk" ORIGFILE="pics/editprps.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"4 Enter the following text in the Free Text field:A Member is defined to be any person who has paid a membership fee and has a Video Store card.Specify item properties for NameΣ To specify item properties for the Name attribute:1 In the Edit Properties window, select Name.Tabs for the Miscellaneous and Free Text item properties appear in the Edit Properties window.2 Select the Misc tab to enter Miscellaneous item properties.3 Select No from the Nullable drop-down list to indicate that the Name attribute must have a value.Miscellaneous tab might not appearSome code generators, such as the CORBA IDL code generator, do not use the fields on the Miscellaneous tab. If one of these code generators is active, the Miscellaneous tab does not appear in the Edit Properties window. Save your changesΣ To save the item properties that you have specified:1 In the Edit Properties window, select OK.2 In the CD, select File | Save or the Save icon on the toolbar.ID="18468"Creating a Sequence DiagramIntroductionIn this section, you create a Sequence Diagram (SD).All diagram editors are similarEach type of diagram has its own editor; however, once you have learned how to use one diagram editor, you should find it easy to use other editors.Create a SDYou can create an SD from the Browser in the same way you created a CD earlier in this chapter. You can also create a SD by navigating to it from the CD.Σ To create a SD from the CD:1 Double-click on the Member class.Alternative: Select the Member class, then select File | Open.The Items window appears.Note: If nothing happens, save the CD and try again. If you have changed the current diagram, you must save it before navigating to a new diagram.2 Select Member, then select OK.The Select Operation window appears.3 Select SD Create Diagram, then select OK.The SD editor appears.Control Panel described in the online HelpThe symbols in the Control Panel are described in the online Help. For instructions on how to access the online Help, see REFID="26398" TYPE="XREF-TEXTCOPY"Explore the Control Panel.Draw the SDDraw the following SD:FILENAME="00067.unk" ORIGFILE="pics/etd_ex.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Save the SDΣ To save the SD, select File | Save or the Save icon on the toolbar.Close the editorsΣ To close the SD and CD editors, select File | Exit in each window.Update the BrowserNotice that the Browser, which is now the only ObjectTeam window open, does not contain the objects that you have created.Σ To update the Browser, select View | Refresh.The SD and CDMs that you created are now visible in the Browser.ID="37001"Using the Class BrowserIntroductionThe Class Browser allows you to examine the classes in the current phase, as well as their associations, attributes, and operations.Open the Class BrowserIf you are not at the System level, click on your System version in the Navigation area of the Browser.Σ To open the Class Browser from the Browser (or from a diagram editor), select Utilities | Class Browser. The Class Browser appears. The classes in the current phase are displayed in the Classes list box.FILENAME="00068.unk" ORIGFILE="pics/clbrw1st.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Open a classWhen you open a class in the Class Browser, ObjectTeam displays information about that class.Σ To examine a class, double-click on its name in the Classes list box:1 Double-click on Member in the Classes list box.Alternative: Select Member, then select File | Open.The Features list box displays the class attributes and the Associations list box displays the class associations. If you had defined operations for the class, they would be displayed in the Features list box.2 Double-click on Video in the Classes list box.The Features list box displays the class attributes and the Super Classes list box displays the parent class. Display inherited informationBy default, the Class Browser displays only the attributes, operations, and associations of the selected class. However, subclasses inherit information from their parent classes.Σ To view inherited information, select View | Flat.The Features and Associations list boxes display all attributes, operations, and features inherited by and defined for the selected class.Σ To return to the default view, select View | Flat again.Find a classIf you have several classes, it can be time consuming to locate one of them. The Class Browser provides a search utility that enables you to quickly locate a particular class.Σ To search for a class:1 Select File | Find Class.The Find Class window appears.2 Enter Product, then select OK.ObjectTeam locates the Product class and updates the Class Browser.Find an attribute or operationA similar utility enables you to quickly locate a class attribute or operation.Σ To search for an attribute:1 Select File | Find Feature.The Find Feature window appears.2 Enter Name as the feature that you are interested in.3 If the Attributes check box is not selected, select it.4 Select OK. ObjectTeam locates the Name attribute and updates the Class Browser.Open the CDYou cannot edit classes in the Class Browser. To edit a class, you must open the CD that defines the class.Σ To open the CD for the Video class:1 Double-click on Video in the Classes list box.2 Select Utilities | Edit CD.Note: If the class appears in more than one CD, ObjectTeam prompts you to select the CD that you want to open.3 Select OK.The CD appears.Close the CD and the Class BrowserΣ To close the CD and the Class Browser, select File | Exit in each window. ID="12341"Checking the DiagramsIntroductionWhen you create or edit a diagram, the diagram editor automatically ensures that the diagram is syntactically correct. Other rules, however, cannot be checked until all diagrams are complete. For example, you need to ensure that all classes referenced in the SDs are defined in the CDs. The Check utility checks these additional rules.Check your diagramsΣ To check your diagrams:1 Move to the System level, if you are not already there.2 If any system files are selected, click on the background of the Information area to deselect them.3 Select Check | Global Model.ObjectTeam checks the diagrams and displays the results in the ObjectTeam Monitoring window.FILENAME="00069.unk" ORIGFILE="pics/chckoutp.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Examine the Monitoring windowThe ObjectTeam Monitoring window displays output from many utilities, such as Check, Reports, code generators, and the Document Generator. You can use the File menu of the Monitoring window to save the output to a file or print it.Σ To close the Monitoring window, select File | Exit.ID="34705"Creating ReportsIntroductionObjectTeam provides several reports that are useful throughout the development cycle.Generate a report on classesΣ To generate a report that describes your classes:1 Move to the System level, if you are not already there.2 If any system files are selected, click on the background of the Information area to deselect them.3 Select Utilities | Reports | On Classes.ObjectTeam generates the report and displays it in the ObjectTeam Monitoring window.Tip: Use the scroll bar to display the beginning of the report.FILENAME="00070.unk" ORIGFILE="pics/rprtoutp.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Add a report on generalizationsBy default, ObjectTeam reuses the Monitoring window; that is, if you run a second report, it replaces the first report. You can choose instead to append new information to existing information in the Monitoring window. For example, if you have several reports that you want to print, you can generate all of the reports to the Monitoring window, then print the complete set of reports.Σ To append a Class Generalizations report to the Classes report:1 In the Monitoring window, make sure that Options | Clear Screen option is off and Options | Reuse option is on.- A check mark next to the Clear Screen option indicates that ObjectTeam will clear the Monitoring window before writing to it. You do not want ObjectTeam to clear the window.- A check mark next to the Reuse option indicates that ObjectTeam will reuse the Monitoring window rather than opening a second window. You want ObjectTeam to reuse the window.2 In the Browser, select Utilities | Reports | On Class Generalizations.ObjectTeam generates the report and appends it to the Classes report in the Monitoring window.3 To close the Monitoring window, select File | Exit.ID="41513"Customizing ObjectTeamIntroductionYou can customize ObjectTeam in many different ways. In this section, you add a new menu containing a single menu option that runs one of the standard reports. Add a new menuΣ To add a new menu:1 In the Browser, open the pseudo object <user customization files>.Tip: This pseudo object is the last entry in the Navigation area. You might need to scroll the Navigation area to locate it.2 Select File | New | External File.A dialog box appears, displaying a list of all available user customization file types.3 Select desk.mnu, then select the Edit button.ObjectTeam creates the customization file and opens it in the Menu Customization Editor.FILENAME="00071.unk" ORIGFILE="pics/custedtr.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"Tip: - If you select OK instead of Edit, open the desk.mnu file by double-clicking on it in the Information area.- If desk.mnu does not appear in the dialog box, a desk.mnu customization file already exists. Open the desk.mnu file by double-clicking on it in the Information area.4 Select Edit | New | MenuBarButton.A dialog box appears.5 Enter My Reports, then select OK.ObjectTeam updates the editor window, adding My Reports to menu options on the menu bar.6 Select File | Save to save the customization file.Add a new menu optionΣ To add a new menu option:1 In the Menu Customization Editor, select Edit | New | PushButton.A dialog box appears.2 Select My Reports from the Parent drop-down list, enter Report On... in the name field, and select the Edit button.The Editor notebook appears.Tip: If you select OK instead of Edit, display the menu items for My Reports by clicking on the fold symbol to its left. The Report On... item appears. Double-click on it to open the Editor notebook.3 In the Storage page, make sure that all check boxes in the Visible field are selected, as shown in the following illustration. This ensures that the menu item is visible on all levels.FILENAME="00072.unk" ORIGFILE="pics/custstor.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"4 In the Interface page, enter Run standard report in the Hint Text field, as shown in the following illustration.FILENAME="00073.unk" ORIGFILE="pics/custintf.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"5 In the Command page:- Enter the following in the Command field:otsh -f M4_home\reports\startreport.tcl -- $OPTIONSwhere M4_home is the full pathname of your ObjectTeam installation; for example, c:\Cayenne\ObjectTeam. (If you do not know the full pathname of your installation, ask your ObjectTeam administrator.)Tip: If you are using UNIX, be sure to use forward slashes (/) instead of backslashes (\).- Select the External Output Only radio button.- Select the Ask for Options check box.- Select the Write Message to Message Area check box and, in the Message field, enter Running one of the standard reports.The Command page should now look as follows:FILENAME="00074.unk" ORIGFILE="pics/custcomm.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut1.fm5.mif"6 Select OK to return to the Menu Customization Editor.7 Select File | Save to save the customization file.8 Select File | Exit to exit from the Menu Customization Editor.Start a new BrowserYou have now created a customization file that adds a new menu item to the Browser. However, ObjectTeam only reads the customization files when you start the Browser. Therefore, to use your new menu item, you must start a new Browser.Σ To start up a new Browser, select Utilities | Clone.ObjectTeam starts a new Browser, reading your User Customization file and adding the new menu item to the menu bar.How to use your new menu itemΣ To use your new menu item:1 Move to System level.Tip: In the Navigation area, click on XYZSystem.2 Select My Reports | Report On...A dialog box appears.3 Enter classes.tcl, then select OK.A Monitor window appears, displaying the output from the report on Classes.You can run any of the standard reports in this way, assuming you are on the appropriate level for that particular report. To find out the name of the report file you want to run, refer to the chapter on Reporting in the ObjectTeam Modeling Guide.More on customizationAn important customization fileIn your home directory is a customization file called the Meta4UserEnv file. This contains your personal ObjectTeam settings. If you change any settings while working in ObjectTeam, when you quit the Browser or other tool, the settings are saved in this file, The next time you start ObjectTeam this file is read and your settings restored.To view the contents of this file, in the Browser, click on the <user customization files> object in the navigation area, then double-click on the Meta4UserEnv file in the information area. For more details on customization files, refer to the ObjectTeam Customization Guide.What to do nextIn REFID="31837" TYPE="XREF-TEXTCOPY"Chapter 4, Tutorial: Project Management Operations, you can experiment with the project management features, such as creating versions and specifying access rights. The chapter will take you about 30 minutes to complete.If you plan to proceed to REFID="31837" TYPE="XREF-TEXTCOPY"Chapter 4, leave the Browser open; if not, exit ObjectTeam by closing the Browser.Σ To close the Browser, select File | Exit.Chapter 4 Tutorial: ID="31837"Project Management OperationsTYPE="MIFmarker"TYPE="number"0TYPE="text"Getting StartedIntroductionREFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3, Tutorial: Basic Operations, introduced you to the features that you use to build diagrams in a single phase of the development cycle. This chapter introduces you to the features that you use to manage your project through all phases of the development cycle.What you will doIn this chapter, you will continue working on the project that you created in REFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3. You will perform the following tasks:n Copy your system from the Analysis phase to the System Design phase.n Freeze your system and create a new version of it.n Create a second configuration that accesses the frozen version of your system.n Experiment with roles and access rights.Takes about 30 minutesThis chapter should take you about 30 minutes to complete, but there is no time limit. Feel free to take your time and explore. However, if you want to compare your results with those in this chapter, note the features that you want to investigate and return to them after completing the tutorial.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SECTION PAGECOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16367" TYPE="XREF-TEXTCOPY"Moving to the Next Phase 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34629" TYPE="XREF-TEXTCOPY"Creating a New Version 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35607" TYPE="XREF-TEXTCOPY"Accessing Frozen Versions 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28793" TYPE="XREF-TEXTCOPY"Changing Access Rights 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18012" TYPE="XREF-TEXTCOPY"Using Roles 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14ID="16367"Moving to the Next PhaseIntroductionOn large projects, most systems move through the following phases of the development cycle:n Analysisn System Designn Object Designn ImplementationIn your project hierarchy, Phase objects help you to keep track of your systems as they move through the development cycle. When a system is in the Analysis phase, you store it in the Analysis phase of your project hierarchy. When the system moves into the System Design phase, you copy it to the System Design phase of your project hierarchy.ScenarioIn REFID="21870" TYPE="XREF-TEXTCOPY"Chapter 3, you created an Analysis phase for your project and built a system within that phase. Now, assume that you have completed your analysis of that system and are ready to begin system design.You must perform the following steps:1 Create a System Design phase in your project.2 Merge the system into the System Design phase.3 Begin design work on the system.Create a System Design phaseΣ To create a System Design phase:1 Move to the Configuration level. (In the Navigation area of the Browser, click on the name of the configuration.)2 Select File | New | Phase Version.The New Phase Version window appears.Note: The Analysis phase is not an option because your configuration already contains an Analysis phase.3 Select System Design, then select OK.ObjectTeam adds the System Design phase to your configuration and updates the Information area of the Browser.Merge the system into the next phase Σ To merge your system from the Analysis phase into the System Design phase:1 Move to the System Design Phase level. (In the Information area, double-click on the System Design phase that you just created.)2 Select Utilities | Merge From Previous Phase.ObjectTeam opens the Merge Window.FILENAME="00075.unk" ORIGFILE="pics/import.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut2.fm5.mif"3 Select the system(s) of your choice in the Information Area of the Merge Window.4 Select Version | MergeThe System from the previous phase is now merged with the current Phase. The merged system in the previous phase is frozen.Begin system design workNow that your system is in the System Design phase, you are ready to begin design work on the system. In this tutorial, you will add a rentProduct operation to the Member class and a returnRental operation to the Product class.Σ To add operations to the classes in the CD:1 Open the system that you just copied to the System Design phase.2 Open the CD.3 Add a rentProduct operation to the Member class:a Click on the bottom text area of the Member class.An I-bar appears, indicating that you can enter text.b Enter rentProduct as the operation name.4 Add a returnRental operation to the Product class.The CD now looks like this:FILENAME="00076.unk" ORIGFILE="pics/cadopers.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut2.fm5.mif"5 Save and close the CD.Compare the two phasesAs you move a system through each phase of the development cycle, it is useful to know which changes were made during a particular phase. ObjectTeam provides a Compare utility that finds the changes for you.Σ To compare the current CD with the CD in the Analysis phase:1 Move to the System level, if you are not already there.2 If any system files are selected, click on the background of the Information area to deselect them.3 Select Utilities | Compare With Previous Phase.The Compare With Previous Phase window appears.4 Select the Components radio button, then select OK.ObjectTeam compares the contents of all files in the two systems and displays the results in a Monitoring window.Note: Select the Files radio button to compare the list of files in the two systems without comparing the contents of the files.FILENAME="00077.unk" ORIGFILE="pics/compoutp.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut2.fm5.mif"5 Examine the results, then close the Monitoring window.ID="34629"Creating a New VersionIntroductionIn this section, you create a new version of your system.Purpose of versionsCreating versions of objects is critical for incremental development and for project teams.n Incremental development. You can make a set of changes, ensure that everything works properly, freeze the system, then proceed to the next set of changes. If you have problems implementing your changes, you can return to the frozen version of the system and try again.n Project teams. Once you have a working system, you can freeze it and make it available to your project team. The team can use the frozen version of the system while you continue to work on a new version of that system.Version and configuration rulesBefore you perform the procedures in this section, you should understand the following rules for versions and configurations:n As described in REFID="41706" TYPE="XREF-TEXTCOPY"Version and Configuration Management, each version of an object can be in one of three states: working, frozen, or background. Working versions can be modified; therefore, only one version of an object can be in the working state at a time.n A project can contain many versions of a configuration. However, a configuration can contain only one version of a particular phase, system, or file.n Any version of an object that is not in a configuration must be frozen.Create a new version of the systemΣ To create a new version of your system:1 Move to the System Design Phase level. Tip: If you are at the System level, you can move to the System Design Phase level by selecting File | Close.ObjectTeam updates the Information area of the Browser. You have one system at the System Design Phase level, version XYZConfig.1 of XYZSystem.2 Select the system.3 Select Version | New.ObjectTeam freezes the current version of the system (XYZConfig.1) and creates a new version (XYZConfig.2). The new version is now the working version in the configuration; the frozen version is removed from the configuration.4 Notice the version and status of the new system.Tip: In the Information area, column 1 is Name, column 2 is Version, and column 3 is Status. If the Information area does not display this information, select View | Details to change the display.Add the older version to your configurationYou can choose which version of the system you want to use in your configuration.Σ To use the older system version in your configuration:1 Select the system.2 Select Version | Select | Selected.The Select Version window appears.Tip: Select Version | Select | Selected to choose a different version of the system. Select Version | Select | New to choose a system that is not currently in your configuration. You will use the New option in the next section.3 Select version XYZConfig.1, then select OK.ObjectTeam adds version XYZConfig.1 to the configuration, removes version XYZConfig.2, and updates the Information area of the Browser. Version XYZConfig.2 is automatically frozen when it is removed from the configuration. Return to the newer version and unfreeze itΣ To use the newer system version in your configuration:1 Select the system.2 Select Version | Select | Selected.3 Select version XYZConfig.2, then select OK.Σ To unfreeze version XYZConfig.2:1 Select the system.2 Select Version | Unfreeze.ID="35607"Accessing Frozen VersionsIntroductionAs mentioned in the previous section, versions are important for project teams. In this section, you examine how versions are used to share code during development.ScenarioIn the previous section, you created version XYZConfig.1 and XYZConfig.2 of XYZSystem. In this section, you are a new developer who wants to use XYZSystem; you will use the frozen version, XYZConfig.1.You must perform the following steps:1 Create a new configuration and phase.2 Add version XYZConfig.1 of XYZSystem to the new configuration.Create a configuration and phaseThe system you want to use is in the System Design phase of the project. Therefore, you must create a Configuration version with a System Design phase.Σ To create the Configuration and Phase versions:1 Move to the Project level. (In the Navigation area, click on the name of your project. You might need to scroll the Navigation area to locate your project.)2 Select File | New | Configuration Version.3 Enter NewConfig as the name of the Configuration version.4 Select OK.5 Move to the Configuration level by opening the Configuration version that you just created.6 Select File | New | Phase Version.7 Select System Design, then select OK.Add XYZSystem to your configuration Σ To add version XYZConfig.1 of XYZSystem to the System Design phase of NewConfig:1 Move to the System Design Phase level by opening the System Design phase that you just created.2 Select Version |Select | New.The Select Version window appears.3 Select version XYZConfig.1 of XYZSystem, then select OK.Create a new systemNow, create a new system in the System Design phase of NewConfig.Σ To create a new system:1 Select File | New | System Version.The New System Version window appears.2 Enter NewSystem as the name of the new system.3 Select OK.Notice the difference between the version numbers of the two systems. The version number includes the name of the configuration in which the system is created. This helps you to identify the version that you want to use.Cannot unfreeze XYZSystem You cannot unfreeze version XYZConfig.1 of XYZSystem because a newer version (XYZConfig.2) of that system already exists. This prevents you from making changes to a system that another developer is working on.If you try to unfreeze XYZSystem, an error message appears.ID="28793"Changing Access RightsIntroductionRoles and access rights control access to objects. In this section, you experiment with roles and access rights by performing the following tasks:n Examine your current roles.n Examine role rights for NewSystem.n Change your access rights to NewSystem.About roles and access rulesAs described in REFID="29719" TYPE="XREF-TEXTCOPY"Access Control, ObjectTeam manages security through roles and access rules. The administrator of the Corporate level creates several roles and associates each role with a set of access rules that allows or prohibits specific actions on specific types of objects.As an ObjectTeam user, you have access to one or more roles. (Access to roles is assigned at the Corporate or Project level.) During a session, you can activate or deactivate the roles to which you have access. Your active roles determine your current level of access.Display your effective rolesEffective roles are the roles that you have activated.Σ To display your effective roles, select File | Effective Roles.The Effective Context window appears, displaying your user name and active roles. Typically, you have one active role whose name matches your user name.FILENAME="00078.unk" ORIGFILE="pics/effroles.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut2.fm5.mif"Guest roleIf the name you used to log into your computer does not match a user name in the Cayenne repository, your effective role is Guest. Display the role rights for NewSystemEach object has a set of role rights that defines the access rights to the object for each role defined at the Corporate level.Σ To display the role rights for NewSystem:1 Move to the System Design Phase level, if you are not already there.2 Select NewSystem.3 Select Security | Role Rights | Show.The Show Role Rights window appears. NewSystem is highlighted in the Objects list box.4 Select your role in the Roles list box.ObjectTeam updates the Actions list box to display your role's access rights to NewSystem.FILENAME="00079.unk" ORIGFILE="pics/showrols.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut2.fm5.mif"Typically, for your role, the action controlAction is set to Allowed and all other actions are set to Undefined. (The action controlAction determines whether you can modify the object's role rights.)5 Select another role in the Roles list box.Typically, for all other roles, all actions are set to Undefined.6 Select OK to close the Show Role Rights window.About this scenarioThe action destroyAction determines whether you can delete the object. If you change the role rights for NewSystem so that, for your role, the action destroyAction is set to Prohibited, you will not be able to delete NewSystem.Note: This is not a typical scenario. It is provided only to show you how to work with role rights.Deactivate the SuperUser roleNo action is prohibited for users who have the SuperUser role active. Therefore, if your effective roles include SuperUser, deactivate that role before you continue.Σ To deactivate a role:1 Select Security | Deactivate.The Deactivate Role window appears.2 Select the role that you want to deactivate, then select OK.Change role rights to NewSystemΣ To protect NewSystem from being deleted, change its role rights:1 Select NewSystem.2 Select Security | Role Rights | Edit.The Edit Role Rights window appears.3 Select NewSystem in the Objects list box.4 Select your role in the Roles list box.ObjectTeam updates the Actions list box to display your role's access rights to NewSystem.5 Change the setting of the action destroyAction from Undefined to Prohibited.6 Select OK to close the Edit Role Rights window.7 Select File | Delete to delete NewSystem.A confirmation message appears.8 Select OK to confirm that you want to delete NewSystem.An error message appears, indicating that you do not have permission to delete the system.Delete NewSystemΣ To restore your access rights and delete NewSystem:1 Select NewSystem.2 Select Security | Role Rights | Edit.The Edit Role Rights window appears.3 Select NewSystem in the Objects list box.4 Select your role in the Roles list box.5 Change the setting of the action destroyAction from Prohibited to Undefined.6 Select OK to close the Edit Role Rights window.7 Select File | Delete to delete NewSystem.A confirmation message appears.8 Select OK to confirm that you want to delete NewSystem.The system is deleted.ID="18012"Using RolesIntroductionEffective roles determine a user's access rights; therefore, it is important to control the roles that a user can activate. In ObjectTeam, a user can activate a role only if there is a UserRoleLink between the user and the role.UserRoleLinks are defined at the Corporate or Project level. Typically, the Corporate administrator creates a basic set of UserRoleLinks at the Corporate level, and the project leader modifies this set by adding UserRoleLinks at the Project level.Examine users and rolesThe <users> and <roles> pseudo objects at the Corporate level define users and roles, respectively. Typically, only the Corporate administrator can create and modify <users> and <roles>.Σ To display a list of all users and roles:1 In the Navigation area of the Browser, fold all Project hierarchies so that you can clearly see the Corporate hierarchy.2 Locate the <users> pseudo object.Tip: The pseudo objects are listed below the projects. You might need to scroll the Navigation area to locate <users>.3 Open <users> by clicking on it.The users defined in the repository are displayed in the Information area. Notice the icon that represents a user.FILENAME="00080.unk" ORIGFILE="pics/br_users.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut2.fm5.mif"4 Open <roles> by clicking on it.The roles defined in the repository are displayed in the Information area. Notice the icon that represents a role.FILENAME="00081.unk" ORIGFILE="pics/br_roles.gif" ORIGTYPE="X" ORIGDOC="../../sources/gs/tut2.fm5.mif"Examine UserRoleLinksEach user has access to at least one role. A UserRoleLink links the user and the role.Σ To display a list of the roles to which you have access:1 Open the <users> pseudo object by clicking on it.2 Double-click on your user name.Each role to which you have access is displayed in the Information area. This indicates that a UserRoleLink exists between your user name and the role.Σ To display a list of the users who have access to your role:1 Open the <roles> pseudo object by clicking on it.2 Double-click on your role.Each user who has access to that role is displayed in the Information area. This indicates that a UserRoleLink exists between the role and the user.Add a UserRoleLinkΣ To add a UserRoleLink:1 Make sure that you have a role open. (Your role should already be open.)2 Select File | New | User Role Link.The New User Role Link window appears, displaying a list of all users.3 Select a user, then select OK.An error message appears, indicating that you do not have permission to perform this action. Typically, only the Corporate administrator can add UserRoleLinks at the Corporate level.UserRoleLinks at the Project levelEach project includes a <roles> pseudo object that is similar to the Corporate-level <roles> pseudo object. The Project-level <roles> object defines the UserRoleLinks for that project. You can examine and add UserRoleLinks to the Project-level <roles> object in the same way you examine and add UserRoleLinks to the Corporate-level <roles> object.Σ To display the UserRoleLinks defined for your role on the Project level:1 In the Navigation area, locate the <roles> pseudo object for your project.2 Open <roles> by clicking on it.The roles defined in the repository are displayed in the Information area. 3 Double-click on your role.No users are displayed in the Information area. At the Corporate level, you are defined as a user of this role. At the Project level, no additional users have access to this role.What to do nextThis manual has introduced you to many ObjectTeam features. The remainder of the ObjectTeam documentation set describes these and other features in greater detail. Before you begin work in ObjectTeam, you might want to familiarize yourself with the contents of each ObjectTeam manual.Modeling GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideAbout this manualThis manual describes the ObjectTeam Browser, diagram editors, Check utility, Reports and Class Browser. It is useful for all ObjectTeam users because it describes the core features of the product.PrerequisitesThis manual assumes that you are familiar with the following products and concepts:n The operating system you are using. For more information, refer to your operating system documentation.n The Unified Modeling Language (UML) for Object-Oriented Development, as developed by Grady Booch, Ivar Jacobson, and James Rumbaugh, or the Object Modeling Technique (OMT), as developed by James Rumbaugh et al.n The basic operation of ObjectTeam, as presented in ObjectTeam Getting Started.SEE="Class Definition Matrix" TERM1="CDM"SEE="Class Association Diagram" TERM1="CAD"SEEALSO="Class Association Diagram" TERM1="diagram"SEEALSO="Class Association Diagram" TERM1="Object Model"SEEALSO="Class Association Diagram" TERM1=""SEE="Object Model" SEEALSO="Class Association Diagram" TERM1="Class Association Model"SEE="Class Communication Diagram" TERM1="CCD"SEE="Class Communication Diagram" SEEALSO="Class Communication Diagram" TERM1="diagram"SEEALSO="Class Communication Diagram" TERM1="Class Communication Model"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="Data Flow Diagram" TERM1="diagram"SEEALSO="Data Flow Diagram" TERM1=""SEEALSO="Data Flow Diagram" TERM1="Functional Model"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="Data Flow Diagram" TERM1="DFD"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="Event Trace Diagram" TERM1="ETD"SEE="Event Trace Diagram" SEEALSO="Event Trace Diagram" TERM1="diagram"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="Event Trace Diagram" TERM1="Dynamic Model"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="actor" TERM1="external agent"SEE="initiator" TERM1="external agent"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="Message Generalization Diagram" TERM1="MGD"SEE="Message Generalization Diagram" SEEALSO="Message Generalization Diagram" TERM1="diagram"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="Message Generalization Diagram" TERM1="Class Communication Model"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="State Transition Diagram" TERM1="STD"SEE="State Transition Diagram" SEEALSO="State Transition Diagram" TERM1="diagram"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="State Transition Diagram" TERM1="Dynamic Model"SEEALSO="State Transition Diagram" TERM1=""SEE="Use Case Diagram" SEEALSO="State Transition Diagram" TERM1="Jacobson Use Case"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="Use Case Diagram" TERM1="Dynamic Model"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="Use Case Diagram" TERM1="UCD"SEE="Use Case Diagram" SEEALSO="Use Case Diagram" TERM1="diagram"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram" TERM1="Use Case Diagram"SEEALSO="diagram" TERM1=""SEEALSO="diagram" TERM1="Class Association Diagram"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram" TERM1="Class Communication Diagram"SEEALSO="diagram" TERM1=""SEEALSO="diagram" TERM1="Data Flow Diagram"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram" TERM1="Event Trace Diagram"SEEALSO="diagram" TERM1=""SEEALSO="diagram" TERM1="Message Generalization Diagram"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram" TERM1="State Transition Diagram"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="Browser" TERM1="ObjectTeam Browser"SEE="Browser" TERM1="information area"SEE="Browser" TERM1="navigation area"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="actor"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="aggregation"SEEALSO="diagram component" TERM1=""SEEALSO="diagram comp" TERM1="association"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="class"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="class reference"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="communication association"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="communication message"SEEALSO="diagram component" TERM1=""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="container class"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="data flow"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="data process"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="data store"SEEALSO="diagram component" TERM1=""SEEALSO="diagra" TERM1="event"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="event message"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="final state"SEEALSO="diagram component" TERM1=""SEEALSO="dia" TERM1="flow"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="generalization"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="initial state"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="initiator"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="link attribute"SEEALSO="diagram component" TERM1=""SEEALSO="di" TERM1="message"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="message generalization connector"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="more classes"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="n-ary association"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="overlapping generalization"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="process"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="qualified aggregation"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="qualified association"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="state"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="subject"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="super state"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="diagram component" TERM1="use case generalization"SEEALSO="diagram component" TERM1=""SEEALSO="diagram component" TERM1="object"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Chapter 1 Working With ObjectTeamTYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideIntroductionThis chapter explains the basic concepts of the Cayenne Browser and ObjectTeam projects. It also describes the pseudo objects used for project management and suggests a workflow for ObjectTeam projects.PrerequisiteYou need to be familiar with the information in the ObjectTeam Getting Started.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37719" TYPE="XREF-TEXTCOPY"Cayenne Browser 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18713" TYPE="XREF-TEXTCOPY"ObjectTeam Project Hierarchy 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38536" TYPE="XREF-TEXTCOPY"Pseudo Objects 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25029" TYPE="XREF-TEXTCOPY"Workflow 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9ID="37719"Cayenne BrowserIntroductionThe Cayenne Browser provides access to the Cayenne repository and user-level customization files.FILENAME="00082.unk" ORIGFILE="pics/ovuser.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mghier.fm5.mif"Cayenne repositoryThe root node of the Browser hierarchy represents the Cayenne repository and has the same name as the repository. This node is created and deleted when the repository administrator creates and deletes the repository. It cannot be created, deleted, or renamed from within the Browser.Corporate levelCorporate level refers to the items immediately below the root node. The following figure shows the corporate level in the Browser. In this figure, the name of the repository is corporate.FILENAME="00083.unk" ORIGFILE="pics/ovcorp.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mghier.fm5.mif"ObjectTeam projectsCorporate level lists each ObjectTeam project in the repository. ObjectTeam projects are indicated by the following icon. In the figure shown above, the repository named corporate contains two projects, ProjectOne and ProjectTwo.FILENAME="00084.unk" ORIGFILE="pics/projicon.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mghier.fm5.mif"GroundWorks modelsIf the Cayenne repository also contains GroundWorks Enterprise models, they also appear beneath the root node. This guide describes ObjectTeam only. For information about GroundWorks models, see the GroundWorks documentation.Pseudo objectsFollowing the list of projects and models are the corporate-level pseudo objects. Pseudo objects, whose names are enclosed in angle brackets (<>), contain information that is used with project management features such as access control and customization. For more information, see REFID="38536" TYPE="XREF-TEXTCOPY"Pseudo Objects.User customization filesUser customization files are in the home directory of the current user, not in the repository. For that reason, the <user customization files> node is not under the root node of the Browser hierarchy.User Customization level refers to the user customization files, which are listed immediately below the <user customization files> node. The following figure shows the user customization level in the Browser.+ new picture with <user customization files> unfoldedFILENAME="00085.unk" ORIGFILE="pics/ovuser.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mghier.fm5.mif"For more informationSee REFID="38536" TYPE="XREF-TEXTCOPY"Pseudo Objects for more information about customization files.ID="18713"ObjectTeam Project HierarchyIntroductionThe Cayenne Browser provides access to the Cayenne repository and user-level customization files. It also provides access to ObjectTeam projects and serves as the main interface to ObjectTeam.In the Browser, the corporate level lists each ObjectTeam project in the repository. The information is arranged hierarchically beneath each project node. A clear understanding of the project hierarchy is helpful when working in the Browser.Project data and pseudo objectsEach level of the project hierarchy contains project data and pseudo objects. This section describes the project data.Pseudo objects, whose names are enclosed in angle brackets (<>), contain information that is used with project management features such as access control and customization. For more information, see REFID="38536" TYPE="XREF-TEXTCOPY"Pseudo Objects.Project levelProject level refers to the items immediately below a project node. The following figure shows the project level in the Browser.FILENAME="00086.unk" ORIGFILE="pics/ovproj.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mghier.fm5.mif"The project level lists each configuration version in the project. The project shown above has one configuration version, ConfigurationOne. Following the configuration versions are the project-level pseudo objects. Configuration versionsConfiguration versions are used for version management. A project can have one or more Configuration versions. Each configuration version can be used by one or more project team members. The ObjectTeam Project Management Guide describes configuration and version management.Configuration levelConfiguration level refers to the items immediately below a configuration version node. The following figure shows the configuration level in the Browser.FILENAME="00087.unk" ORIGFILE="pics/ovconf.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mghier.fm5.mif"The configuration level lists each phase version in the project. The configuration shown above has four phase versions: Analysis, System Design, Object Design, and Implementation. Following the phase versions are the configuration-level pseudo objects. Phase versionsPhase versions are used to manage the project life cycle, as described in REFID="25029" TYPE="XREF-TEXTCOPY"Workflow.Phase levelPhase level refers to the items immediately below a phase version node. The following figure shows the phase level in the Browser.FILENAME="00088.unk" ORIGFILE="pics/ovphase.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mghier.fm5.mif"The phase level lists each system and document version in the project. The Analysis phase version shown above has one document version and two system versions. Following the document and system versions are the phase-level pseudo objects.System versionsSystem versions contain the model information, such as the diagrams and the objects defined in the diagrams. This guide describes how to create and maintain diagrams and other model information.Document versionsEach document version contains complete, formatted documentation for one system version. For more information about how to create this documentation, see the ObjectTeam Document Generation Guide.System levelSystem level refers to the items immediately below a system version node. The following figure shows system level in the Browser:FILENAME="00089.unk" ORIGFILE="pics/ovsys.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mghier.fm5.mif"The system level lists the file versions in the system (the diagrams and class definition matrices (CDMs)). The system shown above contains two file versions. Following the file versions are the system-level pseudo objects. Document levelDocument level refers to the items immediately below a document version node. The document level in the Browser contains the file versions in the document. See the ObjectTeam Document Generation Guide for more information.Who uses which levelProject team members generally work on the system and document levels, creating and maintaining the model information. They rarely need to work with the system- or document-level pseudo objects, but they can if necessary. Project team members may also create and maintain customization files on the user customization level.Project leaders create and maintain projects and are responsible for all project-level data. If a project contains only one configuration version, the project leader generally maintains the configuration- and phase-level data also. If a project contains multiple configuration versions, the project leader may delegate maintenance of each configuration version to a senior project team member, who then maintains the configuration- and phase-level data for it.ID="38536"Pseudo ObjectsIntroductionEach level of the Browser hierarchy includes pseudo objects. The names of these objects are enclosed in angle brackets (<>). The following table lists the pseudo objects and what they are used for:COLS="3"COLNAME="1" COLWIDTH="145p"COLNAME="2" COLWIDTH="174p"COLNAME="3" COLWIDTH="165p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Pseudo ObjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"Browser LevelCOLNAME="1" VALIGN="TOP" MOREROWS="0"Controlling access (Security)COLNAME="2" VALIGN="TOP" MOREROWS="0"<users>COLNAME="3" VALIGN="TOP" MOREROWS="0"CorporateCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"<roles>COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate and ProjectCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"<controlled classes>COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate and ProjectCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"<controlled lists>, <access rules>COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, Configuration, Phase, System, and DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomizationCOLNAME="2" VALIGN="TOP" MOREROWS="0"<customization files>COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, Configuration, Phase, System, and DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"<user customization files>COLNAME="3" VALIGN="TOP" MOREROWS="0"User CustomizationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Sharing groups (Corporate modeling)COLNAME="2" VALIGN="TOP" MOREROWS="0"<corporate groups>COLNAME="3" VALIGN="TOP" MOREROWS="0"CorporateCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"<saved groups>COLNAME="3" VALIGN="TOP" MOREROWS="0"SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"Listing itemsCOLNAME="2" VALIGN="TOP" MOREROWS="0"<defined items>COLNAME="3" VALIGN="TOP" MOREROWS="0"System and DocumentNote: The Security and Corporate Modeling features are available as licensed modules. You will only see the associated pseudo-objects if these features are licensed at your site and switched on.Access control (Security)The repository is a shared resource. To protect it, ObjectTeam provides a rich access control mechanism.At the corporate level, the repository administrator can use the access control mechanism to grant users access to appropriate areas of the repository, while restricting their access to other areas. At lower levels, project leaders and project team members can use the same access control mechanism to further restrict access to their own areas of the repository.For more informationSee the ObjectTeam Project Management Guide.CustomizationMost of the ObjectTeam product can be customized.n At the corporate level, customization files are stored in the Cayenne installation directory. The repository administrator can modify these files (with great care).n At the project, configuration, phase, system, and document levels, the customization files are internal files stored in the repository, not in the file system of the computer.These customization files override or supplement the corporate-level customization files (for example, if you are working at the system level, the customization files defined at the system level take precedence over those defined at all higher levels). They are created and modified by the project leader or a senior project team member.n At the user customization level, the customization files are stored in the home directory of the current user. They are created and maintained by the user and override all other customization files.For more informationSee the ObjectTeam Customization Guide.Sharing groups (Corporate modeling)A group is a set of file versions and items; for example, a group might contain part of a diagram and the items defined in that part of the diagram. You can use groups to allow reuse of model data. At the system level, you create a group. You then promote that saved group to corporate level where it can be reused by ObjectTeam users on other projects. This process is called corporate modeling.For more informationSee the ObjectTeam Project Management Guide.Listing itemsAt the system and document level you create diagrams, documents, and other model information. ObjectTeam stores this information as items in the repository. The pseudo object <defined items> provides a complete list of all repository items defined in a system or document version.For more informationSee REFID="29698" TYPE="XREF-TEXTCOPY"Working With Items.ID="25029"WorkflowIntroductionTERM1="phase" TERM2="definition of"ObjectTeam supports models-to-code application development. In ObjectTeam, you progress from models to code by moving a project through the following phases of software development.n Analysisn System Designn Object Designn ImplementationCustomizing phasesObjectTeam provides the above four phases by default. Depending on the needs of your project or organization, you may wish to insert additional phases, or delete them. If you want to do this, you must define the number of phases and their order before you start creating phases. See the ObjectTeam Customization Guide for more information.TERM1="phase" TERM2="customizing"TERM1="customizing" TERM2="phases"Phase versionsIn ObjectTeam, phases are not just conceptual, they are also objects in the repository. When you move from one phase to the next, you copy your system versions from one phase version to the next. For example, when you move from analysis to system design, you copy your system versions from the Analysis phase version to the System Design phase version.Models are preservedAs you move from analysis toward implementation, the nature of your model changes. However, because you copy (rather than move) your system versions from one phase version to the next, the models created during each phase are preserved. Changes made to a system in one phase do not affect that system in any other phase. For example, after you move a system from the Analysis phase to the System Design phase, you can work on it without affecting the copy in the Analysis phase. You can still go back and change the system in the Analysis phase. If you do so, however, you should evaluate whether you need to update the System Design phase as a result.WorkflowTERM1="workflow"The following steps summarize the basic workflow for an ObjectTeam project:1 Create a project.2 Create a configuration version.3 Create an Analysis phase version in that configuration version.4 Create one or more system versions in the Analysis phase version.5 Create and populate diagrams in each system version, developing the system version to meet the objectives of the current phase.6 Optionally, create a document version for each system version and generate formal project documentation.7 Move the system versions to the next phase: create the new phase version in your configuration version and import the system versions to the new phase version.8 Repeat steps 5 through 7 until you have moved all systems through all phases.Analysis and System Design phasesTERM1="phase" TERM2="summary of"The Analysis and System Design phases are independent of the target language.AnalysisTERM1="Analysis phase" TERM2="summary of"In the Analysis phase, you model the business situation without considering technical aspects, such as what operating systems, databases, or programming languages to use. End users must be able to understand the analysis models because they must validate them.Analysis should not include implementation decisions. The analysis model states what must be done without placing restrictions on how it will be done. Worrying about implementation during this phase impedes your efforts to fully understand your customer requirements.System DesignTERM1="System Design phase" TERM2="summary of"In the System Design phase, you design the application architecture, identify subsystems, and allocate the subsystems to specific hardware. Your objective is to create a high-level structure of the system, figuring out the classes required to build the functionality and organizing them so that related groups are defined and stored in systems. During the System Design phase, you focus on the items you need to solve the problem. The decisions you make concern the graphical user interface (GUI), the database management system, and the hardware and software configuration.Object Design and Implementation phasesThe Object Design and Implementation phases address the issues specific to the target language, and are designed to be used with the ObjectTeam code generators. If you are not planning to generate code using ObjectTeam, you generally do not use these two phases.Object DesignTERM1="Object Design phase" TERM2="summary of"You carry out two tasks in the Object Design phase:1 Choosing an ObjectTeam code generator. This choice determines which object properties and Browser menu items are available to you. 2 Adding to the system versions the implementation details necessary for successful code generation. ImplementationTERM1="Implementation phase" TERM2="summary of"When you copy a system from the Object Design phase, ObjectTeam translates your model data into source code files. In the Implementation phase, you edit the generated source code files to refine and complete the application.For more informationThe ObjectTeam Code Generation Guide for your target language provides more information about the Object Design and Implementation phases, and complete instructions for generating code.Chapter 2 Using the ObjectTeam BrowserTYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideIntroductionWhen TERM1="Browser" TERM2="features"TERM1="user interface"TERM1="main window"you start ObjectTeam, the ObjectTeam Browser appears. From the Browser, you can access and manipulate all project data. This chapter describes basic features of the Browser. It does not repeat information available in ObjectTeam Getting Started or the ObjectTeam Project Management Guide.Browser objectsFrom the Browser, you typically work with the following objects:n Projectsn Configuration versionsn Phase versionsn System versions and document versionsn File versions (diagrams, groups, and external files)In this chapter, the term object refers to the objects listed above. It does not refer to items in the Cayenne repository, such as classes and attributes.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25454" TYPE="XREF-TEXTCOPY"Creating, Deleting, and Viewing Objects 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33796" TYPE="XREF-TEXTCOPY"Copying Objects 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37806" TYPE="XREF-TEXTCOPY"Renaming Objects 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28398" TYPE="XREF-TEXTCOPY"Using Browser Views and Filters 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32279" TYPE="XREF-TEXTCOPY"Setting Browser Options 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35959" TYPE="XREF-TEXTCOPY"Printing 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39627" TYPE="XREF-TEXTCOPY"Summary of Mouse Button Operations 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="25454"Creating, Deleting, and Viewing ObjectsIntroductionThis section describes how to create, open, view details of, and delete Browser objects. You work with different objects at each level of the Browser. COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Browser LevelCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CorporateCOLNAME="2" VALIGN="TOP" MOREROWS="0"ProjectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ProjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"ConfigurationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigurationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemsDocumentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SystemCOLNAME="2" VALIGN="TOP" MOREROWS="0"Files (such as diagrams and external files)COLNAME="1" VALIGN="TOP" MOREROWS="0"DocumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Files (such as Document Structure Matrixes and File Sections)Note: The document level is used for document generation. For more information, see the ObjectTeam Document Generation Guide.TERM1="creating" TERM2="Browser objects"TERM1="New (File menu)" TERM2="Browser"TERM1="project" TERM2="creating"TERM1="system" TERM2="creating from Browser"TERM1="configuration" TERM2="creating"TERM1="phase" TERM2="creating"How to create an objectΣ To create an object:1 Move to the appropriate level. For example, to create a project, move to the corporate level.2 Select File | New.A cascading menu appears.3 Select the type of object that you want to create. For example, to create a new project, select File | New | Project.Naming conventionsObject names have a maximum length of 80 characters and can consist of any alphanumeric characters. Because object names are often used as file names, it is recommended when naming objects to choose names that conform to the operating system's rules for file names.TERM1="editing" TERM2="Browser objects"TERM1="Open (File menu)" TERM2="Browser objects"TERM1="Edit (File menu)" TERM2="Browser objects"How to open an objectΣ To open an object:1 Move to the appropriate level. For example, to open a project, move to the corporate level.2 In the information area, select the object that you want to open.3 Use one of the following commands:COLS="3"COLNAME="1" COLWIDTH="81p"COLNAME="2" COLWIDTH="234p"COLNAME="3" COLWIDTH="117p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CommandCOLNAME="2" VALIGN="TOP" MOREROWS="0"Selected Object Is Project, Configuration, Phase, Or SystemCOLNAME="3" VALIGN="TOP" MOREROWS="0"Selected Object Is FileCOLNAME="1" VALIGN="TOP" MOREROWS="0"File | EditCOLNAME="2" VALIGN="TOP" MOREROWS="0"UnavailableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Opens editorCOLNAME="1" VALIGN="TOP" MOREROWS="0"File | OpenCOLNAME="2" VALIGN="TOP" MOREROWS="0"Opens the object, changing levels in the Browser and updating the Context and Information areasCOLNAME="3" VALIGN="TOP" MOREROWS="0"Opens editorCOLNAME="1" VALIGN="TOP" MOREROWS="0"File | ShowCOLNAME="2" VALIGN="TOP" MOREROWS="0"UnavailableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Opens editor, read-only accessAlternativeDouble-click the object in the information area to use File | Open or File | Edit.How to view object detailsTERM1="displaying" TERM2="object information"TERM1="Info (File menu)"TERM1="project" TERM2="displaying"TERM1="configuration" TERM2="displaying"TERM1="system" TERM2="displaying"TERM1="phase" TERM2="displaying"Σ To display detailed information about an object:1 In the navigation or information area, select the object that you are interested in.2 Select File | Info.The Info window appears.FILENAME="00090.unk" ORIGFILE="pics/objinfo.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgbrows.fm5.mif"3 Click OK to close the window.TERM1="deleting" TERM2="Browser objects"TERM1="Delete (File menu)"TERM1="project" TERM2="deleting"TERM1="configuration" TERM2="deleting"TERM1="system" TERM2="deleting"TERM1="phase" TERM2="deleting"How to delete an objectΣ To delete an object:1 Move to the appropriate level. For example, to delete a project, move to the corporate level.2 In the information area, select the object that you want to delete.3 Select File | Delete.The Delete Warning message appears prompting you to confirm the Delete operation.4 Click OK to delete the object.ID="33796"Copying ObjectsIntroductionThis section describes how to use the Browser to copy objects.What can be copiedYou can use these procedures to copy the following objects:n System versionsn Diagram versionsn CDM versionsn Group versionsYou cannot copy projects, configurations, phases, or document systems.Two ways to copy objectsObjectTeam provides two ways to copy objects:n Using the Copy (or Cut) and Paste options from the Edit menun Dragging the object in the BrowserHow to copy objects using EditTERM1="copying" TERM2="files"TERM1="Copy (Edit menu)" TERM2="files"TERM1="Cut (Edit menu)" TERM2="files"TERM1="Paste (Edit menu)" TERM2="files"Σ To copy objects using the Edit menu:1 In the Information area, select the object that you want to copy.2 Select Edit | Copy (or Edit | Cut to delete the object).Note: If you use Edit | Cut, the object remains visible in the Browser (but with its icon dimmed) until you place it in the new location using Edit | Paste.3 Open the Phase or System into which you want to copy the object.4 Select Edit | Paste.How to copy objects by dragging themTERM1="drag-and-drop" TERM2="copying files"You can drag objects from the navigation area to the information area or vice versa. You can also drag an object from one location in the navigation area to another. On Windows, use the left mouse button. On UNIX systems, use the middle mouse button.Σ To copy objects by dragging them:1 In either the navigation area or information area, display the object that you want to copy and the phase or system into which you want to copy it.2 Drag the object to the destination phase or system.Note: If an object with the same name as the one you are copying exists in the target phase or system, you may receive a message that an item is already defined. For more information on items and their scope, see REFID="29698" TYPE="XREF-TEXTCOPY"Working With Items.Restrictions on copying systemsRestrictionAlthough the procedures in this section can be used to copy systems, it is recommended that you only use these for copying systems between projects. If you want to copy systems from one phase to the next within a single project, it is recommended that you use the import procedures described in REFID="20556" TYPE="XREF-TEXTCOPY"Merging Systems into Another Phase in the ObjectTeam Project Management Guide.ReasonIf you copy a system using the procedures described in this section, a new system version will be made. If a system with this name already exists, it will be frozen and deselected. The import procedures, as described in REFID="20556" TYPE="XREF-TEXTCOPY"Merging Systems into Another Phase in the ObjectTeam Project Management Guide, offer you more control over what must be imported.For more informationSee the ObjectTeam Project Management Guide for more information about version and configuration management.ID="37806"Renaming ObjectsIntroductionTERM1="diagram" TERM2="renaming"TERM1="system" TERM2="renaming"TERM1="document" TERM2="renaming"You can rename projects, configurations, systems, documents, diagrams (and diagram components), and external files within the Browser. You cannot rename phases, groups, customization files, and so on. You can also rename a repository, using the Corporate Management tool. For details on how to rename repositories, see the ObjectTeam System Administrator's Guide.How to rename an objectTERM1="renaming" TERM2="Browser objects"TERM1="Change Name (File menu)" TERM2="of Browser object"Σ To rename an object:1 Move to the appropriate level. For example, to rename a system, move to the phase level.2 In the information area, select the object that you want to rename.3 Select File | Change | Name.The Change Name window appears.4 Type the new name, and then click OK.ObjectTeam renames the object or displays an error message if an object of that name already exists.Renaming configurationsWhen you create a version, ObjectTeam assigns it a version identifier. The configuration name is used as part of that version identifier. Renaming a configuration does not change the version identifiers of existing objects.For more informationSee the ObjectTeam Project Management Guide for more information about version and configuration management.ID="28398"Using Browser Views and FiltersIntroductionIf you are working in a large project, views and filters can help you focus on important details.ViewsTERM1="view" TERM2="definition of"TERM1="Browser" TERM2="views"TERM1="Default view"TERM1="Pseudo view"TERM1="Data view"TERM1="Process view"TERM1="SQL view"Views determine the information displayed in the information area of the Browser. As shown in the following table, every level in the corporate hierarchy has a default view, and many levels have additional views.Note: The views shown in the following table are supplied with ObjectTeam. Your site may have additional views defined.COLS="3"COLNAME="1" COLWIDTH="135p"COLNAME="2" COLWIDTH="63p"COLNAME="3" COLWIDTH="252p"COLNAME="1" VALIGN="TOP" MOREROWS="0"LevelCOLNAME="2" VALIGN="TOP" MOREROWS="0"ViewCOLNAME="3" VALIGN="TOP" MOREROWS="0"ShowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CorporateCOLNAME="2" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"ProjectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PseudoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pseudo object versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ProjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"Configuration versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PseudoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pseudo object versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigurationCOLNAME="2" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"Phase versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PseudoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pseudo object versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"PhaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"System versionsDocument versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PseudoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pseudo object versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"System (in Analysis, System Design, or Object Design)COLNAME="2" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"Group versions; file versions of type cad, ccd, cdm, dfd, etd, mgd, std, and ucdCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DataCOLNAME="3" VALIGN="TOP" MOREROWS="0"File versions of type cad and cdmCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"File versions of type ccd, dfd, etd, mgd, std, and ucdCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PseudoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pseudo object versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"System (in Implementation)COLNAME="2" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"Group versions; external file versions of type executable, library, c++, h++, esqlc++, lex++, yacc++, makefile, maketemplate, and tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SQLCOLNAME="3" VALIGN="TOP" MOREROWS="0"SQL scriptsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PseudoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pseudo object versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DocumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"All system file references, document structure matrixes, and external file versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PseudoCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pseudo object versionsHow to select a viewTERM1="View (File menu)"Σ To select a particular view:1 Select File | View.The views are listed in the View menu.2 Select the view that you want to use.The Information area of the Browser is updated, displaying only the objects that are in the selected view.FiltersTERM1="filter" TERM2="in Browser"TERM1=""TERM1="Browser" TERM2="filters"A filter allows you to further control what appears in the information area. When you turn a filter on, it applies to the current level and view only. It remains in effect until you turn it off or you exit from the Browser.ExampleYou open the Core system, select the Default view, and turn on a filter. The filter is in effect. You move to the configuration level, the filter is no longer in effect. You open the Interface system, the filter is again in effect.TERM1="Filter (View menu)"How to turn a filter onΣ To turn a filter on:1 From the View menu, select the desired view.ObjectTeam updates the information area.2 Select View | Filter | Edit.The Edit Filter window for the current level appears. The fields in the window correspond to the columns displayed in the information area in Detail view.FILENAME="00091.unk" ORIGFILE="pics/filter.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgbrows.fm5.mif"3 Specify the information that you want to appear in the Information area. For example, in the In Corporate field in the previous figure, you can enter Yes, No, or a wildcard string that includes either one or both of these.Tip: Click Help for a description of each field.4 Click OK.ObjectTeam updates the Information area to display the requested information and the Context area to indicate that the filter is on.How to turn a filter offΣ To turn a filter off, select View | Filter | Remove.ObjectTeam removes the filter and updates the information and context areas.ID="32279"Setting Browser OptionsTERM1="Browser" TERM2="options"IntroductionUse the Options menu to set personal preferences.For more informationUse Options |Copy User Environment to make your options available to other ObjectTeam users. See the ObjectTeam Project Management Guide.TERM1="Copy User Environment (Options menu)"How to set the Compare commandTERM1="comparing" TERM2="default compare command"TERM1="Compare Command (Options menu)"Σ To set the Compare command that you want to use with Utilities | Compare With Previous Version and Version | Compare:1 Select Options | Compare Command.The Compare Command window appears. The default command appears in the text field.2 Specify the desired compare command, and then click OK.How to set the default editorTERM1="editing" TERM2="default editor for"TERM1="Editor (Options menu)"Σ To set the default editor:1 Select Options | Editor.The Editor window appears.The Context list specifies different types of text files that you can edit. Select a default editor for each type of file.2 From the Context list, select a file type.The default editor for this file type appears in the text field.3 Specify the desired editor.4 Repeat steps 2 and 3 until you have specified the default editor for each type of file. 5 Click OK.How to change the Browser fontΣ To change the Browser font:TERM1="changing" TERM2="Browser fonts"TERM1="Browser" TERM2="fonts"TERM1="Font (Options menu)" TERM2="Browser"1 Select Options | Font.The Browser Font window appears.2 Select the font family, style, and size, and then click OK.ObjectTeam updates the Browser window to use the new font.How to set the default previewerTERM1="Previewer (Options menu)"The default previewer is used during document generation to view document objects such as encapsulated PostScript (EPS) files.Σ To set the default previewer:1 Select Options | Previewer.The Previewer window appears. 2 From the Context list, select a context in which to use the previewer.The default previewer for this context appears in the text field. 3 Specify the desired previewer, and then click OK.ID="35959"PrintingIntroductionTERM1="Browser" TERM2="printing"From the Browser, you can print a diagram or the current contents of the Information area. You can also specify the print commands that ObjectTeam should use.Printing a diagram to a fileYou can also print a diagram to a file in Interleaf, FrameMaker, Encapsulated Postscript, or Windows Metafile format. For more information, see the otexport command in the ObjectTeam System Administrator's Guide.How to specify the print commandsTERM1="Printer Setup (Options menu)"You specify a print command for diagrams (Options | Printer Setup | Graphical) and a print command for reports and other printed text (Options | Printer Setup | Text).Σ To specify the print command:1 Select Options | Printer Setup | Graphical or Options | Printer Setup | Text.The Printer Setup window appears. The illustration below show both the Windows dialog box (first) and the UNIX dialog box (second).FILENAME="00092.unk" ORIGFILE="pics/printcom.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgbrows.fm5.mif"FILENAME="00093.unk" ORIGFILE="pics/printset.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgbrows.fm5.mif"2 Specify the desired settings, and then click OK.Sharing Printer Setup optionsUse Options |Copy User Environment to make your Printer Setup options available to other ObjectTeam users. See the ObjectTeam Project Management Guide for more information.How to print the current viewTERM1="Print View (File menu)"Σ To print the current view, select File | Print View.ObjectTeam prints the contents of the Information area.How to print a diagramTERM1="diagram" TERM2="printing"TERM1="Print (File menu)"Σ To print a diagram:1 In the Information area, select the diagram that you want to print.2 Select File | Print.ObjectTeam prints the diagram using the Print Options specified in the diagram editor, as described later in this section. At the bottom of the diagram is a print box containing the diagram's full file name, the date it was last changed, and its status.AlternativeTo print a diagram from a diagram editor, select File | Print.How to specify print optionsTERM1="Print Options (Options menu)"Σ To specify print options:1 In a diagram editor, select Options | Print Options.The Print Options dialog box appears.FILENAME="00094.unk" ORIGFILE="pics/printopt.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgbrows.fm5.mif"COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name that appears on the printed diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Landscape, Print BoxCOLNAME="2" VALIGN="TOP" MOREROWS="0"The orientation of the diagram and whether the print box appears.COLNAME="1" VALIGN="TOP" MOREROWS="0"Scale strategyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Whether to scale automatically, and if not, the scale and size of the printed diagram.There are two scale strategies: Auto Scale and Manual Scale. Auto Scale scales the diagram to fit on the specified number of pages. Manual Scale (enabled by switching Auto Scale off) requires a Scale Factor to be specified. A Factor Scale of 2.000000 means all sizes are multiplied by 2.COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Whether these options are saved with this diagram.2 Select the desired options, and then click OK.ID="39627"Summary of Mouse Button OperationsIntroductionObjectTeam supports a two-button mouse on Windows and a three-button mouse on UNIX systems. (If you are using a three-button mouse on Windows, the middle button is ignored.) Mouse button operationsTERM1="mouse-button operations"TERM1="user interface" TERM2="mouse buttons"TERM1="left mouse button"TERM1="right mouse button"TERM1="middle mouse button"The following table summarizes ObjectTeam's mouse button operations. For more information about each operation, see the earlier sections of this chapter. COLS="3"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="225p"COLNAME="3" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"InCOLNAME="3" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Click left buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Information area in Browser, Class Browser, and editorsCOLNAME="3" VALIGN="TOP" MOREROWS="0"SelectCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Navigation area in BrowserCOLNAME="3" VALIGN="TOP" MOREROWS="0"OpenCOLNAME="1" VALIGN="TOP" MOREROWS="0"Press and hold left buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Editing area in diagram editorsCOLNAME="3" VALIGN="TOP" MOREROWS="0"Multiple selection or resize componentCOLNAME="1" VALIGN="TOP" MOREROWS="0"Shift+click left buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Browser and Class BrowserCOLNAME="3" VALIGN="TOP" MOREROWS="0"Multiple selectionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Control+click left buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Browser, Class Browser, and editorsCOLNAME="3" VALIGN="TOP" MOREROWS="0"Select or deselect a single objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"Double-click left buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Information area in Browser, display area in Class Browser, editing area in diagram editorsCOLNAME="3" VALIGN="TOP" MOREROWS="0"Open/EditCOLNAME="1" VALIGN="TOP" MOREROWS="0"UNIX: Click middle buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Text fields in windows and editing area in diagram editorsCOLNAME="3" VALIGN="TOP" MOREROWS="0"PasteCOLNAME="1" VALIGN="TOP" MOREROWS="0"Press and hold... UNIX: middle buttonWindows: left buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Editing area in diagram editorsCOLNAME="3" VALIGN="TOP" MOREROWS="0"MoveCOLNAME="1" VALIGN="TOP" MOREROWS="0"Press and hold... UNIX: middle buttonWindows: left buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Navigation and Information areas in Browser, display area in Customization editorsCOLNAME="3" VALIGN="TOP" MOREROWS="0"DragCOLNAME="1" VALIGN="TOP" MOREROWS="0"Click right buttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"Editing area in diagram editorsCOLNAME="3" VALIGN="TOP" MOREROWS="0"In empty space: UndoOn diagram objects: Display context menuWhen drawing connector: UndoCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Information area in BrowserCOLNAME="3" VALIGN="TOP" MOREROWS="0"Display context menuTERM1="context menu"Chapter 3 Working ID="35957"With DiagramsTYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideIntroductionThis chapter describes how to work with diagrams. It does not repeat all of the information provided in ObjectTeam Getting Started.For more informationThe following chapters provide additional diagram information:n REFID="35959" TYPE="XREF-TEXTCOPY"Printing describes how to print diagrams.n Chapter 4, Exploring Each Diagram, describes each type of diagram, its purpose, and the symbols it uses.n The ObjectTeam Customization Guide describes how to customize the symbols available in the control panel of each diagram editor.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38477" TYPE="XREF-TEXTCOPY"Creating and Opening Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12188" TYPE="XREF-TEXTCOPY"Saving and Deleting Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40261" TYPE="XREF-TEXTCOPY"Merging Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37746" TYPE="XREF-TEXTCOPY"Adding Comments to Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21332" TYPE="XREF-TEXTCOPY"Editing Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29698" TYPE="XREF-TEXTCOPY"Working With Items 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31ID="38477"Creating and Opening DiagramsIntroductionThis section describes how to create diagrams, how to open diagrams, and how to move easily from one diagram to another.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10910" TYPE="XREF-TEXTCOPY"Creating Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36237" TYPE="XREF-TEXTCOPY"Opening Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33913" TYPE="XREF-TEXTCOPY"Navigating Between Diagrams 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7ID="10910"Creating DiagramsPrerequisiteYou create a diagram at the system level. Before you can create a diagram, you must already have created a project hierarchy: a project, configuration version, phase version, and system version.For more informationObjectTeam Getting Started describes how to create a project hierarchy.Naming conventionsTERM1="diagram component" TERM2="naming"TERM1="naming conventions"Object names, including diagram names, have a maximum length of 80 characters and can include any alphanumeric character. When naming objects, it is recommended to choose names that conform to the operating system's rules for file names, since object names are often used as file names.Ways to createTERM1="diagram" TERM2="creating"TERM1="creating" TERM2="diagrams"You can create a diagram in the following ways:n From the Browser, as described in REFID="20667" TYPE="XREF-TEXTCOPY"How to create from the Browsern From a diagram editor, as described in REFID="40331" TYPE="XREF-TEXTCOPY"How to create from a diagram editorn From a diagram component, as described in REFID="33913" TYPE="XREF-TEXTCOPY"Navigating Between DiagramsID="20667"How to create from the BrowserΣ To create a diagram from the Browser:TERM1="New (File menu)" TERM2="diagram"1 Move to the System level.2 Select File | New .A cascading menu appears.3 From the submenu, click the type of diagram that you want to create.The New Diagram window appears.4 Type a name for the new diagram.5 Do you want to open a diagram editor for the new diagram?If yes, click Edit.The system creates the new diagram and opens an editor for it.If no, click OK.The system creates the new diagram.ID="40331"How to create from a diagram editorCreating a diagram from the diagram editor creates a diagram of the same type of the editor.Σ To create a diagram of the same type as the diagram editor:TERM1="Open By Name (File menu)" TERM2="create diagram"1 Select File | Open By Name.The Open By Name window appears.2 Type a name for the new diagram and click OK.ObjectTeam closes the current diagram, creates a new diagram, and displays the new diagram in the diagram editor.ID="36237"Opening DiagramsIntroductionWhen you open a diagram, it appears in a diagram editor.Ways to open a diagramTERM1="diagram" TERM2="opening"You can open a diagram in the following ways:n From the Browser, as described in REFID="18183" TYPE="XREF-TEXTCOPY"How to open from the Browsern From a diagram editor, as described in REFID="40234" TYPE="XREF-TEXTCOPY"How to open from a diagram editorn From the Class Browser (Class Diagrams only), as described in REFID="42628" TYPE="XREF-TEXTCOPY"How to open from the Class Browsern From a diagram component, as described in REFID="33913" TYPE="XREF-TEXTCOPY"Navigating Between Diagramsn Windows only: From a shortcut on the desktop, as described in REFID="28215" TYPE="XREF-TEXTCOPY"How to open from the Windows desktopID="18183"How to open from the BrowserΣ To open a diagram from the Browser, in the information area, double-click the name of the diagram.AlternativeYou can open a diagram in other ways:n In the information area, select a diagram, and then select File | Open or File | Edit, or right-click and select Open from the shortcut menu. TERM1="Open (File menu)" TERM2="diagram"TERM1="Edit (File menu)" TERM2="diagram"TERM1="Show (File menu)"n In the information area, select a diagram, and then select File | Show. ObjectTeam opens the diagram for read-only access.n In the information area, select a CDM, and then select File | Open or File | Edit. ObjectTeam opens the Class Diagram (CD) that contains the class.ID="40234"How to open from a diagram editorΣ To open a diagram of the same type as the current diagram editor:1 Select File | Open by Name.TERM1="Open By Name (File menu)" TERM2="open diagram"The Open By Name window appears. It lists all diagrams that can be opened in this type of diagram editor.2 Select the diagram that you want to open and click OK.ObjectTeam closes the current diagram, and then loads the selected diagram.Note: Selecting the name of the current diagram reloads the diagram. Any changes made since you last saved the diagram are lost.AlternativeDrag the icon of the diagram from the information area of the Browser into the drawing area of the current diagram editor. This only works if the diagram you are dragging is the same type as the current diagram editor.ID="28215"How to open from the Windows desktopWindowsThis feature is only available on Windows.You can create a desktop shortcut for a diagram. To create a shortcut, select a diagram in the information area of the Browser and select File | Create Shortcut.A shortcut with the name of the diagram is placed on the Windows desktopTo open the diagram, double-click on the shortcut on the desktop.ID="42628"How to open from the Class BrowserΣ To open a CD from the Class Browser:1 In the Class Browser, open a class.2 Select Utilities | Edit Class Diagram.If the open class appears in more than one CD, the system displays a list of all CDs in which the class appears. Select the CD that you want to open, then click OK. The CD appears.ID="33913"Navigating Between DiagramsIntroductionComponents in one diagram can often be defined further in another diagram of the same or different type. For example, a class in a Class Diagram can be further defined in a State Transition Diagram. To help you build related diagrams, ObjectTeam allows you to navigate between diagrams name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' that is, you create or open a new diagram from a component in the current diagram.How to navigate between diagramsΣ To navigate between diagrams:1 Double-click a component in the current diagram or select a component in the current diagram, and then select File | Open.Note: The component must have a name and you must have saved your diagram. If not, the option File | Open is unavailable.If the selected component refers to more than one item, the Items dialog box appears. - Click the item that you want to navigate from, and then click OK.The Select Operations window appears, as shown below. The options listed depend on what item you selected and what diagrams exist, as described in REFID="39004" TYPE="XREF-TEXTCOPY"Navigation options.FILENAME="00095.unk" ORIGFILE="pics/sel_oper.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"2 Select the desired option, and then click OK.ID="39004"Navigation optionsThe following table shows the navigation options that appear by default. You can customize these options, as described in the ObjectTeam Customization Guide.Each navigation option creates and opens a new diagram or opens an existing diagram.COLS="2"COLNAME="1" COLWIDTH="145p"COLNAME="2" COLWIDTH="303p"COLNAME="1" VALIGN="TOP" MOREROWS="0"optionCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Make decompositionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Create a diagram of the same type; the current diagram is closed.COLNAME="1" VALIGN="TOP" MOREROWS="0"Load diagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Open a diagram of the same type; the current diagram is closed.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create diagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Create a diagram of a different type.COLNAME="1" VALIGN="TOP" MOREROWS="0"Start editorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Open a diagram of a different type.Navigation pathsNote: The CD, COD, SD, STD, and UCD are described in Chapter 4, Exploring Each Diagram. The CCD, DFD, MGD and the navigation options to and from these diagrams are described in Appendix A, OMT Support.COLS="5"COLNAME="1" COLWIDTH="106p"COLNAME="2" COLWIDTH="69p"COLNAME="3" COLWIDTH="160p"COLNAME="4" COLWIDTH="70p"COLNAME="5" COLWIDTH="222p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Diagram ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Select ItemCOLNAME="3" VALIGN="TOP" MOREROWS="0"Select OperationCOLNAME="4" VALIGN="TOP" MOREROWS="0"Type Of DiagramCOLNAME="5" VALIGN="TOP" MOREROWS="0" Diagram NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"CD ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"class_nameclass_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram or Start editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"codCOLNAME="5" VALIGN="TOP" MOREROWS="0"class_name (assign cod_name)class_name : cod_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram or Start editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"etd (sd)COLNAME="5" VALIGN="TOP" MOREROWS="0"class_name (assign sd_name)class_name : sd_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"stdCOLNAME="5" VALIGN="TOP" MOREROWS="0"class_name : topclass_name : topCOLNAME="1" VALIGN="TOP" MOREROWS="0"(CD Attribute) COLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Same as CD ClassCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"replace class_name with attributeType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"(CD Operation)COLNAME="2" VALIGN="TOP" MOREROWS="0"Return typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Same as CD ClassCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"replace class_name with returnType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COD InstanceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Instance typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Create CD diagram orStart CD editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"instanceType_nameinstanceType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"SD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"etd (sd)COLNAME="5" VALIGN="TOP" MOREROWS="0"objectType_name (assign sd_name)objectType_name : sd_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cdCOLNAME="5" VALIGN="TOP" MOREROWS="0"objectType_nameobjectType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"stdCOLNAME="5" VALIGN="TOP" MOREROWS="0"objectType_name : topobjectType_name : topCOLNAME="1" VALIGN="TOP" MOREROWS="0"STD State With Internal ActionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event / ActionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"stdCOLNAME="5" VALIGN="TOP" MOREROWS="0"std_name : action_namestd_name : action_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCD Use CaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use Case nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"ucdCOLNAME="5" VALIGN="TOP" MOREROWS="0"useCase_nameuseCase_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram andStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"codCOLNAME="5" VALIGN="TOP" MOREROWS="0"useCase_name (assign cod_name)useCase_name: cod_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram andStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"etd (sd)COLNAME="5" VALIGN="TOP" MOREROWS="0"useCase_name (assign sd_name)useCase_name : sd_nameExplanation of the columns:n Diagram Object: the object that you select in a diagram to navigate from with File | Open.n Select Item: the item that you select in the Select Item dialog box.n Select Operation: the operations that appear in the Select Operation dialog box. n Of type: the type of the diagram to be created/opened.n Diagram Name: See REFID="34996" TYPE="XREF-TEXTCOPY"Diagram Name below.n System: (not mentioned in the table but displayed in the Select Operation dialog box). See REFID="15252" TYPE="XREF-TEXTCOPY"Systems you can navigate to below.ID="34996"Diagram Name The diagram names are generated from the component name from which the navigation was started. - When you create a CD or UCD, the name of the component is assigned to the diagram name. - When you create a COD, or SD, the name of the component is assigned to the qualifier, and a dialog box appears in which you can assign the diagram name.- When you create an STD, the name of the component is assigned to the qualifier. If the navigation process was started from a CD or SD, the STD diagram name is given the name top.The names of the new diagrams are generated from the component name. These names remain linked to the original component. If you change the name of the component in the original diagram, ObjectTeam changes the name of the generated diagram (or system).ID="15252"Systems you can navigate toThe System column in the Select Operation dialog box displays the name of the system in which the create or open action will take place. If the item you are navigating from is already defined in that system, an asterisk is placed in front of the system name.When selecting an open or create operation, you can determine in which system the operation will be carried out by checking the value of the system field:COLS="3"COLNAME="1" COLWIDTH="82p"COLNAME="2" COLWIDTH="112p"COLNAME="3" COLWIDTH="252p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AsteriskCOLNAME="2" VALIGN="TOP" MOREROWS="0"System COLNAME="3" VALIGN="TOP" MOREROWS="0"SituationCOLNAME="1" VALIGN="TOP" MOREROWS="0"yesCOLNAME="2" VALIGN="TOP" MOREROWS="0"current system_nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"The item is defined in the current system. The operation will be carried out in this system.COLNAME="1" VALIGN="TOP" MOREROWS="0"yesCOLNAME="2" VALIGN="TOP" MOREROWS="0"other system_nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"The item is defined in another system. The operation will be carried out in the other system.COLNAME="1" VALIGN="TOP" MOREROWS="0"noCOLNAME="2" VALIGN="TOP" MOREROWS="0"current system_nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Either of the following:n The item is not defined anywhere. For example, you have created a class without a CDM or properties. n The class is defined in another system and referenced in this system. In both cases, the operation will be carried out in this system.COLNAME="1" VALIGN="TOP" MOREROWS="0"noCOLNAME="2" VALIGN="TOP" MOREROWS="0"other system_nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"The item is defined in the current system but is referenced in another system. The operation will be carried out in the other system.ID="12188"Saving and Deleting DiagramsIntroductionThis section describes how to save, close, and delete diagrams.How to save a diagramΣ To save a diagram, select File | Save.TERM1="diagram" TERM2="saving"TERM1="Save (File menu)"How to close and save a diagramΣ To close a diagram, select File | Exit.TERM1="diagram" TERM2="exiting"TERM1="Exit (File menu)"ObjectTeam prompts you to save any work done since the last time you saved the diagram.How to delete a diagramΣ To delete a diagram:TERM1="diagram" TERM2="deleting"TERM1="deleting" TERM2="diagrams"TERM1="Delete (File menu)"1 In the Information area of the Browser, select the diagram that you want to delete.2 Select File | Delete.An information message appears confirming the delete operation.3 Click OK to delete the diagram. Deleting diagram itemsWhen you delete a diagram, you delete only the diagram file. Items referenced in the diagram must be deleted separately, as described in REFID="21274" TYPE="XREF-TEXTCOPY"Removing and Moving Items.ID="40261"Merging DiagramsIntroductionUse File | Read to merge one diagram into another diagram of the same type. Typically, you use this feature to copy diagram information into a new diagram.What is mergedWhen you merge two diagrams, you merge their graphical components. The semantic items underlying the diagrams are not affected.Diagrams overlie one anotherWhen you select File | Read, ObjectTeam opens a second diagram in the diagram editor without first closing the current diagram. The second diagram overlies the first. If the first diagram is new, the merged diagram contains the contents of the second diagram. If the first diagram contains objects, the merged diagram contains the contents of both diagrams. Use the diagram layout features to make the merged diagram legible.How to merge diagramsTERM1="diagram" TERM2="merging"TERM1="merging diagrams"TERM1="copying" TERM2="diagrams"TERM1="Read (File menu)"Σ To merge two diagrams:1 Open the diagram into which you want to merge the second diagram.The diagram editor appears.2 Select File | Read.The Read Diagram window appears.3 Select the diagram that you want to merge into the open diagram.The selected diagram overlies the open diagram.4 If necessary, use the diagram layout features, as described in REFID="17519" TYPE="XREF-TEXTCOPY"Modifying Diagram Layout, to make the merged diagram legible.ID="37746"Adding Comments to DiagramsIntroductionThe Free Text property of the file version associates a comment with the diagram. Two ways to specifyYou can specify the Free Text property for a file version from the Browser or a diagram editor.How to specify from the BrowserΣ To specify the Free Text property from the Browser:1 Move to the system level.2 From the information area, select the file version whose property you want to set.3 Select File | Properties | Edit.The Edit Properties dialog box appears.4 Select the diagram from the list box on the left.The Free Text property appears on the right.5 Type the text, and then click OK.How to specify the Free Text property Σ To edit the Free Text property from the diagram editor:TERM1="Free Text property" TERM2="diagrams"TERM1="diagram" TERM2="Free Text property"TERM1="Properties (File menu)" TERM2="Edit"1 Open the file version of the diagram whose property you want to set.2 Select File | Properties | Edit.The Edit Properties dialog box appears.3 Select the file name from the list box on the left.The Free Text property appears on the right.4 Type the text, and then click OK.ID="21332"Editing DiagramsIntroductionThis section describes editing operations that are common to all diagram editors. TerminologyThis section uses the following terms to refer to the different kinds of symbols that you can draw in a diagram:n Nodes are symbols that can stand by themselves, such as classes, subjects, states, and events.TERM1="node" TERM2="definition of"n Connectors are symbols that must be attached to a node, such as associations and messages.TERM1="connector" TERM2="definition of"n Vertices are angles in connector lines.TERM1="vertex" TERM2="definition of"ModesTERM1="select symbol, diagram control panel"Many diagram editing operations begin by selecting a symbol from the diagram control panel. When you click a symbol button, you enter editing mode. To exit from the mode, click the Select button.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16653" TYPE="XREF-TEXTCOPY"Working With the Diagram Window 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20264" TYPE="XREF-TEXTCOPY"Creating and Deleting Components 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32131" TYPE="XREF-TEXTCOPY"Selecting Components 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33768" TYPE="XREF-TEXTCOPY"Copying and Replacing Components 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36919" TYPE="XREF-TEXTCOPY"Editing Labels 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32373" TYPE="XREF-TEXTCOPY"Specifying Label Syntax 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17519" TYPE="XREF-TEXTCOPY"Modifying Diagram Layout 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35237" TYPE="XREF-TEXTCOPY"Modifying Diagram Appearance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38422" TYPE="XREF-TEXTCOPY"Undoing Diagram Edits 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'29COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27377" TYPE="XREF-TEXTCOPY"Adding Notes to a Diagram 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'30ID="16653"Working With the Diagram WindowIntroductionThis section describes operations that can help you work more effectively in any diagram.How to enlarge a diagram TERM1="diagram" TERM2="zoom in"TERM1="Zoom In (Options menu)"Σ To enlarge a diagram in the window, select Options | Zoom In or Click the magnify icon on the toolbar.FILENAME="00096.unk" ORIGFILE="pics/b_zumin.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"How to reduce a diagram TERM1="diagram" TERM2="zoom out"TERM1="Zoom Out (Options menu)"Σ To reduce a diagram in the window, select Options | Zoom Out or Click the reduce icon on the toolbar.FILENAME="00097.unk" ORIGFILE="pics/b_zumout.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"How to center a diagramTERM1="diagram" TERM2="center in window"TERM1="Center (Edit menu)"Σ To center a diagram within the window, select Edit | Center.How to refresh the diagramTERM1="diagram" TERM2="redrawing"TERM1="Redraw (Options menu)"Occasionally, you may see unwanted elements in the editing area, such as stray pixels left by other drawing tools. To remove them, refresh the diagram.Σ To refresh the diagram, select Options | Redraw.Pointer focus policyTERM1="Pointer Focus (Options menu)"TERM1="diagram" TERM2="editing focus"A text field must have the editing focus before you can edit the text in the field.n In Windows, you generally move the editing focus to a text field by clicking the field. ObjectTeam works this way when Options | Pointer Focus is not selected. This is the default behavior.n On UNIX systems, you generally move the editing focus to a text field by moving the pointer to the field; clicking the field is not necessary, but the pointer must remain on the field. ObjectTeam works this way when the Options | Pointer Focus menu item is selected.Note: In a diagram, the label of every component is a text field. To edit the diagrams easily, it is important to specify the behavior that you are most comfortable with.ID="20264"Creating and Deleting ComponentsIntroductionThis section describes how to create and delete nodes, connectors, and vertices.Naming conventionsYou can specify the rules for component names, as described in REFID="32373" TYPE="XREF-TEXTCOPY"Specifying Label Syntax.ID="20977"How to create a nodeTERM1="node" TERM2="creating"TERM1="creating" TERM2="diagram components"TERM1="diagram component" TERM2="creating"Σ To create a node, such as a class, use case, or note:1 Click the appropriate symbol button in the control panel.ObjectTeam highlights the symbol and you enter Insert mode.2 Click in the diagram where you want to place the node.ObjectTeam inserts the node at that location.Tip: If you create a node by mistake, right-click to remove it. (This action is the same as selecting Edit | Undo.)3 To enter additional nodes, repeat step 2.4 To exit Insert mode, click the Select button.ID="18141"How to create a connectorTERM1="connector" TERM2="creating"A connector connects at least two nodes. Therefore, a diagram must include at least two nodes before you can create a connector.Σ To create a connector, such as an association, message, flow, or event:1 Click the appropriate symbol button in the control panel.ObjectTeam highlights the symbol and you enter Insert mode.2 Click the first node, and then the second node.ObjectTeam draws the connector between the two nodes.Note: If you click the first node, and then click in the background, ObjectTeam creates a vertex. You can create as many vertices as you want before clicking the second node to complete the connector. (If you create a vertex by mistake, right-click to remove it. This action is the same as selecting Edit | Undo.)3 To enter additional connectors, return to step 2.4 To exit Insert mode, click the Select button.Complex connectorsGeneralizations and n-ary associations connect more than two nodes. The description of these connectors in Chapter 4, Exploring Each Diagram, explains how to create them.How to create a vertexTERM1="vertex" TERM2="creating"Adding vertices to connector lines allows you to change the routing of the line and improve the appearance of the diagram.Σ To create a vertex:1 Select the Vertex symbol from the control panel.ObjectTeam highlights the symbol and you enter Insert mode.2 Move the cursor over any point on a connector line.3 Drag the point to a new location.ObjectTeam creates the vertex.4 To exit Insert mode, click the Select button.How to delete a node, connector, or vertexTERM1="node" TERM2="deleting"TERM1="connector" TERM2="deleting"TERM1="vertex" TERM2="deleting"TERM1="diagram component" TERM2="deleting"TERM1="deleting" TERM2="diagram components"Σ To delete a node, connector, or vertex:1 Select the object.2 Select Edit | Delete.ObjectTeam removes the object from the diagram. It is not removed from the database until you save the diagram. ID="32131"Selecting ComponentsIntroductionTo carry out certain actions on nodes, connectors, or vertices, you must select them first.TERM1="diagram component" TERM2="selecting"TERM1="selecting" TERM2="diagram object"How to select an objectΣ To select a single object:1 If you are in Insert mode, click the Select Button.2 Click the object you want to select.How to select additional objects Σ To select additional objects:1 Press and hold the Control key.2 Click the objects that you want to select.AlternativePress and hold the CTRL key, and then drag the pointer over the objects that you want to select.Note: The alternative method of selecting multiple objects toggles the selection status of objects; selected symbols are deselected, and deselected symbols are selected.ID="33768"Copying and Replacing ComponentsIntroductionThis section describes how to copy nodes and how to replace one component with another.TERM1="diagram component" TERM2="copying"TERM1="copying" TERM2="diagram components"TERM1="replacing diagram components"TERM1="diagram component" TERM2="replacing"PurposeGenerally, you copy and replace components for the following reasons:n To create new diagram components and items. In an ObjectTeam diagram, copying a node creates a second copy of the diagram component. When you edit the label of the second diagram component, as described in REFID="36919" TYPE="XREF-TEXTCOPY"Editing Labels, you create a new item in the repository. This is a convenient way to create new items that are similar to existing items.n To copy diagram components to another tool. If you are using Microsoft Windows, you can copy diagram components to OLE-enabled tools, such as Microsoft Word. This is a convenient way to include diagrams in documents.n To replace one diagram component with another. Replacing components is a convenient alternative to deleting and reentering them. It is particularly useful when you need to change the multiplicity of an association or the type of a generalization.How to copy nodes within a diagramΣ To copy one or more nodes within a diagram:1 Select the nodes.2 Select Edit | Duplicate.TERM1="Duplicate (Edit menu)"When you move the pointer back to the editing area, the nodes appear under the pointer.3 Click in the diagram where you want to place the nodes.Note: You cannot move nodes between diagrams, but you can merge diagrams, as described in REFID="40261" TYPE="XREF-TEXTCOPY"Merging Diagrams.How to copy diagram components to another toolWindowsThis feature is only available on Windows.Σ To copy one or more diagram components to another tool:1 Select the diagram components that you want to copy.2 Select Edit | Copy.TERM1="Copy (Edit menu)" TERM2="diagram components"3 In the other OLE-enabled tool, select Edit | Paste.How to replace a componentΣ To replace a component:1 Select the component that you want to replace. For example, select a mandatory-mandatory association.Note: Only one object can be selected for replacement at a time.2 From the control panel, select the symbol that you want to use in place of that component. For example, in the control panel, select the Association symbol and the mandatory and optional multiplicity selectors.3 Select Edit | Replace.TERM1="Replace (Edit menu)"ObjectTeam replaces the selected component with the new symbol. If the attempted replacement conflicts with the diagram syntax, ObjectTeam displays an error message and prevents the replacement.ID="36919"Editing LabelsIntroductionTERM1="editing" TERM2="diagram text"TERM1="diagram component" TERM2="editing text"Labels are the names that you give to diagram components. Some labels appear inside the component they name, others appear near the component they name.Editing a label creates a new itemDiagram components are usually associated with items in the repository. Editing the label of a diagram component creates a new item. To change the name of an item and its associated diagram component, use Edit | Change Name, as described in REFID="42724" TYPE="XREF-TEXTCOPY"Viewing and Renaming Items.How to edit a labelTERM1="label" TERM2="editing"Σ To edit a label:1 Click the text of the label.The Pointer changes to an I bar, indicating that you can begin editing. If you are entering text in a node, such as a class or note, and the label grows wider than the node, then the node expands to accommodate the text.2 Edit the text using the following keys:- Arrow keys to reposition the cursor within the text- Delete to delete characters after the cursor- Backspace to delete characters before the cursor- Carriage return to create a multiline label3 Click in the background of the diagram to finish editing.To copy and paste textTERM1="Copy (Edit menu)" TERM2="text"TERM1="Cut (Edit menu)" TERM2="text"TERM1="Paste (Edit menu)" TERM2="text"You can copy and paste text between labels and the text fields of any open window.Σ To copy and paste text:1 Select the text that you want to copy.2 Select Edit | Copy (or Edit | Cut to delete the text).3 Click where you want to place the text.The pointer changes to an I bar, indicating that you can begin editing.4 Select Edit | Paste.UNIXAlternatively, you can select the text that you want to copy, and then click the middle mouse button where you want to place the text.ID="32373"Specifying Label SyntaxIntroductionTERM1="label" TERM2="specifying syntax for"TERM1="diagram component" TERM2="specifying label syntax for"Labels are the names that you give to diagram components. You can specify a formal syntax for labels. Text is checked for this syntax as soon as it is entered and is refused if it does not meet the rules. If no syntax has been specified, any text is accepted.Types of syntaxEach diagram has different symbols, so the syntax you can specify for each diagram is different. Label syntax is not available in the Sequence Diagram editor. COLS="3"COLNAME="1" COLWIDTH="72p"COLNAME="2" COLWIDTH="297p"COLNAME="3" COLWIDTH="81p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"SymbolCOLNAME="3" VALIGN="TOP" MOREROWS="0"SyntaxCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Aggregation, association, class, container class, n-ary association, qualified aggregation, qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"QualifierCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PropagationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ProcessCOLNAME="1" VALIGN="TOP" MOREROWS="0"CODCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actor, n-ary link, link, aggregation link, qualified link, qualified aggregation linkCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Connector role labelCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"State, start state, superstateCOLNAME="3" VALIGN="TOP" MOREROWS="0"StateCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actor, use caseCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Communication associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"ProcessOMT diagramsSee Appendix A, OMT Support, for more information about the OMT diagrams.COLS="3"COLNAME="1" COLWIDTH="72p"COLNAME="2" COLWIDTH="297p"COLNAME="3" COLWIDTH="81p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"SymbolCOLNAME="3" VALIGN="TOP" MOREROWS="0"SyntaxCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actor, class, container class, subjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Communication messageCOLNAME="3" VALIGN="TOP" MOREROWS="0"ProcessCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFDCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActorCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Data flow, data store, update flowCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"ProcessCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Message definitionCOLNAME="3" VALIGN="TOP" MOREROWS="0"ProcessHow to specify label syntaxΣ To specify label syntax:1 Within a diagram, select Options | Syntax.The Syntax dialog box appears.FILENAME="00098.unk" ORIGFILE="pics/syntax.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"2 Specify the syntax for each symbol group.Syntax for specifying syntaxUse the following syntax to specify the label syntax:length_of_name:[initial_character][following_characters]whereinitial_character and following_characters can be specified as a list of characters or a range of characters. To specify a range of characters, use the syntax:character-character To specify a character that is used in the syntax (- [ ] :), place a backslash before it.ExamplesThe following table shows syntax examples.COLS="2"COLNAME="1" COLWIDTH="135p"COLNAME="2" COLWIDTH="315p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Label SyntaxCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"0:[][]COLNAME="2" VALIGN="TOP" MOREROWS="0"The 0 indicates that there is no maximum length for the name; there are no restrictions on first or subsequent characters. This is the default syntax.COLNAME="1" VALIGN="TOP" MOREROWS="0"12:[A-Z][a-z0-9]COLNAME="2" VALIGN="TOP" MOREROWS="0"The maximum length of the name is 12 characters; the first character must be a capital letter; subsequent characters can be any alphanumeric character.COLNAME="1" VALIGN="TOP" MOREROWS="0"4:[abc][a-e]COLNAME="2" VALIGN="TOP" MOREROWS="0"The maximum length of the name is 4 characters; the first character must be lowercase a, b, or c; subsequent characters can be lowercase a to e.COLNAME="1" VALIGN="TOP" MOREROWS="0"4:[*-~][A-Z$\:]COLNAME="2" VALIGN="TOP" MOREROWS="0"The maximum length of the object name is 4 characters; the first character can be any symbol between ASCII value 052 and 176; subsequent characters can be uppercase letters A to Z, the dollar symbol, or the colon.ID="17519"Modifying Diagram LayoutIntroductionThis section describes how to set the size of the diagram grid, how to move objects, and how to resize them.Diagram gridTERM1="diagram" TERM2="grid"The ObjectTeam diagram editors have a hidden grid that aligns objects. Symbols that you insert, copy or move, snap to this grid, ensuring horizontal and vertical alignment of symbols and producing a neat diagram. The size of the grid squares determines the distance between snap positions. The smaller the squares, the more precisely the objects can be positioned.How to specify grid sizeTERM1="Grid (Options menu)"Σ To specify the grid size:1 Select Options | Grid.The Grid dialog box appears.FILENAME="00099.unk" ORIGFILE="pics/grid.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"2 Select a grid setting, and then click OK. Possible values range from 1 to 64. The smaller the number, the smaller the grid size. The default is 16.How to move nodesTERM1="node" TERM2="moving"TERM1="diagram component" TERM2="moving"TERM1="Move (Edit menu)"Σ To move one or more nodes:1 Select the nodes.2 Select Edit | Move.The center point of the selected nodes jumps to the pointer position. All connectors attached to the nodes also move.3 Click where you want to place the nodes.Windows alternativeDrag the node to the new position. You cannot use this method if more than one node is selected.UNIX alternativeDrag the selected nodes to the new position.How to move a connectorTERM1="connector" TERM2="moving"Sometimes you need to move the end of a connector from one symbol to another one. Σ To move a connector:1 In Select mode, click the connector at the end you want to move.Selection handles appear at either end of the connector.2 Drag the connector to the desired position.The end of the connector follows the pointer. You can release the left mouse button while you drag the connector.3 Click the left mouse button in the new destination symbol. The connector is reattached. How to move a vertexTERM1="vertex" TERM2="moving"Σ To move a vertex:1 Click the vertex. Selection handles appear only around the vertex. Be sure and select the vertex and not the entire connector.2 Drag the vertex to the desired position.ID="31388"How to resize a nodeTERM1="node" TERM2="resizing"TERM1="diagram component" TERM2="resizing"A node can be enlarged or reduced, and, except for circles, its proportions changed.Σ To resize a node:1 Select the node.Selection handles appear around the node.2 Place the pointer on one of the selection handles.The pointer changes to a resize cursor.FILENAME="00100.tif" ORIGSEQ="3" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"3 Move the handle to change the size of the node.ID="35237"Modifying Diagram AppearanceIntroductionThis section describes how to modify the colors and fonts used in diagram editors.One selection affects all editorsChanging the colors and fonts in any diagram editor changes the colors and fonts for all diagram editors.How to change diagram colorsTERM1="diagram" TERM2="color in"TERM1="changing" TERM2="diagram colors"TERM1="changing" TERM2="diagram fonts"TERM1="Color (Options menu)"TERM1="foreground color"TERM1="background color"TERM1="selection color"Σ To change the colors used in the diagram editors:1 Select Options | Color.A submenu appears.2 Select the color that you want to change: - Foreground changes the color of the symbol outlines.- Background changes the color of the window background.- Selection changes the color of the selection handles.The Color dialog box appears. 3 Select the desired color, and then click OK.ID="12688"How to change diagram fontTERM1="Font (Options menu)" TERM2="diagram"TERM1="bold font"TERM1="normal font"sΣ To change the font used in the diagram editors:1 Select Options | Font.A submenu appears.2 Select the font that you want to change: - Bold changes the font used for class names in CDs, initiators in SDs, state activities and classes in STDs, and actors and use cases in UCDs.TERM1="class" TERM2="font for"TERM1="actor" TERM2="font for"TERM1="data store" TERM2="font for"TERM1="initiator" TERM2="font for"TERM1="use case" TERM2="font for"Note: Bold also changes the font used for actors and data stores in DFDs. See Appendix A, OMT Support, for more information about DFDs.- Normal changes the font used everywhere else, except in Notes. - Annotation changes the font used for Notes. If not explicitly set, the font used is a smaller version of the Normal font.The font dialog box appears.3 Select a font family, style, and size, and then click OK.ID="38422"Undoing Diagram EditsIntroductionYou can undo the most recent graphical diagram edit or revert to the last saved version of the diagram. When you revert to the last saved version, you lose all edits made to the diagram since the last time you saved, except for changes that are made to defined items (see REFID="29698" TYPE="XREF-TEXTCOPY"Working With Items).How to undo the most recent changeTERM1="diagram" TERM2="undoing edits"TERM1="Undo (Edit menu)"Σ To undo the most recent change to the diagram, right-click anywhere in the drawing area.AlternativeSelect Edit | Undo.How to revert to the last saved versionTERM1="Reload (File menu)"Σ To revert to the last saved version of the diagram, select File | Reload.The system closes the current diagram and opens the last saved version of the diagram. Any work done since the last time you saved the diagram is lost except for changes made to defined items.ID="27377"Adding Notes to a DiagramIntroductionOne symbol is common to every diagram editor: the Note.FILENAME="00101.tif" ORIGSEQ="14" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"The Note symbol lets you attach a comment to any component in a diagram. A Note can be of unlimited length.Unlike other nodes, Notes do not have properties. They are therefore ignored during diagram checking and do not appear in reports.ID="42581"Working with NotesNotes behave like any other node. For details on how to insert, delete, move, and resize nodes, see REFID="21332" TYPE="XREF-TEXTCOPY"Editing Diagrams.Changing the Notes fontNotes are displayed in their own font. For details on how to set the font used in Notes, see REFID="12688" TYPE="XREF-TEXTCOPY"How to change diagram fonts.Connecting Notes to other componentsA Note is connected to other components in a diagram by the Note connector. FILENAME="00102.tif" ORIGSEQ="16" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"A Note can be connected to any component other than another Note or Note connector. A single Note can be connected to more than one component.For details on how to insert connectors in diagrams, see REFID="18141" TYPE="XREF-TEXTCOPY"How to create a connector.Free textUse Notes to clarify or highlight elements within a diagram. If you want to attach more extensive textual descriptions to a component, use the Free Text property. For more details on free text, see REFID="22035" TYPE="XREF-TEXTCOPY"Specifying Properties.ID="29698"Working With ItemsIntroductionTERM1="item" TERM2="definition of"TERM1="diagram component" TERM2="definition of"When you draw a symbol in a diagram editor, you create a component, which is a graphical element in the repository. When you specify property values for the component, you create an item, which is a semantic element in the repository. Every element in a project is either an item or an organizational unit (a configuration, phase, system, file, or group). Items are always part of a system or a file.Identified by name and typeTERM1="item" TERM2="types of"TERM1="cl, item type"TERM1="de, item type"TERM1="et, item type"TERM1="pe, item type"TERM1="st, item type"An item is identified by its name and its type. n Item name. An item name can be up to 80 characters in length. All printable ISO-Latin-1 characters, except space, tab, newline, slash, colon, and comma are allowed in item names.n Item type. The type of an item is determined by the symbol used to create it. The relationship between symbol and type is fixed internally in ObjectTeam and cannot be changed. The types used in ObjectTeam are as follows:COLS="2"COLNAME="1" COLWIDTH="72p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"clCOLNAME="2" VALIGN="TOP" MOREROWS="0"classCOLNAME="1" VALIGN="TOP" MOREROWS="0"deCOLNAME="2" VALIGN="TOP" MOREROWS="0"data elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"etCOLNAME="2" VALIGN="TOP" MOREROWS="0"event traceCOLNAME="1" VALIGN="TOP" MOREROWS="0"peCOLNAME="2" VALIGN="TOP" MOREROWS="0"process elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"rsCOLNAME="2" VALIGN="TOP" MOREROWS="0"reserved wordCOLNAME="1" VALIGN="TOP" MOREROWS="0"stCOLNAME="2" VALIGN="TOP" MOREROWS="0"stateAppendix B, Type and Scope of Diagram Components, lists the type of each diagram component.Purpose of itemsItems allow different graphical elements to refer to the same semantic element.ExampleWhen you create the Rental class in a CD, you create an item with the name Rental and type cl. By default, ObjectTeam associates this item with any other Rental class that you create in any other diagram in the same Phase.Qualified itemsTERM1="qualified item" TERM2="definition of"TERM1="item" TERM2="qualified"Qualified items belong to another item. Operations and classes, for example, are both items. Because an operation always belongs to a class, an operation is a qualified item. The name of a qualified item consists of the owner item name and the qualified item name. For example, the getName operation on the Member class is named Member.getName. The operation getName may appear in several classes; however, because getName is a qualified item, each operation is unique to the class in which getName appears. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26920" TYPE="XREF-TEXTCOPY"Defining Items 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'33COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42724" TYPE="XREF-TEXTCOPY"Viewing and Renaming Items 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'34COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22035" TYPE="XREF-TEXTCOPY"Specifying Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'37COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18867" TYPE="XREF-TEXTCOPY"Specifying Scope 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'40COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21274" TYPE="XREF-TEXTCOPY"Removing and Moving Items 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'44ID="26920"Defining ItemsIntroductionA graphical element in a diagram editor is a component. A semantic element in the repository is an item. In a complete model, each component is linked to an item.How to define an itemYou can always define an item by specifying its properties.Σ To define an item by specifying its properties:1 Open a diagram, for example, a Sequence Diagram.2 Add a component to the diagram; for example, add an object to the Sequence Diagram.3 Select the component; for example, select the object.4 Select Item | Edit Properties.The Edit Properties dialog box appears.5 In the left pane of the dialog box, select the item.The item properties appear in the right pane.FILENAME="00103.unk" ORIGFILE="pics/defitem.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"6 Click the Define Item button.Note: If the item exists, the Define Item button is dimmed.Alternative for classesWhen you create a class in a CD, you often specify its attributes and operations before specifying its properties. When you add an attribute or operation to a class symbol, ObjectTeam defines the class item. Therefore, you rarely use the previous procedure to define class items.ID="42724"Viewing and Renaming ItemsIntroductionThis section describes how to view a list of all items in a system and how to rename an item.ID="29466"Ways to view itemsYou can view items using the Browser or reports:n In the Browser at the system level, the pseudo object <defined items> lists all items that have scope phaseDef, phaseRef, or System. This section describes how to view items in the Browser.n The report On Items and Properties can be run at any level in the Browser or from a diagram editor. The report displays all items (including those with scope File) visible at the selected level. See REFID="27975" TYPE="XREF-TEXTCOPY"Reporting in ObjectTeam for more information. How to view defined itemsTERM1="item" TERM2="displaying"Σ To view defined items:1 In the navigation area of the Browser, unfold the system that you are interested in.The pseudo object <defined items> appears as one of the child objects of the selected system.2 Open the pseudo object <defined items>.The defined items appear in the information area.FILENAME="00104.unk" ORIGFILE="pics/viewitem.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"ID="38661"Two ways to renameTERM1="item" TERM2="renaming"TERM1="renaming" TERM2="items"You can rename items from the Browser or diagram editor.Warning: Editing the label of a component creates a new item. It does not change the name of the item. To change the name of an item, you must use one of the following procedures.How to rename an item from the BrowserTERM1="Change Name (File menu)" TERM2="of item"Σ To rename a diagram item from the Browser:1 In the navigation area of the Browser, unfold the system that you are interested in.The pseudo object <defined items> appears as one of the child objects of the selected system.2 Open the pseudo object <defined items>.The defined items appear in the information area.3 In the information area, select the item that you want to rename.4 Select File | Change | Name.The Change Name dialog appears.5 Type the new name and click OK.ObjectTeam changes the item name.Note: If an item with the name you specify exists, a warning dialog box appears. - Click Overwrite to replace the existing item with the current item.- Click Refer to replace the current item with the existing item.ID="21701"How to rename an item from the diagram editorTERM1="Change Name (Edit menu)" TERM2="of item"Note: When you rename an item, ObjectTeam updates the repository immediately. The new item name remains even when you close the diagram without saving changes.Σ To rename an item from a diagram editor:1 Open the diagram in which the item is defined.2 Select the object whose name you want to change or in which the object whose name you want to change appears.3 Select Edit | Change Name.Note: If more than one item is associated with the selected object, the Items dialog box appears, as shown below. Select the item and click OK.FILENAME="00105.unk" ORIGFILE="pics/items_db.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"The Change Name dialog box appears.4 Type the new name and click on OK.ObjectTeam changes the item name.Note: If an item with the name you specify exists, a warning dialog box appears. - Click Overwrite to replace the existing item with the current item.- Click Refer to replace the current item with the existing item.ID="22035"Specifying PropertiesIntroductionYou describe items and components by specifying their properties.Implicit and explicit propertiesYou can specify two kinds of properties:n Specify implicit properties through the diagrams. ObjectTeam creates these properties when you add components to a diagram and stores them in the diagram file. For example, in the CD, you use the multiplicity specifications at either end of an association to specify the multiplicity of the association. n Specify explicit properties through the Edit Properties dialog box, as described in REFID="26965" TYPE="XREF-TEXTCOPY"How to specify explicit properties. Explicit properties are either item properties or component properties, as described in REFID="14241" TYPE="XREF-TEXTCOPY"Item properties.ID="14241"Item propertiesItem properties are stored with the item. When you change item properties, ObjectTeam updates the repository immediately. The new values remain even when you close the diagram without saving changes. The following table briefly describes the item properties available.COLS="4"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="145p"COLNAME="3" COLWIDTH="94p"COLNAME="4" COLWIDTH="262p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"property (object Type)COLNAME="3" VALIGN="TOP" MOREROWS="0"Short nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"All diagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Free Text (all objects)COLNAME="3" VALIGN="TOP" MOREROWS="0"freeTextCOLNAME="4" VALIGN="TOP" MOREROWS="0"Contains unrestricted text about the object, like comments, motivations, and revision data. COLNAME="1" VALIGN="TOP" MOREROWS="0"Class DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data Type (qualifier)COLNAME="3" VALIGN="TOP" MOREROWS="0"data_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the data type of the qualifier for a qualified association.COLNAME="1" VALIGN="TOP" MOREROWS="0"Use Case DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actor Type (actor)COLNAME="3" VALIGN="TOP" MOREROWS="0"actor_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies system as the Actor Type if the corresponding use case actor is a system actor. The default Actor Type of a use case actor is user. COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Alternative Course of Action (use case)COLNAME="3" VALIGN="TOP" MOREROWS="0"alternateActCOLNAME="4" VALIGN="TOP" MOREROWS="0"Contains unrestricted text that describes the corresponding use case. Use this property to describe variants on the basic use case scenario, for example, the sequence of transactions that occurs in the case of an error. COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Basic Course of Action (use case)COLNAME="3" VALIGN="TOP" MOREROWS="0"basicActCOLNAME="4" VALIGN="TOP" MOREROWS="0"Contains unrestricted text that describes the corresponding use case. Use this property to describe the most common or important sequence of transactions for the use case. COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Classification (use case)COLNAME="3" VALIGN="TOP" MOREROWS="0"classificationCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the value secondary if the corresponding use case describes the system's behavior under exceptional conditions.The default value primary indicates main line functions of the system. COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Postcondition (use case)COLNAME="3" VALIGN="TOP" MOREROWS="0"postcondCOLNAME="4" VALIGN="TOP" MOREROWS="0"Contains unrestricted text that describes the corresponding use case. Use this property to describe the state of the system after the use case is performed. COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Precondition (use case)COLNAME="3" VALIGN="TOP" MOREROWS="0"precondCOLNAME="4" VALIGN="TOP" MOREROWS="0"Contains unrestricted text that describes the corresponding use case. Use this property to describe the conditions that must be met before the use case can be performed. Component propertiesComponent properties are stored in the diagram file. Changes to component properties are saved when you save your diagram changes. The following table briefly describes the component properties available.COLS="4"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="126p"COLNAME="3" COLWIDTH="105p"COLNAME="4" COLWIDTH="256p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"property (object Type)COLNAME="3" VALIGN="TOP" MOREROWS="0"Short nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Sequence DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Interaction Type (initiator, object)COLNAME="3" VALIGN="TOP" MOREROWS="0"interact_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the type of object: entity (a persistent object that survives the program execution), interface (an object with external I/O, that is an object that is activated from outside the system), or control (any other type of object).COLNAME="1" VALIGN="TOP" MOREROWS="0"Use Case DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Initiator (actor)COLNAME="3" VALIGN="TOP" MOREROWS="0"initiatorCOLNAME="4" VALIGN="TOP" MOREROWS="0"When turned on, this defines the corresponding use case actor as initiator for a use case.By default, this property is turned off. Additional propertiesCode and document generationSeveral additional explicit properties are used for code and document generation. For information about these properties, see the ObjectTeam Code Generation Guide for your code generator and the ObjectTeam Document Generation Guide.TERM1="property" TERM2="user-defined"TERM1="user-defined property"User-defined propertiesAll explicit properties are defined in two customization files: proplocs.proplocs and propdefs.propdefs. These files can be edited and saved on any level in the repository. For more information about defining your own properties, see the ObjectTeam Customization Guide.ID="26965"How to specify explicit properties TERM1="item" TERM2="specifying properties"TERM1="property" TERM2="specifying"TERM1="Edit Properties (Item menu)"Note: Changes to item properties are saved immediately. Changes to component properties are saved when you save your diagram changes.Σ To specify explicit properties for a diagram object:1 In the diagram, select the object.2 Select Item | Edit Properties.The Edit Properties dialog box appears.FILENAME="00106.unk" ORIGFILE="pics/editprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"3 Select the item whose properties you want to set.4 If necessary, click Define Item to define the item.5 Specify the appropriate property values, and then click OK.TERM1="scope of item"TERM1="item" TERM2="scope of"ID="18867"Specifying ScopeIntroductionAn item's scope defines its name space and where it is defined. You specify an item's scope as Phase, System, or File.Appendix B, Type and Scope of Diagram Components, lists the item type and initial scope of each diagram component. An item keeps its initial scope unless you change it.Scope and item name spaceTERM1="scope of item"TERM1="item" TERM2="scope of"Scope defines the range within which an item's name must be unique.n Phase. The item's name must be unique within the phase. For example, if class Member appears in two systems that are in the same phase, and both classes have scope Phase, then both systems are referring to the same item.n System. The item's name must be unique within the system. For example, if class Member appears in two systems that are in the same phase, and both classes have scope System, then the systems are referring to two different items.n File. The item's name must be unique within the file. For example, if association Rents appears in two CDs in the same system, and both associations have scope File, then the CDs are referring to two different items.Scope and item definitionsScope also defines where an item's definition is stored. (Qualified items always have the same scope as the owner item.)n Phase. An item that has scope Phase is defined in one system, but can be referred to by many systems. - The system in which you defined the item contains the item definition. In this system, ObjectTeam creates the item with scope TERM1="phaseDef, item scope"phaseDef.- Any system that references the item contains a reference to the item. In these systems, ObjectTeam creates the item with scope TERM1="phaseRef, item scope"phaseRef.n System. The system in which you defined the item contains the item definition. ObjectTeam creates the item with scope TERM1="system" TERM2="item scope"System.n File. The file in which you defined the item contains the item definition. ObjectTeam creates the item with scope TERM1="file, item scope"File.Editing itemsTERM1="item" TERM2="editing"TERM1="editing" TERM2="items"Generally, if you can see an item in a diagram editor, and the diagram editor is not loaded read-only, you can edit the item. The following items are useful to keep in mind when editing:n If an item has scope Phase or System, editing it can affect systems or diagrams other than the current diagram. To see the scope of an item, select the item and then select Edit | Scope. The Edit Scope dialog box indicates the current scope of the item.n If a class has scope Phase, you can edit its name (Item | Change Name) and properties (Item | Edit Properties) from any system in which it appears. However, the class's attributes and operations are only visible in, and can only be edited in, the system that contains the class definition.Locating itemsOn each level, at most one item with a given name and type can exist. The levels form a nested structure name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' file, system, phase name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' in which items can be found. Items are searched for (by name and type) starting at a given level. If the item is not present at that level, ObjectTeam searches the next highest level until a matching item is found, or the highest level is reached.How to change an item's scopeTERM1="item" TERM2="changing scope"TERM1="Edit Scope (Item menu)"Note: When you change an item's scope, ObjectTeam updates the repository immediately. The item's new scope remains even if you close the diagram without saving changes.Σ To change an item's scope:1 In the diagram, select the object.2 Select Item | Edit Scope.Note: If more than one item is associated with the selected object, the Items dialog box appears, as shown in the following figure. Select the item and click OK.FILENAME="00107.unk" ORIGFILE="pics/items_db.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"The Edit Scope dialog box appears (the options that appear depend on the type and scope of the selected item).FILENAME="00108.unk" ORIGFILE="pics/editscop.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"3 Select an option, and then click OK.An item's scope determines where its definition is stored. Changing its scope can change its definition. Use the options to determine the item definition for the new scope.Changing the scope downwardsChanging the scope downward means changing it from a higher level to a lower level, for example, from Phase to System. Typically, when you change the scope downward, you copy the item definition. The item definition also remains on the higher level. The Edit Scope dialog box, presents the following options:COLS="2"COLNAME="1" COLWIDTH="396p"COLNAME="2" COLWIDTH="144p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Scope ChangeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Create empty definition on File/System level Create a new item definition, with default property values, in the current file or system.COLNAME="2" VALIGN="TOP" MOREROWS="0"System to FilePhase to File Phase to SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"Copy definition to File/System level Copy the existing item definition, including its property values, to the current file or system.COLNAME="2" VALIGN="TOP" MOREROWS="0"System to FilePhase to FilePhase(Ref) to SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"Restrict definition to System level Item is defined in the current system. Do not modify item definition; instead change scope.COLNAME="2" VALIGN="TOP" MOREROWS="0"Phase(Def) to SystemChanging the scope upwardChanging the scope upward means changing it from a lower level to a higher level; for example, from System to Phase. Typically, when you change the scope upward, you move the item definition. The Edit Scope dialog box presents the following options:COLS="2"COLNAME="1" COLWIDTH="396p"COLNAME="2" COLWIDTH="144p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Scope ChangeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Export definition to System/Phase level Move the existing item definition, including its property values, to the current system. The item definition in the file is deleted.COLNAME="2" VALIGN="TOP" MOREROWS="0"File to SystemFile to Phase(Def)COLNAME="1" VALIGN="TOP" MOREROWS="0"Make definition available on Phase level Item is defined in the current system. Do not modify item definition; instead change scope.COLNAME="2" VALIGN="TOP" MOREROWS="0"System to Phase(Def)COLNAME="1" VALIGN="TOP" MOREROWS="0"Refer to (not yet existing definition) on System level Create a new item definition, with default property values, in the current system. The item definition in the file is deleted.COLNAME="2" VALIGN="TOP" MOREROWS="0"File to SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"Refer to (not yet existing definition) on Phase level The item definition in the file is deleted. The item is undefined.COLNAME="2" VALIGN="TOP" MOREROWS="0"File to Phase(Ref)COLNAME="1" VALIGN="TOP" MOREROWS="0"Refer to definition on Phase level The item definition in the file is deleted. The item definition exists in another system.Note: If the item is a class and the system contains the CDM, the item definition cannot be deleted; the scope cannot be changed.COLNAME="2" VALIGN="TOP" MOREROWS="0"System to Phase(Ref)Note: If you attempt to create an item definition in a system that already contains a definition for that item, an error message appears. You must delete the existing definition before you can create a new one. ID="21274"Removing and Moving ItemsIntroductionThis section describes how to remove items that are no longer referenced and how to move item definitions from one system to another.Removing unreferenced itemsTERM1="unreferenced item, deleting"TERM1="item" TERM2="unreferenced"TERM1="deleting" TERM2="unreferenced items"TERM1="Delete Unreferenced Items (Utilities menu)"When you name a diagram component, you create an item. If you delete the diagram symbol, the item remains in the repository and can be used in other diagrams. If you do not use the item, removing it from the repository improves performance and avoids unexpected name conflicts.How to remove unreferenced itemsΣ To remove unreferenced items:1 In the Browser, move to the appropriate level.- To remove unreferenced items from selected systems, move to Phase level.- To remove unreferenced items from selected files, move to System level.2 Select the systems or files from which you want to remove unreferenced items.3 Select Utilities | Delete Unreferenced Items.Also available from diagram editorsUse Utilities | Delete Unreferenced Items to remove unreferenced items from the current diagram file.To move an item definitionTERM1="item" TERM2="moving definition of"TERM1="Move Definition (Utilities menu)"TERM1="moving" TERM2="defined items"You can move the definition of any item that has scope phaseDef from one system to another.Σ To move an item definition:1 In the navigation area of the Browser, unfold the system that contains the item you are interested in.The pseudo object <defined items> appears as one of the child objects of the selected system.2 Open the pseudo object <defined items>.The defined items appear in the information area.3 Select the items you want to move.Note: You can only select items with scope phaseDef.4 Select Utilities | Move Definition.The Move Definition dialog box appears listing all systems in the current phase.FILENAME="00109.unk" ORIGFILE="pics/moveitem.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmedit.fm5.mif"5 Select the system that you want to move the selected items to, and then click OK.The item definitions are moved to the new system. If you move an item of type cl, the corresponding CDM is moved to the new system also.Chapter 4 TYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideID="25681"Exploring Each DiagramIntroductionThis chapter describes each diagram, its purpose, and the symbols that it uses. The diagram notation is based on the Unified Modeling Language (UML) for Object-Oriented Development, developed by Grady Booch, Ivar Jacobson, and James Rumbaugh.TERM1="UML"TERM1="Unified Modeling Language"OMT supportBy default, ObjectTeam diagrams use UML notation. However, ObjectTeam also provides support for OMT notation, as described in REFID="39383" TYPE="XREF-TEXTCOPY"Appendix A, OMT Support.For more informationThe following chapters provide additional diagram information:n REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams, describes how to edit diagrams. The editing operations are similar for all diagrams.n The ObjectTeam Customization Guide describes how to customize the diagram editors.ID="25359"Relationships among diagramsIn ObjectTeam, the components in one diagram are often related to the components in another; for example, an actor in a UCD is a class in a CD. This relationship has two consequences for your work in ObjectTeam:n Navigation. ObjectTeam provides special navigation paths that allow you to move from a component in one diagram to a related diagram. See REFID="33913" TYPE="XREF-TEXTCOPY"Navigating Between Diagrams on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7 for more information.n Semantic checking. The following table shows diagram objects that are semantically related. The Check utility ensures that your ObjectTeam model adheres to these semantics. For a complete list of what is checked on each diagram, see the ObjectTeam Customization Guide.COLS="5"COLNAME="1" COLWIDTH="72p"COLNAME="2" COLWIDTH="94p"COLNAME="3" COLWIDTH="82p"COLNAME="4" COLWIDTH="106p"COLNAME="5" COLWIDTH="144p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"CODCOLNAME="3" VALIGN="TOP" MOREROWS="0"SDCOLNAME="4" VALIGN="TOP" MOREROWS="0"STDCOLNAME="5" VALIGN="TOP" MOREROWS="0"UCDCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"objectCOLNAME="4" VALIGN="TOP" MOREROWS="0"classCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"actor, instance typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"initiatorCOLNAME="4" VALIGN="TOP" MOREROWS="0"classCOLNAME="5" VALIGN="TOP" MOREROWS="0"actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"message flowCOLNAME="3" VALIGN="TOP" MOREROWS="0"message flowCOLNAME="4" VALIGN="TOP" MOREROWS="0"transition or event messageCOLNAME="5" VALIGN="TOP" MOREROWS="0"communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"qualified SDCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"use caseCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19294" TYPE="XREF-TEXTCOPY"Class Diagram 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'49COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13208" TYPE="XREF-TEXTCOPY"Collaboration Diagram 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'61COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12305" TYPE="XREF-TEXTCOPY"Sequence Diagram 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'69COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34271" TYPE="XREF-TEXTCOPY"State Diagram 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'75COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35633" TYPE="XREF-TEXTCOPY"Use Case Diagram 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'82ID="19294"Class DiagramPurposeThe Class Diagram (CD) defines the objects in a system and describes their structural components. The following points are important for the objects, or classes, in class diagrams:n Their identityn Their relationships to other objectsn Their characteristics (attributes)n What can be done to them, and what they can do (their operations)Example class diagramThe following illustration shows a class diagram.FILENAME="00110.unk" ORIGFILE="pics/cad_umlx.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"SymbolsTERM1="Class Association Diagram" TERM2="symbols in"TERM1="symbols" TERM2="in CAD"IntroductionThis section describes the symbols used in the class diagram. The following table shows the symbols as they appear in the control panel.FILENAME="00111.unk" ORIGFILE="pics/cd_symbs.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Note: The Vertex, Select, Note, and Note connector symbols are common to all diagrams. They are described in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams.ID="39851"ClassTERM1="class" TERM2="symbol in CAD"A class is a group of objects with similar properties (attributes), common behavior (operations), common relationships to other objects, and common semantics. TERM1="abstract class"TERM1="concrete class"TERM1="class" TERM2="concrete"TERM1="class" TERM2="abstract"Objects in a class have the same attributes and behavior patterns. Most objects distinguish themselves through differences in their attribute values and relationships to other objects.You enter the class name in the top text area of the class symbol:FILENAME="00112.tif" ORIGSEQ="30" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Derived classYou can indicate a derived class by preceding the name with a slash:FILENAME="00113.tif" ORIGSEQ="98" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"AttributesTERM1="attribute" TERM2="creating"Attributes describe an object's characteristics. You specify attributes in the middle text area of the class symbol. Use the following syntax to specify a data attribute:[ $ | / | *]attr-name:data-type = initial-valuewheren $ indicates a class (static) attribute name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' a value that applies to the entire class of objects, rather than to each instance.n / indicates a derived attribute name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' a value that is the result of a computation.n * indicates an attribute that should be part of the primary key. This is only meaningful if your target language supports persistency. For more information, see the ObjectTeam Code Generation Guide for your target language.n data-type is a standard type or a user-defined type. For more information, see the ObjectTeam Code Generation Guide for your target language.n initial-value is the default value of the attribute.FILENAME="00114.tif" ORIGSEQ="107" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"OperationsTERM1="operation" TERM2="creating"Operations are the actions that can be carried out on or by the objects. (See also REFID="34891" TYPE="XREF-TEXTCOPY"Propagation.) You specify operations in the bottom text area of the class symbol. Use the following syntax to specify an operation:[+|#|-|$]operation-name[(parameter-list)][:return-type] [{abstract}]wheren + indicates a public operationn # indicates a protected operationn - indicates a private operationn $ indicates a class (static) operation name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' an operation that applies to the entire class of objects, rather than to one instancen +$ indicates a class public operationn parameter-list is a comma-separated list of zero or more parameters. Use the following syntax to specify each parameter:parameter-name[:data-type]n return-type is the data type of value returned by the operation.n {abstract} indicates an abstract operation, which is an operation defined, but not implemented by, an abstract class. The operation must be implemented by all concrete descendant classes.FILENAME="00115.tif" ORIGSEQ="32" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"TERM1="Class Definition Matrix" TERM2="and Class Association Diagram"TERM1="Class Association Diagram" TERM2="and Class Definition Matrix"Class Definition Matrices (CDMs)When you specify the first attribute or operation for a class, ObjectTeam creates a Class Definition Matrix (CDM) for the class. The CDM appears in the Navigation and Information areas, but cannot be edited directly. When you open a CDM, ObjectTeam starts a Class Diagram editor, opening the Class Diagram that contains the class defined by the CDM. If the class appears in more than one Class Diagram, ObjectTeam prompts you to select the one that you want to open.ID="19961"AssociationTERM1="association" TERM2="symbol in CAD"TERM1="relationship" TERM2="association"sAssociations describe the relationships among objects. An association is a group of links in which each a link is a physical or conceptual connection between instances of an object. An association in a Class Diagram describes a set of potential links in the same way that a class describes a set of potential objects.FILENAME="00116.tif" ORIGSEQ="83" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Role namesAn association is inherently bidirectional; thus, you can specify a role name for each end of the association. As the following figure shows, the role name at the far end of an association describes the association from the class at the near end to the class at the far end. In addition to the role names, you can also specify a name for the association.TERM1="multiplicity"TERM1="association" TERM2="multiplicity of"TERM1="class" TERM2="associations between"MultiplicityMultiplicity is specified at both ends of the association. The multiplicity at the far end of an association specifies how many instances of the class at the far end of the association can relate to a single instance of the class at the near end of the association. In the previous figure, each instance of class-A can be related to many instances of class-B; each instance of class-B must be related to exactly one instance of class-A.The symbols in the control panel provide three multiplicity values: mandatory (1), optional (0..1), and many (*). After adding an association to the diagram, you can edit the multiplicities as needed. For example, you might edit a multiplicity value to indicate a multiplicity of 2 or more (2..*).FILENAME="00117.tif" ORIGSEQ="23" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"How to draw an associationTo draw an association:1 In the diagram, create the two classes involved in the association.2 In the control panel, select the multiplicity for the beginning of the association, the multiplicity for the end of the association, and the association symbol. For example, to create a one-to-many association, select the Begin Mandatory Association symbol, the End Many Association, and the Association symbol.3 Click the first class involved in the association, and then click the second class.4 If necessary, edit the multiplicities of the association.ID="40661"N-ary associationsMost associations between three or more classes are not true n-ary associations. You can usually decompose these apparent n-ary associations into more meaningful and correct binary associations or phrase them as qualified associations.True n-ary associations represent associations between three or more classes. The n-ary association is an atomic unit and cannot be subdivided into binary associations without losing information. FILENAME="00118.tif" ORIGSEQ="21" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"How to draw an n-ary associationTo draw an n-ary association:1 In the diagram, create the classes involved in the association.2 In the control panel, click the N-ary Association symbol button.3 Click in the diagram where you want to place the symbol.4 In the control panel, click the N-ary Connector symbol button.5 Click a class involved in the n-ary association, and then click the n-ary association symbol.6 Repeat step 5 for each class in the n-ary association.More classesTERM1="more classes" TERM2="symbol in CAD"A more-classes symbol indicates that additional classes exist, but are not shown. This symbol cannot have a name.AggregationTERM1="aggregation" TERM2="symbol in CAD"TERM1="class" TERM2="aggregation of"TERM1="relationship" TERM2="aggregation"An aggregation is a relationship in which objects that represent the components of something are associated with an object that represents the entire assembly. For example, a car could be modeled as an aggregate of its parts.FILENAME="00119.tif" ORIGSEQ="20" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Aggregation is a special, strong form of association. (If two objects are bound tightly by a part-whole relationship, you show the relationship as an aggregation. If two objects are usually considered as independent, even though they may often be linked, you show the relationship as an association.) Aggregation adds semantic connotations in certain cases. In an aggregation, an aggregate object is made of components. Components are part of the aggregate. Significant properties of aggregation are transitivity, antisymmetry and propagation.Qualified associationTERM1="qualified association" TERM2="symbol in CAD"TERM1="association" TERM2="qualified"TERM1="relationship" TERM2="qualified association"A qualified association is a one-to-many or many-to-many association in which the effective multiplicity is reduced by a qualifier. FILENAME="00120.tif" ORIGSEQ="16" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Qualified aggregationTERM1="qualified aggregation" TERM2="symbol in CAD"TERM1="aggregation" TERM2="qualified"TERM1="relationship" TERM2="qualified aggregation"A qualified aggregation is a one-to-many or many-to-many aggregation in which the effective multiplicity is reduced by a qualifier.FILENAME="00121.tif" ORIGSEQ="87" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"ConstraintConstraints restrict the relationship between any two objects in the Class Diagram: classes, attributes, or associations. FILENAME="00122.tif" ORIGSEQ="46" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"ID="27609"Association class connectorTERM1="association class connector" TERM2="symbol in CAD"Graphically, an association class connector links a class to an association (including n-ary associations). Semantically, the association, the association class, and the association class connector are a single model element. The association has class-like properties, such as attributes, operations, and associations, which are defined by the association class.How to insert an association classTo insert an association class connector:1 In the diagram, create the association and the association class.2 In the control panel, select the Association Class Connector symbol:3 Click the association, and then click the association class.A dotted line between the association and the association class.FILENAME="00123.tif" ORIGSEQ="96" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"FILENAME="00124.tif" ORIGSEQ="86" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"ID="33802"GeneralizationTERM1="generalization" TERM2="symbol in CAD"TERM1="association" TERM2="generalization"TERM1="relationship" TERM2="generalization"TERM1="hierarchy" TERM2="of classes"Classes are arranged into hierarchies. TERM1="superclass"TERM1="subclass"TERM1="class" TERM2="superclass"TERM1="class" TERM2="subclass"A generalization is the relationship between a class and one or more refined versions of it. The class being refined is the superclass; each refined version is a subclass. Each subclass inherits all the features of its superclass, but adds its own attributes and operations.Generalization is sometimes called the is-a relationship, because each instance of a subclass is also an instance of the superclass. A generalization describes an association between one independent class and several dependent classes; the independent class, which is the superclass, is a sort of largest common denominator of the various subclasses that are associated with it. Generalization (and inheritance) is a powerful abstraction for sharing similarities among classes while preserving their differences.Two types of generalizationObjectTeam supports two types of generalization:n Disjoint. A generalization is disjoint when a concrete class must inherit from exactly one subclass.FILENAME="00125.tif" ORIGSEQ="8" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"n Overlapping. A generalization is overlapping when a concrete class can inherit from more than one subclass.FILENAME="00126.tif" ORIGSEQ="26" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"A class can inherit from more than one class hierarchy or from more than one subclass in an overlapping generalization, but can never inherit from two subclasses in the same disjoint generalization.How to draw a generalizationTo draw a generalization:1 In the diagram, create the classes involved in the hierarchy.2 In the control panel, click the Generalization or Overlapping Generalization symbol button.3 Click in the superclass, and then in the subclass.ObjectTeam draws the first leg of the generalization.4 Click in the triangle of the generalization, and then in the next subclass.ObjectTeam draws the second leg of the generalizationID="34891"PropagationTERM1="propagation" TERM2="symbol in CAD"TERM1="operation" TERM2="propagation of"Propagation applies one or more operations to an associated object when the operation is applied to the starting object. (If you specify more than one operation, use commas to separate the operation names.) In the following figure, applying operation on Class-A causes the same operation to be carried out on Class-B.FILENAME="00127.tif" ORIGSEQ="31" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The propagation symbol can be placed on or near an connector, and will move with the connector it belongs to. Before inserting a propagation symbol, firstt connect two objects with an connector and then insert the propagation symbol by clicking near the connector. You can move the propagation symbol during insertion, to prevent it from overlapping its connector.A propagation symbol can be attached to the following connectors:n Associationn Qualified associationn Aggregationn Qualified aggregationID="13208"Collaboration DiagramIntroductionThe Collaboration Diagram shows a set of objects related in a particular context, and the set of messages exchanged between the objects to achieve a desired operation or result.The COD is a graph of references to objects and the links between those objects, with message flows attached to its links. The diagram shows the objects relevant to the performance of an operation.Use the Collaboration Diagram to show complex associations between classes.Relation to other diagrams and objectsA Collaboration Diagram can stand alone or be the instantiation of (parts of ) other diagrams. In the Collaboration Diagram, message flows can be drawn along the links between objects to specify the interactions between the objects.Its name is usually classified by a Class or Use Case name.Relation to Class DiagramThe Collaboration diagram can be a decomposition of a Class, Class Diagram, or part of a Class Diagram.Relation to Use Case DiagramThe Collaboration diagram can be a decomposition of a Use Case, Use Case Diagram, or part of a Use Case Diagram.Example CODThe following show an example of a Collaboration DiagramFILENAME="00128.unk" ORIGFILE="pics/codexamp.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"SymbolsIntroductionThis section describes the symbols used in the Collaboration diagram. The following table shows the symbols as they appear in the control panel.FILENAME="00129.unk" ORIGFILE="pics/cod_syms.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Note: The Vertex, Select, Note, and Note connector symbols are common to all diagrams. They are described in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams.ActorAn actor in a Collaboration Diagram represents the person, software, hardware, or other agent external to the system that is interacting with the system. The "stick man" figure represents the actor:FILENAME="00130.unk" ORIGFILE="pics/codactor.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The actor has one label containing its name. This name has class syntax. By default its scope is Phase. InstanceAn Instance is represented by a rectangle. It is an instantiation of a class in a Class Diagram or a Use Case in a Use Case DiagramThe instance is represented by a rectangle.FILENAME="00131.unk" ORIGFILE="pics/codinst.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The instance has one label with the following syntax:<instance name><:instance type>. The instance name has scope Phase and is considered a classname.Instance namethe name of the instanceInstance typeThe instanceType can be an item to correspond to a class or a use case.The initial scope of an instance is PhaseN-ary LinkAn N-ary Link symbol is the node part of an n-ary link.It is an instance of an n-ary association (see REFID="40661" TYPE="XREF-TEXTCOPY"N-ary associations)The n-ary link is represented by a diamond. FILENAME="00132.unk" ORIGFILE="pics/codnlink.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"the n-ary link is connected to the appropriate instances and actors by an n-ary link connector. LinkThe link represents an instance of an association between two classes (see also REFID="19294" TYPE="XREF-TEXTCOPY"Class Diagram)FILENAME="00133.unk" ORIGFILE="pics/codlink.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"An association name can be attached to a link to indicate an instance. The name has class syntaxRole namesYou can specify a link stereotype and a role name for each end of the link. See REFID="21173" TYPE="XREF-TEXTCOPY"Link role names. Aggregation linkThe aggregation link is an instance of an aggregation in a Class Diagram. FILENAME="00134.unk" ORIGFILE="pics/codaggrl.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"An aggregation name can be attached to an aggregation link to indicate an instance. The name has class syntaxRole namesYou can specify a link stereotype and a role name for each end of the aggregation link. See REFID="21173" TYPE="XREF-TEXTCOPY"Link role names. Qualified linkThe Qualified Link consists of a link and a qualifier that represent the value of the qualifier in the association from which this link is an instantiation. FILENAME="00135.unk" ORIGFILE="pics/codquall.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"An qualified association name can be attached to a qualified link to indicate an instance. The name has class syntaxRole namesYou can specify a link stereotype and a role name for each end of the qualified link. See REFID="21173" TYPE="XREF-TEXTCOPY"Link role names. Qualified aggregation linkThe Qualified AggregationLink consists of a aggregation link and a qualifier that represent the value of the qualifier in the aggregation from which this link is an instantiation. FILENAME="00136.unk" ORIGFILE="pics/codquagg.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"An qualified aggregation name can be attached to a qualified aggregation link to indicate an instance. The name has class syntaxRole namesYou can specify a link stereotype and a role name for each end of the qualified aggregation link. See REFID="21173" TYPE="XREF-TEXTCOPY"Link role names. ID="21173"Link role namesThe connector representing a link (and also aggregation link, qualified link, qualified aggregation link and n-ary link connector)has the following labels½Link Start Stereotype╗role name½Link End Stereotype╗role nameLink StereotypesYou can specify the stereotypes of a link through the link stereotypes in the control panel. For more information on the Link Start Stereotype and Link End Stereotype, see Link stereotypes on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'66.Role NamesObjectTeam adds the following qualifiers to the role names:n For binary links the role name is qualified by the type of the instance at the opposite side of the link.n For n-ary links the role name is qualified by the type of Instance it is linked to.k Role NamesMessagesA message flow carries a message from one object to another along a link (link, qualified link, aggregation link, qualified aggregation link, and n-ary link connector). The message symbols can be placed on or near a connector, and will move with the connector they belong to. Before inserting a message, first connect two objects with a connector and then insert the message by clicking near that connector. You can move the message during insertion, to prevent it from overlapping its connector.A message can be attached to the following connectors:n Linkn Aggregation Linkn Qualified Linkn Qualified Aggregation Linkn N-ary Link ConnectorA message flow in a Collaboration Diagram is characterized by direction and type.Message directionThere are two message directions:n Backward Messages n Forward MessagesThe direction in which the link was drawn determines the direction of the message.Message typeThe following types exist:n Nested message, see REFID="40495" TYPE="XREF-TEXTCOPY"Nested messagen Flat message, see REFID="20230" TYPE="XREF-TEXTCOPY"Flat messagen Asynchronous message, see REFID="13738" TYPE="XREF-TEXTCOPY"Asynchronous messageMessage SyntaxThe default syntax for a message name is:<predecessor> <guard-condition> <sequence-expression> <return-value> [ = | := ] <message-name> (<argument-list>) <predecessor> <guard-condition> A comma separated list of sequence numbers followed by a slash. The clause is omitted when the list is empty <sequence-expression> A dot separated list of number or names optionally followed by a condition or an iteration (both enclosed in square brackets, the iteration preceded by an asterisk) and separated from the rest of the label by a colon.<return-value> [ = | := ]A data elemnet with scope file. If the message does not return a value, thenthe return value and the assignment operator are omitted.<message-name> A process element with scope system.<argument-list>A comma separated list of data elements with scope file. This list is enclosed in brackets and can be empty.ID="40495"Nested messageThe nested message represents a procedure call or other nested flow of control. The nested sequence is completed before the outer level sequence resumes. FILENAME="00137.unk" ORIGFILE="pics/codnestd.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The nested message symbol is represented by a filled solid arrowhead. ID="20230"Flat messageThe flat message shows the progression to the next step in a sequence. FILENAME="00138.unk" ORIGFILE="pics/codflat.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The flat message symbol is represented by a stick arrowhead.ID="13738"Asynchronous messageThe asynchronous message shows an asynchronous message between two objects. FILENAME="00139.unk" ORIGFILE="pics/codasync.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The asynchronous message symbol is represented by a half stick arrowhead. N-ary link connectorAn n-ary link connector is the connector part of an n-ary link. One side of this connector must be connected to aninstance, the other side to an n-ary link symbol.FILENAME="00140.unk" ORIGFILE="pics/codnlnkc.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"An n-ary association role name can be attached to the n-ary link connector to indicate an instance. The name has class syntaxRole namesYou can specify a link start stereotype and a role name for the n-ary link connector on de side connected to the instance. See REFID="21173" TYPE="XREF-TEXTCOPY"Link role names. ID="11708"Link stereotypesYou can attach a Stereotype to a Link Role Name to show the type of implementation of the role.The direction in which the link was drawn determines where the Link Start Stereotype and the Link End Stereotype are placed.You can assign one the following stereotypes:n none (the empty buttons at the top of the Link Start Stereotype and Link End Stereotype columns on the control panel)n ½association╗n ½parameter╗n ½local╗n ½global╗n ½self╗ID="12305"Sequence DiagramPurposeThe Sequence Diagram (SD) is specifies the time and control aspects of a system.UsTERM1="Event Trace Diagram"e the SD to analyze complTERM1="business event" TERM2="in ETD"ex business events. Events are actions between the objects in your project. They can also transmit data.TERM1="scenario, in ETD"A scenario is the sequence of events during one execution of a program. A scenario can include all the events or only the events sent to or received by certain objects in the system.Typically, you use SDs to describe only the more complex events. A diagram describing a particular scenario is called a sequence. An SD can contain more than one sequence.Example SDThe following SD shows a simple scenario for the use of an automatic teller machine. In this scenario, the system rejects the card. For the customer this transaction is simple: he inserts the card and the card is rejected. For the system, several actions are necessary. A constraint specifying the maximum length of the interval between these actions can be added.The following illustration shows the SD for this scenario:FILENAME="00141.tif" ORIGSEQ="69" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"This sequence is fairly general; you can work out the Insert Card event more completely by including details such as entering the personal identification number and requesting the type of transaction. The analyst must decide what level of detail to use in the SDs.TERM1="Event Trace Diagram" TERM2="symbols in"TERM1="symbols" TERM2="in ETD"SymbolsIntroductionThis section describes the symbols used in the Sequence Diagram. The following illustration shows the symbols as they appear in the diagram control panel:FILENAME="00142.unk" ORIGFILE="pics/sd_symbs.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Note: The Vertex, Select, Note and Note connector symbols are common to all diagrams. They are described in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams.InitiatorTERM1="initiator" TERM2="symbol in ETD"The initiator starts the sequence. It represents an external agent, such as a user, that interacts with the system. The initiator can be a class, but does not have to be.The following illustration shows an initiator:FILENAME="00143.unk" ORIGFILE="pics/sd_init.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Because a sequence describes a particular scenario occurring after one particular external event, each sequence can only have one initiator. However, you can draw more than one sequence in a diagram.ObjectTERM1="object" TERM2="symbol in ETD"The object line represents a portion of the lifetime of an object in the system. Time flows from top to bottom on the symbol. The spacing between event symbols is not important. It does not indicate the length of time between events.The following illustration shows an object:FILENAME="00144.unk" ORIGFILE="pics/sd_objsym.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"An object is an instance of a class. The object name has the following syntax:<object_name>[:<class_name>]If no class name is indicated, ObjectTeam assumes the class name is the same as the object name.Object propertiesThe following properties can be set for the object:COLS="2"COLNAME="1" COLWIDTH="136p"COLNAME="2" COLWIDTH="316p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"entity objectCOLNAME="2" VALIGN="TOP" MOREROWS="0"The object is a persistent object.COLNAME="1" VALIGN="TOP" MOREROWS="0"interface objectCOLNAME="2" VALIGN="TOP" MOREROWS="0"The input and output for this object is external, that is, the object is activated by someone outside the systemCOLNAME="1" VALIGN="TOP" MOREROWS="0"control objectCOLNAME="2" VALIGN="TOP" MOREROWS="0"When an object is neither an entity object nor an interface object, it can be defined as a control object.ID="17198"Timing ConstraintThe timing constraint is a text tool used to set a constraint on the time interval between two messages. You can mark the messages with timing marks (see REFID="24347" TYPE="XREF-TEXTCOPY"Timing mark)FILENAME="00145.tif" ORIGSEQ="110" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"How to use the timing constraint is explained below in REFID="31465" TYPE="XREF-TEXTCOPY"How to insert a timing constraint, and REFID="36061" TYPE="XREF-TEXTCOPY"How to move a timing constraint.ID="31465"How to insert a timing constraintΣ To insert a text block:FILENAME="00146.tif" ORIGSEQ="99" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"1 In the control panel, click the text block tool.2 Click in the drawing area where you want to place the text block.A small square (a) appears where you have clicked. 3 Move the cursor down and to the right of the square.An I-bar appears (b).4 Enter text in the text block (c).The small square disappears.Text in text blocks is edited in the same way as text in notes (see REFID="42581" TYPE="XREF-TEXTCOPY"Working with Notes on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'30).ID="36061"How to move a timing constraintΣ To reposition a timing constraint: 1 Place the cursor over the timing constraint2 Press:- both mouse buttons (Windows)- middle mouse button (Unix)3 Drag the text block to its new position. ID="24347"Timing markAn event can be labeled on the initiator by a timing mark. The timing mark can be used in combination with the timing constraint (see REFID="17198" TYPE="XREF-TEXTCOPY"Timing Constraint) to set a time interval between two or more events.The following illustration shows two timing marks.FILENAME="00147.tif" ORIGSEQ="39" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The timing mark is not required for every message, but it can be set for every begin and end of a message. When the message is repositioned, the timing mark moves with it.MessagesAn message represents an individual stimulus from one object to another. An message may be a signal that something has happened or can transmit data. An message occurs at a point in time. More than one message can be sent simultaneously from the same point on the initiator or object line, that is, at the same point in time. An object can also send a message to itself. Such a message must arrive at the object at a another point in time.The following illustration shows a nested message:There are several kinds of messages in a sequence diagram: n Flat Message: see REFID="10145" TYPE="XREF-TEXTCOPY"Flat messagen Nested Message see REFID="12019" TYPE="XREF-TEXTCOPY"Nested messagen Asynchronous Message: see REFID="19095" TYPE="XREF-TEXTCOPY"Asynchronous messagen Return Message see REFID="39939" TYPE="XREF-TEXTCOPY"Return messageThe syntax for a message flow is:<message_name>[(<argument_list>)]The arguments in the argument list are separated by commas.ID="10145"Flat messageThe Flat Message symbol is represented by a stick arrowhead. It shows the progression to the next step in a sequenceFILENAME="00148.unk" ORIGFILE="pics/sd_m_flat.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"ID="12019"Nested messageThe Nested Message symbol is represented by a filled solid arrowhead. It represents a procedure call or other nested flow of control. The nested sequence is completed before the outer level sequence resumes.FILENAME="00149.unk" ORIGFILE="pics/sd_m_nes.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"ID="19095"Asynchronous messageThe Asynchronous Message symbol is represented by a half stick arrowhead. It shows an asynchronous message between two objects.FILENAME="00150.unk" ORIGFILE="pics/sd_m_asy.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"ID="39939"Return messageA return message is a message that an object returns as a result of a process initiated by a message flow.FILENAME="00151.unk" ORIGFILE="pics/sd_m_ret.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Create / Destroy messagesWhen a message is drawn to the object name box the message becomes a "create message".When a message is drawn to the object terminator the message becomes a "destroy message".FILENAME="00152.unk" ORIGFILE="pics/sd_crdest.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"TERM1="event" TERM2="symbol in ETD"ID="41532"In Scope regionThe In Scope region is a white rectangle that can be placed on top of an initiator or an object to show that the object is in scope. The following illustration shows the In Scope region:FILENAME="00153.tif" ORIGSEQ="95" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"When an message is nearby the symbol will be linked to that event. The InScope region can be moved up and down the axis of the object, but not away from it. When it is moved up or down, the event(s) attached to it will be moved with it. Note: When the event is moved, the InScope region is not moved. (This means that the event can be moved away from a region and connected to another).Object TerminatorThe object termination symbol represents the destruction of the object. The object termination symbol has no labels.FILENAME="00154.unk" ORIGFILE="pics/sd_object.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"ID="41704"ID="34271"State DiagramPurposeThe state diagram (STD) shows the sequence of states that an object goes through during its life. A state diagram defines:n The external stimuli of the system: the eventsn The values of objects: the statesn The changes of the object values: the transitionsMore than one transition may leave a state. The first event to occur causes the corresponding transition to fire. Transitions are guarded by conditions, i.e. an event can only fire a transition if the condition of the event is true. A condition is valid over an interval of time.When drawing a state diagram, concentrate on the following:n What sorts of states the class can be inn Which stimuli activate or re-activate the classn Which actions the class executes after (re-)activationTERM1="class" TERM2="state transitions"A state diagram describes the behavior of a single class of objects. All instances of a class have the same behavior, because they share the same class features, so they all share the same state diagram. But as each object has its own attribute values, so each object also has its own state. Each object is independent of other objects and proceeds at its own pace.Types of STDsThere are two kinds of STDs:TERM1="one-shot life cycle, in STD"TERM1="continuous loop, in STD"n One-shot life cycles describe objects with finite lives. It has initial and final states:- The initial state, in which the object is created, is a solid circle.- The final state, in which the object is destroyed, is a bull's-eye.n Continuous loops describe objects where it is unimportant how the loop is started or ended. Activities and actionsTERM1="action, in STD"TERM1="activity, in STD"You use activities and actions to describe the response of an object to an event:COLS="4"COLNAME="1" COLWIDTH="81p"COLNAME="2" COLWIDTH="126p"COLNAME="3" COLWIDTH="126p"COLNAME="4" COLWIDTH="117p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Internal StructureCOLNAME="3" VALIGN="TOP" MOREROWS="0"CharacterCOLNAME="4" VALIGN="TOP" MOREROWS="0"Associated WithCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActivityCOLNAME="2" VALIGN="TOP" MOREROWS="0"Relevant for control purposesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Sequential or continuous; takes time to completeCOLNAME="4" VALIGN="TOP" MOREROWS="0"StateCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Not relevant for control purposesCOLNAME="3" VALIGN="TOP" MOREROWS="0"InstantaneousCOLNAME="4" VALIGN="TOP" MOREROWS="0"EventYou can define an activity further through graphical decomposition. Opening an activity leads to another STD in which the activity is contained, or that is the definition itself.An activity has a starting event, an ending event, and possibly some intermediate events. A continuous activity persists until an event terminates it by causing a transition from the state. A sequential activity terminates by itself after an interval of time.DecompositionDo not use super states to specify events or concurrency. Specify these through decomposition diagrams. Use decomposition to define activities as well. Each state in the decomposition diagram represents one step of the activity. The decomposition diagram is a one-shot diagram with input and output transitions.Example STDThe following illustration shows a sample STD:FILENAME="00155.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"SymbolsTERM1="State Transition Diagram" TERM2="symbols in"TERM1="symbols" TERM2="in STD"IntroductionThis section describes the symbols used in the STD. The following illustration shows the symbols as they appear in the diagram control panel:FILENAME="00156.unk" ORIGFILE="pics/std_syms.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Note: The Vertex, Select, Note and Note connector icons are common to all diagrams. They are described in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams.StateTERM1="state" TERM2="symbol in STD"A state represents an externally observable mode of behavior, i.e. an interval of time over which some behavior persists. During its life, an object passes through various states of behavior. As a state occupies an interval of time, it has duration. A state is passive, which means that no transformations occur within a state. However, a state can have activities running internally. Use the REFID="32452" TYPE="XREF-TEXTCOPY"State with internal actions to add actions/activities to a state.FILENAME="00157.unk" ORIGFILE="pics/std_stat.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The name of the state is the name of the behavior exhibited by the object. ID="32452"State with internal actionsA special kind of state is the state with internal actions. It is interchangeable with the state described above. In the bottom section you can type actions that are initiated by this state.FILENAME="00158.unk" ORIGFILE="pics/std_stia.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"The syntax of the action is as follows:COLS="3"COLNAME="1" COLWIDTH="151p"COLNAME="2" COLWIDTH="151p"COLNAME="3" COLWIDTH="151p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SyntaxCOLNAME="2" VALIGN="TOP" MOREROWS="0"ExamplesCOLNAME="3" VALIGN="TOP" MOREROWS="0"explanationCOLNAME="1" VALIGN="TOP" MOREROWS="0"event/actionCOLNAME="2" VALIGN="TOP" MOREROWS="0"entry/entry-actioncoins in(amount)/add to balanceexit/exit-actionCOLNAME="3" VALIGN="TOP" MOREROWS="0"action to enter the stateaction that takes place inside the stateaction to exit the stateCOLNAME="1" VALIGN="TOP" MOREROWS="0"do/activityCOLNAME="2" VALIGN="TOP" MOREROWS="0"do/Warning: XtRemoveGrab asked to remove a widget not on the listCOLNAME="3" VALIGN="TOP" MOREROWS="0"an activity that may arise during the existence of the stateSuper StateTERM1="super state" TERM2="symbol in STD"A super state is a way of generalizing parts of a diagram. The generalized part, the super state, can be treated from the outside as a single state.FILENAME="00159.unk" ORIGFILE="pics/std_sups.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"In the diagram, the super state is a rectangle with rounded corners. States and transitions inside the super state are connected to the outside via the super state only. Transition arrows can be attached to the super state from the inside and the outside. By nesting a relatively autonomous part of a diagram in a super state, the number of transitions can be reduced, thereby clearing up the diagram.Initial stateTERM1="initial state" TERM2="symbol in STD"The initial state is the first state of behavior of an object after its creation.FILENAME="00160.unk" ORIGFILE="pics/std_star.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Final stateTERM1="final state" TERM2="symbol in STD"The final state is the last state of behavior of an object before it expires or is destroyed.FILENAME="00161.unk" ORIGFILE="pics/std_fina.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"History StateA history state is shown as a small circle with capital H and can only be inserted in a super state. Only one history state can exist in a one superstate.The history state symbolizes the status quo of the super state and its sub states at the moment that an event is activated from the super state to a state external to the super state. When the process resumes at the superstate, you can return a transition to the history state in the superstate to resume at the level that the superstate had before it was left.FILENAME="00162.unk" ORIGFILE="pics/std_hist.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"A history state can have multiple incoming events/actions. It usually does not have outgoing events/actions.Concurrent state separators and State regionsHorizontal and vertical concurrent state separators can be used to create concurrent state regions in a super state.FILENAME="00163.unk" ORIGFILE="pics/std_comp.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Complex transitionsWith the horizontal and vertical Complex Transition Node you can converge and diverge transitions.FILENAME="00164.unk" ORIGFILE="pics/std_cota.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Use the horizontal Complex Transition Node to converge/diverge more or less vertical transitions, and the vertical Complex Transition Node to converge/diverge more or less horizontal transitions.ClassTERM1="class" TERM2="symbol in STD"A class is a group of objects with similar properties (attributes), common behavior (operations), common relationships to other objects and common semantics.FILENAME="00165.unk" ORIGFILE="pics/std_clas.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"STD classes can be further defined through graphical decomposition. Opening an STD class leads to a CD in which the STD class is contained, or that is the definition itself.TransitionTERM1="event" TERM2="symbol in STD"An event is something that happens at a point in time. It has no significant duration. An event causes, or "fires" a change of state: the transition. The arrow of the transition indicates the order in which the states appear. A complete STD specifies a state sequence that is caused by an event sequence.FILENAME="00166.unk" ORIGFILE="pics/std_tran.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Note that events can only exist between two states: n statesn states with internal actionsn superstatesn start states (only as source)n final states (only as target)n history states (only as target)Events to classes are drawn with event messages.LabelIn STDs, the events are the label names of the transitions between the states. You list conditions in square brackets after an event name. An action is indicated on a transition after the event name; it is preceded by a slash.:event [(attribute)] [/ action] [guard] [/ event2] Note: <event2> can only be a target.Note: In the state symbols, you indicate the activities of that state of behavior through do: followed by the activity.Event messageTERM1="event message" TERM2="symbol in STD"TERM1="message" TERM2="symbol in STD"An event message sends a message to a class.FILENAME="00167.unk" ORIGFILE="pics/std_evem.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"For every event message there must be an operation defined in a CD. Such an operation can be defined in two ways:n Defined directly by the user for the classn Added to the class indirectly during code generation as a result of one of the following:- Data attributes- Associations- Class persistencyEvent messages can be further defined through graphical decomposition. Opening an event message leads to a new STD. The new diagram's name is the name of the class preceding the name of the opened event message. Event messages always originate from events and end in a class.ID="35633"Use Case DiagramPurposeUCDs allow you to capture business events by analyzing how objects external to the system interact with the system. A UCD represents a particular sequence of transactions between the system and an actor (an end user or system external to the system being analyzed). You can use UCDs to analyze system requirements and to help you define system boundaries.Example UCDThe following UCD models a banking system. Customer, Auditor, Clerk and Loan Officer are actors. Counter Transaction, Loan Application, and Audit are use cases name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' ways in which the actors use the system.FILENAME="00168.unk" ORIGFILE="pics/ucd_ex.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Additional UCDs might be used to further refine this UCD. For example, you might have a UCD that describes the Loan Application use case in greater detail. You may also have a few Sequence Diagrams that describe the Counter Transaction use case in the form of a number of scenarios: one for a successful transaction and one or more for transactions that are not successful.The analyst must choose the appropriate level of detail. You need enough detail to fully capture the business events and system requirements; however, you want to avoid using UCDs for functional decomposition.SymbolsIntroductionTERM1="Use Case Diagram" TERM2="symbols in"TERM1="symbols" TERM2="in UCD"This section describes the symbols used in the UCD. The following illustration shows the symbols as they appear in the diagram control panel:FILENAME="00169.unk" ORIGFILE="pics/ucd_syms.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Note: The Vertex, Select, Note and Note connection icons are common to all diagrams. They are described in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams.Use caseTERM1="use case" TERM2="symbol in UCD"The oval symbol represents a use case: the system or part of the system with which an actor communicates. If necessary, a use case can be further refined in another UCD.RBEID="2946"Document has an empty ('') pathname
for a graphic included by referenceFILENAME="00170.unk" ORIGSEQ="63" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"PropertiesYou can use the following properties to specify additional information about the use case:n TERM1="Basic Course of Action, use case property"Basic Course of Action. A free text field in which you can describe the most common or important sequence of transactions for the use case.n TERM1="Alternative Course of Action, use case property"Alternative Course of Action. A free text field in which you can describe the variants on the basic course; for example, the sequence of transactions that occurs in the case of an error.n TERM1="Precondition, use case property"Precondition. A free text field in which you can describe the conditions that must be met before the use case can be performed.n TERM1="Postcondition, use case property"Postcondition. A free text field in which you can describe the state of the system after the use case is performed.n TERM1="Classification, use case property"Classification. A field that contains one of the following values:- primary (default) indicates that this use case represents the basic course of action.- secondary indicates that this use case represents the alternative course of action.ActorTERM1="actor" TERM2="symbol in UCD"The "stick man" figure represents an entity external to the system name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' an end user or system name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' that is interacting with the system.FILENAME="00171.unk" ORIGFILE="pics/codactor.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"PropertiesYou can use the following properties to specify additional information about the actor:n TERM1="Type, UCD actor property"Type. A field that contains one of the following values:- user (default) indicates that the actor represents an end user.- system indicates that the actor represents another system.n TERM1="Initiator, UCD actor property"Initiator. A field that is either true or false:- true indicates that this actor initiates the use case.- false (default) indicates that this actor participates in the use case, but does not initiate it.Communication associationTERM1="communication association" TERM2="symbol in UCD"The line and the arrow represent the communication between the actor and the use case. To represent undirected (two-way) communication, use the line that has no arrowhead:FILENAME="00172.tif" ORIGSEQ="65" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"To represent directed (one-way) communication, use the arrow to show the direction of communication:FILENAME="00173.tif" ORIGSEQ="67" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Use case generalizationTERM1="use case generalization" TERM2="symbol in UCD"The dashed arrow indicates that the source use case includes the behavior of the destination use case.FILENAME="00174.tif" ORIGSEQ="68" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsuml.fm5.mif"Use case generalization stereotypesThe three stereotypes are:NoneThis is the blank use case generalization stereotype button. The use case generalization is not further specified.UsesMarking a use case generalization with ½uses╗ indicates that the source use case in the generalization includes the behaviour of the target use case.ExtendsMarking a use case generalization with ½extends╗ indicates that an instance of the source use case in the generalization may include behaviour of an instance of the target use case.Chapter 5 ID="30582"CheckingTYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideIntroductionOne advantage of doing design work online is that you can check your models using ObjectTeam's checking utilities. These utilities can help you find errors and inconsistencies in your design, minimizing the risk of expensive design flaws. Three types of checkingObjectTeam provides three types of checking:n Implicit checking is done whenever you use the diagram editors. Implicit checking ensures that your diagrams are always syntactically correct by preventing you from creating invalid objects or connections.n Explicit checking occurs when you click a Check menu. You can check individual diagrams or ensure that a set of diagrams are complete. Explicit checking is particularly useful for code generation, ensuring that the Class Diagrams (CDs) are complete and correct.n Code generation checking is done as part of code generation to minimize errors.This chapter describes each type of checking and how to use explicit checking.Customized checkingTcl scripts define all checking ObjectTeam performs. You can implement your own checks by modifying these scripts or by creating your own. For details on customizing checking, see the ObjectTeam Customization Guide.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12375" TYPE="XREF-TEXTCOPY"Implicit Checking 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22445" TYPE="XREF-TEXTCOPY"Explicit Checking 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16460" TYPE="XREF-TEXTCOPY"Code Generation Checking 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14409" TYPE="XREF-TEXTCOPY"Running a Check 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7TERM1="checking" TERM2="implicit"TERM1="editing" TERM2="and checking"TERM1=""TERM1="diagram" TERM2="checking, implicit"ID="12375"Implicit CheckingIntroductionThe ObjectTeam environment supports the OMT development method, which prescribes certain low-level details, such as the following:n Which symbols you can use in a diagramn Which of these symbols can be connectedn How these symbols are connectedImplicit checking enforces these rules. ObjectTeam monitors your actions while you create or modify a diagram. If you attempt to carry out an action that is inconsistent with the OMT notation, a warning appears in the message area of the editor.ExampleFor example, if you try to make an illegal connection, such as attaching a loop symbol from a class to an association, the editor displays the following message and prevents you from carrying out the action:No such connector type allowed between these component types.FILENAME="00175.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/mg/mgcheck.fm5.mif"Other methodology constraintsOn a higher level, the methodology also dictates:n What each type of diagram representsn When to use each type of diagramThese high-level points are taken care of by the organization of your project into phases and the types of diagrams that are available.TERM1="checking" TERM2="explicit"TERM1="diagram" TERM2="checking, explicit"ID="22445"Explicit CheckingIntroductionTERM1="diagram component" TERM2="checking"Once you have completed a diagram, you can check whether its components are specified adequately from the Check menu:COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Check Menu CommandCOLNAME="2" VALIGN="TOP" MOREROWS="0"Available FromCOLNAME="1" VALIGN="TOP" MOREROWS="0"ContentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Browser and editors (all diagrams)COLNAME="1" VALIGN="TOP" MOREROWS="0"Global ModelCOLNAME="2" VALIGN="TOP" MOREROWS="0"BrowserCOLNAME="1" VALIGN="TOP" MOREROWS="0"Use Case ModelCOLNAME="2" VALIGN="TOP" MOREROWS="0"BrowserCOLNAME="1" VALIGN="TOP" MOREROWS="0"Local ModelCOLNAME="2" VALIGN="TOP" MOREROWS="0"Browser and editors (CD, COD, SD, STD)+ Check that Check Local model does check COD.Phase affects rules that are checkedTERM1="phase" TERM2="affect on checking"ObjectTeam provides a set of rules for each command on the Check menu. Which rules are checked when you use a particular Check menu command depends on the current phase. For example, the set of rules for the Local Model command includes the following:n An attribute and a role on the same class cannot have the same name.n A class must have an operation defined for each event that it receives.If you are in the Analysis phase, only the first of these rules is checked. If you are in the Object Design phase, both rules are checked.TERM1="checking" TERM2="customizing"TERM1="customizing" TERM2="checking"List of rules and customizing rulesThis remainder of this section describes each Check menu command briefly. For a complete list of the rules provided for each Check menu command, see the ObjectTeam Customization Guide. That guide also describes how to customize Check menu commands by:n Changing which rules are run during a particular phasen Changing the message displayed when a rule is violatedn Modifying a rule provided by ObjectTeamn Adding rules to those provided by ObjectTeamCheck ContentsCheck Contents checks the semantics of a diagram. Each diagram has a unique set of rules.Running Check ContentsTo select Check Contents from the Browser, you must first select a diagram in the Information area. Selecting Check Contents from the diagram editor checks the entire diagram regardless of whether you have selected objects in it.Sample rulesFor example, Check Contents for the CD includes a rule to verify that all link attribute symbols are connected to associations. Check Contents for the SD includes a rule to verify that each event trace has exactly one initiator.ID="17684"Check Global ModelTERM1="checking" TERM2="Global Model"TERM1="Global Model (Check menu)"Check Global Model checks all classes (and all associated events) in the current system.Running Check Global ModelTo use Check Global Model, you must be at System level in the Browser. It does not matter whether you have selected items in the Information area.Sample rulesThe rules for Check Global Model are the same as the rules for Check Local Model. See the sample rules for Check Local Model.ID="21018"Check Local ModelTERM1="checking" TERM2="Local Model"TERM1="Local Model (Check menu)"Check Local Model checks selected classes or all classes in a selected diagram.Running Check Local ModelTo run Check Local Model from the Browser, you must first select a diagram or CDM. n If you have selected a diagram, ObjectTeam checks all classes in that diagram. The events checked depend on which diagram is selected, as shown in the table below.n If you have selected a CDM, ObjectTeam checks that class and all its associated events.TERM1="class" TERM2="checking"TERM1="event" TERM2="checking"TERM1="event message" TERM2="checking"TERM1="communication message" TERM2="checking"When you run Check Local Model from a diagram, ObjectTeam checks all selected classes; if no classes are selected, it checks all classes. The events checked depend on which diagram is active, as shown in the table below. COLS="2"COLNAME="1" COLWIDTH="198p"COLNAME="2" COLWIDTH="252p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Diagram EditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Type Of Events CheckedCOLNAME="1" VALIGN="TOP" MOREROWS="0" CD (or CDM) COLNAME="2" VALIGN="TOP" MOREROWS="0"Events of all typesCOLNAME="1" VALIGN="TOP" MOREROWS="0" COD COLNAME="2" VALIGN="TOP" MOREROWS="0"Communication MessagesCOLNAME="1" VALIGN="TOP" MOREROWS="0" SDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Trace EventsCOLNAME="1" VALIGN="TOP" MOREROWS="0" STD COLNAME="2" VALIGN="TOP" MOREROWS="0"STD Events and Event MessagesSample rulesFor example, Check Local Model includes a rule to check that no class has an attribute with the same name as a received event. It also includes a rule to ensure that special classes (such as enum and typedef) do not receive events.ID="13383"ID="checking"Check Use Case ModelCheck Use Case Model checks all UCDs.Running Check Use Case ModelTo select Check Use Case Model from the Browser, you must first select a UCD in the Information area.Sample rulesFor example, the Check Use Case Model option includes a rule to check that each UCD has exactly one initiating actor and at least one associated SD.TERM1="checking" TERM2="for code generation"ID="16460"Code Generation CheckingIntroductionFrom your design, you generate source code for an executable in a particular programming language. During code generation, ObjectTeam checks the syntax and semantics of all CDs that it is using. The results are reported in the Monitor window in which the code generator runs. Check Local ModelThe checking process is particularly important for code generation, because errors stop the generation process. Warnings do not stop the generation process, but do indicate potential problems in your diagram. To ensure that your diagrams conform to all rules and restrictions, use Check | Local Model to check your diagrams before moving them to the Implementation phase.For more informationFor more details on the code generation process, see the ObjectTeam Code Generation Guide for the programming language that you are using.TERM1="checking" TERM2="invoking"ID="14409"Running a CheckBefore you beginSave all diagrams before using any command on the Check menu.How to run a checkΣ To run a check:1 Start from the Browser or a diagram editor:- In the Information area of the Browser, select the diagrams or CDMs that you want to check.- In the diagram editor, make sure you have saved the current diagram.2 Click a command on the Check menu.ObjectTeam performs the checks, displaying the results in a Monitor window.FILENAME="00176.unk" ORIGFILE="pics/runcheck.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgcheck.fm5.mif"3 Optionally, from the Monitor window, save the results to a file or print them.Check statusTERM1="checking" TERM2="diagram check status"TERM1="diagram" TERM2="check status"Each diagram has a check status that can be included, for example, in a report. The check status is one of the following: n Checkedn Not checkedn Check failedChapter 6 ID="21937"Using the Report Tool and the Class BrowserTYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideIntroductionDuring the project, it is important to have an overview of project data. ObjectTeam provides two facilities that enable you to generate various views of that data:n The Report tooln The Class BrowserReport ToolThe Report tool generates reports on data in a particular part of your project. For example, you can run a report on all classes present in a particular diagram, system, or phase. When you run a report, the repository is queried and the output displayed in a Monitor window. You can print the report or save the report data in a file.Class BrowserThe Class Browser provides an overview of all classes and class features in a phase or system, and lets you navigate through the class hierarchy. You can print the information displayed.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27975" TYPE="XREF-TEXTCOPY"Reporting in ObjectTeam 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36951" TYPE="XREF-TEXTCOPY"Using the Class Browser 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="27975"Reporting in ObjectTeamIntroductionObjectTeam offers a set of standard reports that can be run from the Browser and diagram editors. This section covers only these standard reports. For information on the following topics, refer to the ObjectTeam Customization Guide:n Making your own reportsn Incorporating your reports in the ObjectTeam interfacen Using reports made in previous versions of ObjectTeamReporting versus document generationThe Report tool is ideal for obtaining information on the state of your project on an ad-hoc basis. If you need formal documentation on a particular part of your project, use the Document Generator instead. This tool is typically used when a phase in a project is finished. For information on the Document Generator, see the ObjectTeam Document Generation Guide.TERM1="report" TERM2="list of"TERM1="project" TERM2="reports for"TERM1="system" TERM2="reports for"TERM1="configuration" TERM2="reports for"TERM1="phase" TERM2="reports for"TERM1="diagram" TERM2="reports for"TERM1="class" TERM2="reports for"TERM1="event" TERM2="reports for"TERM1="flow" TERM2="reports for"TERM1="actor" TERM2="reports for"TERM1="use case" TERM2="reports for"TERM1="Class Definition Matrix" TERM2="reports fo"TERM1="item" TERM2="reports for"TERM1="document" TERM2="reports for"TERM1="diagram component" TERM2="reports for"TERM1="communication message" TERM2="reports for"Report optionsThe report options available to you depend on the window you are in and, in the case of the Browser, the currently active level. The following table lists all possible report options, where they can be invoked, and the information included in each. COLS="4"COLNAME="1" COLWIDTH="115p"COLNAME="2" COLWIDTH="109p"COLNAME="3" COLWIDTH="109p"COLNAME="4" COLWIDTH="283p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Report optionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Module requiredCOLNAME="3" VALIGN="TOP" MOREROWS="0"WHere VisibleCOLNAME="4" VALIGN="TOP" MOREROWS="0"contentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Corporate GroupsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Corporate ModelingCOLNAME="3" VALIGN="TOP" MOREROWS="0"CorporateCOLNAME="4" VALIGN="TOP" MOREROWS="0"Corporate group name, saved group name, project name, system name, corporate group version, saved group version, creator, comments, contents, and reused in. See the ObjectTeam Project Management Guide.COLNAME="1" VALIGN="TOP" MOREROWS="0"On ProjectsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"CorporateCOLNAME="4" VALIGN="TOP" MOREROWS="0"Project name, Configuration version names, project status, and who created the projectCOLNAME="1" VALIGN="TOP" MOREROWS="0"On ConfigurationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, ProjectCOLNAME="4" VALIGN="TOP" MOREROWS="0"Project name, Configuration version name, project status, and who created the projectCOLNAME="1" VALIGN="TOP" MOREROWS="0"On PhasesCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, ConfigCOLNAME="4" VALIGN="TOP" MOREROWS="0"Phase name, phase type, version, status, and linkCOLNAME="1" VALIGN="TOP" MOREROWS="0"On SystemsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, Config, PhaseCOLNAME="4" VALIGN="TOP" MOREROWS="0"Project name, configuration version name, system name, phase name, selected system version, and statusCOLNAME="1" VALIGN="TOP" MOREROWS="0"On DocumentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"docwriterCOLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, Config, PhaseCOLNAME="4" VALIGN="TOP" MOREROWS="0"Document name, document version, status, link, documented system, editor, and directoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Saved GroupsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Corporate ModelingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, Config, Phase, SystemCOLNAME="4" VALIGN="TOP" MOREROWS="0"Saved group name, corporate group name (if promoted), version, creator, time created, in corporate, comments, contentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"On GroupsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Corporate ModelingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, Config, Phase, SystemCOLNAME="4" VALIGN="TOP" MOREROWS="0"Group name, status, link, explicit files, explicit subs, filters/selectorsCOLNAME="1" VALIGN="TOP" MOREROWS="0"On FilesCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, Config, Phase, System, DocumentCOLNAME="4" VALIGN="TOP" MOREROWS="0"File name, file type, version, status, in corporate, linkCOLNAME="1" VALIGN="TOP" MOREROWS="0"On CDMsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, SystemCOLNAME="4" VALIGN="TOP" MOREROWS="0"CDM name, referred to in diagram, in system versionCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Unreferenced CDMsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, SystemCOLNAME="4" VALIGN="TOP" MOREROWS="0"CDM name. (A CDM becomes unreferenced if the name of its class is changed directly in the class symbol.)COLNAME="1" VALIGN="TOP" MOREROWS="0"On Items and PropertiesCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Corporate, Project, Config, Phase, System, Document, All diagram editorsCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item name, item type, status, scope/qualifier, property name, property valueCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Components and PropertiesCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"System, All diagram editorsCOLNAME="4" VALIGN="TOP" MOREROWS="0"Component name, component type, status, scope/qualifier, property name, property valueCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Classes COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, System, CDCOLNAME="4" VALIGN="TOP" MOREROWS="0"Class name, Properties, Attributes, OperationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Class GeneralizationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, System, CDCOLNAME="4" VALIGN="TOP" MOREROWS="0"Base class name, base class type, generalization type, derived class name, derived class typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Missing OperationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"System, CDCOLNAME="4" VALIGN="TOP" MOREROWS="0"Class, missing operationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"On CCD CommunicationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"OMTCOLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, System, CCDCOLNAME="4" VALIGN="TOP" MOREROWS="0"Component name, component type, I/O, message, component name, diagram nameNote: Available only if the omt module is active. See Appendix A, OMT Support, for more information about the omt module and the CCD.COLNAME="1" VALIGN="TOP" MOREROWS="0"On CommunicationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"List of all communications, e.g., in CODsCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Events and MessagesCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, System, CCD, STDCOLNAME="4" VALIGN="TOP" MOREROWS="0"From component, event, to component, diagram nameNote: See Appendix A, OMT Support, for more information about the CCD.COLNAME="1" VALIGN="TOP" MOREROWS="0"On FlowsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, System, DFDCOLNAME="4" VALIGN="TOP" MOREROWS="0"Data flow: From type, from node; Control flow: Flow; Result flow: To node; Update flow: To typeNote: Available only if the omt module is active. See Appendix A, OMT Support, for more information about the omt module and the DFD.COLNAME="1" VALIGN="TOP" MOREROWS="0"On ActorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, System, UCDCOLNAME="4" VALIGN="TOP" MOREROWS="0"For each actor, the communication associations to or from the actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Use CasesCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Phase, System, UCDCOLNAME="4" VALIGN="TOP" MOREROWS="0"For each use case, the communication associations to or from it and any use case generalizations associated with itCOLNAME="1" VALIGN="TOP" MOREROWS="0"On Roles and UsersCOLNAME="2" VALIGN="TOP" MOREROWS="0"SecurityCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"Role, SecurityLevel, User, UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"On SecurityCOLNAME="2" VALIGN="TOP" MOREROWS="0"SecurityCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"List of access rules for each controlled objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"On CategoriesCOLNAME="2" VALIGN="TOP" MOREROWS="0"SmalltalkCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"List of all categories and their classesReport scopeAs shown in the previous table, some reports can be called from different windows or from different Browser levels. Where you run a report from determines its scope. For example, if you run a Report On Classes within the CD editor, the report includes only those classes in the current diagram. If you run Report On Classes on Phase level in the Browser, the report includes all classes in the current phase.Report headersTERM1="report" TERM2="header information"The header of a standard report contains the following general information:COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FieldCOLNAME="2" VALIGN="TOP" MOREROWS="0"ShowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ReportCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the reportCOLNAME="1" VALIGN="TOP" MOREROWS="0"DateCOLNAME="2" VALIGN="TOP" MOREROWS="0"The date the report was createdCOLNAME="1" VALIGN="TOP" MOREROWS="0"CreatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"The user running the reportCOLNAME="1" VALIGN="TOP" MOREROWS="0"ProjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the current projectCOLNAME="1" VALIGN="TOP" MOREROWS="0"Configuration versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the current configuration versionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Phase versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the current phaseCOLNAME="1" VALIGN="TOP" MOREROWS="0"System versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the current systemThe names of the project, configuration version, phase version, and system version are only output if you are on one of these levels.The following is an example of a report header: -------------------------------------------------------------------------------------Object | Report : Classes Date : 29 Aug 1997 12:04:59Team | Creator : docu7.1.1 | Project : hlkproj Phase Version : Analysis.HLKConfig:1 | Configuration Version: HLKConfig.1 SystemVersion : HLKSystem.HLKConfig.1-------------------------------------------------------------------------------------In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19259" TYPE="XREF-TEXTCOPY"Running a Report 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29428" TYPE="XREF-TEXTCOPY"Controlling Output in the Monitor Window 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8ID="19259"Running a ReportIntroductionReports can be run from the Browser or from the diagram editors. For a list of all available reports, see REFID="27975" TYPE="XREF-TEXTCOPY"Reporting in ObjectTeam.How to run a reportΣ To run a report, select Utilities | Reports | On report option.TERM1="report" TERM2="producing"TERM1="Reports (Utilities menu)"The report is output in a Monitor window. FILENAME="00177.unk" ORIGFILE="pics/runrport.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"How to run a report on propertiesThe following reports take the name of a property as an argument:n Report On Items and Properties n Report On Components and PropertiesIf you specify a property name, the report includes only those items or components for which the specified property is set. If you do not specify a property name, the report inludes all items or components.Σ To run one of the above reports:1 Select Utilities | Reports | On Items and Properties, or Utilities | Reports | On Components and PropertiesA dialog box appears.2 Type the short name of one or more properties, separated by spaces, and click OK.The report is output in a Monitor window.For a list of short names of ObjectTeam properties, see REFID="22035" TYPE="XREF-TEXTCOPY"Specifying Properties.ID="29428"Controlling Output in the Monitor WindowIntroductionYou can control the output of a report in the Monitor window in two ways:n Setting ObjectTeam options in the Browser or Monitor windown Using the control selection boxes in the Monitor windowFor information on how to make your option settings available to other users, see the discussion of the user environment in the ObjectTeam Project Management Guide.ID="report"ID="Printer Setup (Options menu)"How to set the line length and page lengthΣ To set the line length and page length of your report:1 In the Browser or Monitor window, select Options | Printer Setup | Text.The Printer Setup dialog box appears.Note: Selecting Options | Printer Setup in the Diagram Editors brings up the Printer Setup dialog box for the default graphical printer, which does not affect the output of your report. 2 Specify the desired line length and page length, and click OK.The next time you open a Monitor window and run a report, ObjectTeam uses the new settings. (The new settings do not affect currently open Monitor windows.)Line lengthReports are designed to fit the default line length of 132 characters. Specifying a shorter line causes wrapping, which may make the report difficult to read.How to scroll through a reportReports are usually wider and longer than the default Monitor window. To view the entire contents of the report, enlarge the window or use the scroll bars. How to suspend output of a reportID="Suspend Output (Options menu)"Σ To temporarily stop the output from scrolling in the Monitor window while it is being produced, select Options | Suspend Output. Note: The report continues running in the background. When you cancel Suspend Output, the output continues scrolling.How to stop a report in progressID="Terminate (Process menu);Abort (Process menu);Kill (Process menu)"Σ To stop a report in progress, in the Monitor window, select Process | Terminate.Note: On UNIX systems three termination options are available in the process menu.COLS="2"COLNAME="1" COLWIDTH="123p"COLNAME="2" COLWIDTH="322p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"TerminateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sends a SIGTERM signal to the process. The process is aborted through its own handler.COLNAME="1" VALIGN="TOP" MOREROWS="0"AbortCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sends a SIGQUIT signal to the process. The process is aborted through its own handler and a core is dumped.COLNAME="1" VALIGN="TOP" MOREROWS="0"KillCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sends a SIGKILL signal to the process. The process is aborted by the operating system. No locks on tables or files are removed.How to print your reportID="report"Σ To print your report, in the Monitor window select File | Print.The output is sent to the default printer.How to ID="16590"set your default printerID="Printer Setup (Options menu)"Σ To set the default printer:1 In the Monitor window, select Options | Printer Setup.The Printer Setup dialog box appears.FILENAME="00178.unk" ORIGFILE="pics/pr_setup.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"2 Specify the Printer Command, and click OK.AlternativeYou can also set the default printer from the Browser using Options | Printer Setup | Text, as described in REFID="35959" TYPE="XREF-TEXTCOPY"Printing.How to save your reportID="Save Output (File menu)"Once the report is finished, you can save it to a file. Σ To save your report:1 In the Monitor window, select File | Save Output.A dialog box appears.2 Select a directory, type the name of the log file, and click OK.When your report is finishedID="Exit (File menu)"ID="Reuse (Options menu), Monitor window;Clear Screen (Options menu), Monitor window"Once the report is finished, you can close the Monitor window or keep it open for further use.Σ To close the Monitor window, select File | Exit.If you wish to leave the window open, you have two options:n Options | Reuse. A check mark next to this option directs ObjectTeam to reuse the window. Clearing the check mark locks the window and prevents ObjectTeam from using it for output from any other tool. If you run another report, a separate Monitor window is opened.n Options | Clear Screen. A check mark next to this option directs ObjectTeam to clear the window before using it for output. Clearing the check mark causes ObjectTeam to concatenate other reports or output to the end of the current contents of the window. ID="36951"Using the Class BrowserIntroductionThe Class Browser allows you to examine the classes in the current phase or system, and their associations, attributes, and operations.Note: Only classes that appear in a CD appear in the Class Browser. If a class is defined by a CDM but does not appear in a CD, it does not appear in the Class Browser.How to TERM1="Class Browser" TERM2="starting"TERM1="Class Browser (Utilities menu)"start the Class BrowserΣ To start the Class Browser in the Browser, or in any Diagram Editor, select Utilities | Class Browser.The Class Browser window appears. If you started the Class Browser on Phase level, all classes in that phase are displayed in the Classes list. If you started the Class Browser on System level or from a diagram editor, only the classes in that system are displayed in the Classes list.FILENAME="00179.unk" ORIGFILE="pics/cl_brows.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"Layout of the Class Browser windowTERM1="superclass" TERM2="in Class Browser"TERM1=""TERM1="subclass" TERM2="in Class Browser"TERM1=""TERM1="class" TERM2="in Class Browser"TERM1=""TERM1="attribute" TERM2="in Class Browser"TERM1=""TERM1="operation" TERM2="in Class Browser"TERM1="association" TERM2="in Class Browser"The Class Browser presents class information in five list boxes.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"List boxCOLNAME="2" VALIGN="TOP" MOREROWS="0"Information FormatCOLNAME="1" VALIGN="TOP" MOREROWS="0"SuperclassesCOLNAME="2" VALIGN="TOP" MOREROWS="0"class_name COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassesCOLNAME="2" VALIGN="TOP" MOREROWS="0"class_name COLNAME="1" VALIGN="TOP" MOREROWS="0"SubclassesCOLNAME="2" VALIGN="TOP" MOREROWS="0"class_name COLNAME="1" VALIGN="TOP" MOREROWS="0"Features (Attributes)COLNAME="2" VALIGN="TOP" MOREROWS="0"attribute_name: attribute_type The following implicit properties are displayed:n class attributes ($)n derived attributes (/)n keys (*) n initial values (= value)COLNAME="1" VALIGN="TOP" MOREROWS="0"Features (Operations)COLNAME="2" VALIGN="TOP" MOREROWS="0"operation_name(parameter_list): operation_type where parameter_list is a sequence of (comma-separated) parameters, each having the format parameter_name: parameter_type.The following implicit properties are displayed:n class operations ($) n abstract operations ({abstract})COLNAME="1" VALIGN="TOP" MOREROWS="0"AssociationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Binary and n-ary associations are formatted as follows:n Binary: [qualifier]---association_name---role---class_name n N-ary: ---association_name---role---class_name, ---role---class_name, etc.The following implicit properties are displayed:n many (represented by an asterisk)n optional (represented by an O)n mandatory (no symbol)n derived associations (/) How to open a classTERM1="Open (File menu)" TERM2="Class Browser"When you start the Class Browser or after you reload classes, only the Classes list contains data. To populate the other list boxes, you open one of the listed classes.Σ To open a class, double-click a class name in the Classes list. Alternatively, select a class name in the Classes list and select File | Open.The other list boxes are filled with information related to the opened class. How to display inherited informationTERM1="Flat (View menu in Class Browser)"By default, the Class Browser displays only the attributes and operations of the selected class, and the Associations list displays only the class at the other end of the association. Sometimes, it is useful to see the information classes inherit from their parent classes.Σ To view inherited information, select View | Flat.All features and association entries are prefixed with the class name they belong to. The Associations list displays the classes at both ends of associations.Σ To return to the default view, select View | Flat again.How to sort entriesTERM1="Class Browser" TERM2="sorting entries"TERM1="Sort Case Sensitive (Options menu in Class Browser)"Entries in the display area are sorted alphabetically, but are not case sensitive. Σ To make the sorting case sensitive, select Options | Sort Case Sensitive.For details on saving option settings to your user environment file, see the ObjectTeam Project Management Guide.How to open a CDIf you want to edit the diagram in which a class appears, you can open the CD directly from the Class Browser.Σ To open a CD, select Utilities | Edit Class Diagram. ObjectTeam opens the CD editor and displays the CD in which the selected class appear.Note: If the selected class appears in more than one diagram, ObjectTeam prompts you to select the CD you want to edit.How to TERM1="Class Browser" TERM2="updating"reload classesYou can leave the Class Browser open while you work in a Diagram Editor or in the Browser. If you add, delete, or modify classes, you can update the Class Browser by selecting File | Reload Classes.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41148" TYPE="XREF-TEXTCOPY"Using Filters 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19543" TYPE="XREF-TEXTCOPY"Navigating Between Classes 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31963" TYPE="XREF-TEXTCOPY"Searching 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10311" TYPE="XREF-TEXTCOPY"Examining Items 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14379" TYPE="XREF-TEXTCOPY"Printing from the Class Browser 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10544" TYPE="XREF-TEXTCOPY"Changing the Class Browser Font 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22ID="41148"Using FiltersIntroductionTERM1="Class Browser" TERM2="filtering"TERM1="filter" TERM2="in Class Browser"You can use filters to restrict the information displayed in the Features list. Filters are helpful when you have many attributes or operations. You set filters using the Filter Features dialog box.How filters workThe Filter Features dialog box lets you set filter elements that specify which attributes and operations to display in the Features list. You can filter attributes or operations by name, data type, or by the value of any of their item properties. When you assign a value to a filter element, only attributes or operations matching the specified value are displayed in the Class Browser. For example, if you set the value of the attribute filter element Type to int, only attributes of type integer are displayed in the Class Browser.For each filter element, the Filter Features dialog box displays:n The name of the filter element (for example, name, type, item property name)n Whether this filter element is switched onn The current value of the filterHow to set a filterTERM1="Filter Features (View menu in Class Browser)"Σ To set a filter:1 Select View | Filter Features.The Filter Features dialog box appears.FILENAME="00180.unk" ORIGFILE="pics/cb_filt.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"2 Select either Attributes or Operations from the list.The list of valid filter elements is displayed in the Filter Settings list.Note: Note that the item properties listed here include both those set explicitly using the Edit Properties dialog box and those set implicitly by entering certain special characters in your diagram.3 Select the Filter Enabled check box.This check box switches on all of the filter settings specified in the Filter Settings list box. Note: Because you can switch on filters separately for class attributes and class operations, you can enable filters for either one, or both if you prefer.4 Select a property name in the list box and click Set Filter Element. Alternatively, double-click the property name.The Set Filter Element dialog box appears.FILENAME="00181.unk" ORIGFILE="pics/cbf_valu.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"5 Specify a value for the filter.For text values, you can use a wildcard string using glob-style pattern matching. For Boolean values, type a 0 or 1.6 Click the Enabled check box and click OK.This setting provides greater control of the filter set in Step 3. In the Filter Settings list box, the filter now shows Yes in the Enabled field, and the entered value in the Value field. 7 Click OK to apply your settings to the Class Browser.To activate the filters but keep the Filter Features dialog box open, click Apply. Note: To discard any changes you have made to the settings in the Filter Features dialog box, click Reset. This command sets the filters to the values in effect when the dialog box was opened. Click Cancel to reset the values and quit the dialog box.ObjectTeam updates the information in the list boxes in the Class Browser to reflect your filter settings. TERM1="class" TERM2="navigating between"TERM1="Class Browser" TERM2="navigating between classes"TERM1="navigating" TERM2="between classes"ID="19543"Navigating Between ClassesIntroductionYou can navigate your class hierarchy in the Class Browser by opening classes in the Subclasses, Superclasses, Features and Associations lists.What you can openWhen you double-click an entry in the Features or Associations lists, the Class Browser looks for a class name in the entry. For example, classes sometimes appear in attribute entries as attribute data types or in operation entries as parameter data types. If the Class Browser cannot find a class name, it displays a message. The class at the other end of an association is always displayed for associations. In Flat view, class names prefix all entries so you can open any entry. How to navigate between classesΣ To open a class in the Superclasses, Classes, or Subclasses lists, open a class name.The other list boxes display information for that class.Σ To open a class in the Features list, double-click an attribute or operation entry. If a class name appears in the entry, it is selected and opened.Σ To open a class at the other end of an association, double-click an association entry.Note: If you are in Flat view, a list displays with a list of class names at each end of the selected association. Click a class name and click OK.The class at the other end of the association is opened.ID="31963"SearchingHow to search for a classΣ To search for a class:1 Select File | Find Class.The Find Class dialog box appears.FILENAME="00182.unk" ORIGFILE="pics/findclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"2 Type the name of the class to be found, and click OK.The first class that matches the specified name is selected and opened.Σ To search for multiple classes:1 Select File | Find Class.The Find Class dialog box appears.2 Type a search string, and click Next.The next class that matches your criteria is selected and opened.Note: The search string should use Tcl glob-style pattern matching. For details on this syntax, see Tcl and the Tk Toolkit by John Ousterhout.By default, the search is not case sensitive. To make the search case sensitive, click the Case Sensitive check box.How to search for an attribute or operationΣ To search for a class attribute or operation:TERM1="attribute" TERM2="finding"TERM1="operation" TERM2="finding"TERM1="Find Feature (File menu in Class Browser)"1 Select File | Find Feature.The Find Feature dialog box appears.FILENAME="00183.unk" ORIGFILE="pics/findfeat.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"2 Click the Attributes or Operations check boxes. You can choose either or both of them.3 Specify the name of the attribute or operation to be found and click OK.The first class containing the specified feature is selected and opened.Σ To search for multiple class attributes or operations:1 Select File | Find Feature.The Find Feature dialog box appears.2 Select the Attributes or Operations check boxes.3 Type a search string and click Next.The next class containing the specified feature is selected and opened.Note: The search string should use Tcl glob-style pattern matching. For details on this syntax, see Tcl and the Tk Toolkit by John Ousterhout.By default, the search is not case sensitive. To make the search case sensitive, click the Case Sensitive check box.To apply feature filtering to the search, click the Use Feature Filters check box. Only those features that come through the filter are displayed. For details on setting filters, see REFID="41148" TYPE="XREF-TEXTCOPY"Using Filters.ID="10311"Examining ItemsTERM1="item" TERM2="displaying"TERM1="displaying" TERM2="items"TERM1="Class Browser" TERM2="displaying items"IntroductionYou can use the Class Browser to display more detailed information for items. How to examine the properties of a selected itemTERM1="property" TERM2="displaying in Class Browser"TERM1="Show Properties (Item menu in Class Browser)"Σ To examine the properties of a particular item:1 Select an entry in one of the list boxes.2 Select Item | Show Properties. The Show Properties dialog box appears. This is the same dialog box that is displayed when you select Item | Show Properties in the Diagram Editors.For details on setting and viewing item properties, see REFID="22035" TYPE="XREF-TEXTCOPY"Specifying Properties.How to examine the scope of a selected itemTERM1="scope of item" TERM2="displaying"TERM1="Show Scope (Item menu in Class Browser)"TERM1="item" TERM2="displaying"TERM1="item" TERM2="scope of"Σ To examine the scope of a particular item:1 Select an entry in one of the list boxes.2 Select Item | Show Scope. Note: You can view the scope of only one item at a time. So if the entry contains more than one item (for example an association might contain an association name, role name, and class name), the Item Selection dialog box appears, allowing you to choose the item whose scope you want to see. Click the item name and click OK.The Show Scope dialog box appears. FILENAME="00184.unk" ORIGFILE="pics/showscop.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"ID="14379"TERM1="printing" TERM2="from Class Browser"TERM1=""TERM1="Class Browser" TERM2="printing"Printing from the Class BrowserIntroductionYou can print the data of the currently opened class to the default printer. You can change the default printer option settings.For details on saving option settings to your user environment file, see the ObjectTeam Project Management Guide.TERM1="class" TERM2="printing"How to print class dataΣ To print class data, select File | Print View. The class data is printed on the default printer.How to set the default printerΣ To set the default printer:1 Select Options | Printer Setup.The Printer Setup dialog box appears.FILENAME="00185.unk" ORIGFILE="pics/pr_setup.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"2 Specify the print command in the Printer Command field and click OK.The next time you print, this print command is used.AlternativeYou can also set the default printer from the Browser using Options | Printer Setup | Text, as described in REFID="35959" TYPE="XREF-TEXTCOPY"Printing.TERM1="changing" TERM2="Class Browser fonts"TERM1="Class Browser" TERM2="changing font"TERM1="Font (Options menu)" TERM2="Class Browser"ID="10544"Changing the Class Browser FontIntroductionYou can specify the fonts used in the Class Browser lists by changing your font option settings.To save option settings to your user environment file, see the ObjectTeam Project Management Guide.How to change the Class Browser fontΣ To change the Class Browser font:1 Select Options | Font...The Class Browser Font dialog box appears. The following figures show both the Windows version (first) and the UNIX version (second).FILENAME="00186.unk" ORIGFILE="pics/cb_fontw.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"FILENAME="00187.unk" ORIGFILE="pics/cb_fontu.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/mgreport.fm5.mif"2 Select a font family, style, and size. Then click OK.ObjectTeam applies the specified font. Appendix A TYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideID="39383"OMT SupportIntroductionThe Unified Modeling Language (UML) has been positioned by James Rumbaugh and others as the legitimate successor of the Object Modeling Technique (OMT). Previous releases of ObjectTeam supported OMT and future releases of ObjectTeam will support UML. To support our customers during the transition from OMT to UML, the current release of ObjectTeam supports both.OMT moduleThe ObjectTeam module OMT provides the menu items and Tcl code required to create and use diagrams supported by the OMT methodology. Therefore, this module must be active if you want to work with ObjectTeam according to this methodology.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationATTRNAME="MIFconds"C++See ObjectTeam Installation GuideATTRNAME="MIFconds"C++ATTRNAME="MIFconds"C++ for details on how to activate a module.DiagramsBy activating the OMT module you add the following diagrams to ObjectTeam:n REFID="41568" TYPE="XREF-TEXTCOPY"Class Communication Diagramn REFID="20188" TYPE="XREF-TEXTCOPY"Data Flow Diagramn REFID="41861" TYPE="XREF-TEXTCOPY"Message Generalization DiagramThe differences between UML and OMT diagrams are the following:COLS="2"COLNAME="1" COLWIDTH="168p"COLNAME="2" COLWIDTH="280p"COLNAME="1" VALIGN="TOP" MOREROWS="0"UML DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"OMT EquivalentCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19294" TYPE="XREF-TEXTCOPY"Class DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class Association DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13208" TYPE="XREF-TEXTCOPY"Collaboration DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"These diagrams replace some of the functionality represented by the CCD and MGD. Although CODs remain available even if you choose to use OMT notation, do NOT use both CODs and CCDs in the same project.COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12305" TYPE="XREF-TEXTCOPY"Sequence DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event Trace DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34271" TYPE="XREF-TEXTCOPY"State Transition DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"State Transition DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17920" TYPE="XREF-TEXTCOPY"Use Case DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use Case DiagramUML and OMT lookObjectTeam allows you to choose between the UML or the OMT notation in the following diagram editors:COLS="2"COLNAME="1" COLWIDTH="168p"COLNAME="2" COLWIDTH="280p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"OMT EquivalentCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19294" TYPE="XREF-TEXTCOPY"Class DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class Association DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12305" TYPE="XREF-TEXTCOPY"Sequence DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event Trace DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34271" TYPE="XREF-TEXTCOPY"State Transition DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"State Transition DiagramsYou can switch from UML look to OMT look, or vice versa, using the commands Options | OMT Look and Options | UML Look in the diagram editors.Note: The module OMT does not need to be active for switching looks.Future support for OMTIf you choose OMT in the current release, be aware that you can lose information when you upgrade to a future release of ObjectTeam:n The Class, Sequence, State, and Use Case Diagrams are also supported for UML. Information specified in these diagrams will be preserved during future ObjectTeam upgrades.n The Class Communication, Data Flow, and Message Generalization diagrams are not supported for UML. Information specified in these diagrams will be lost during future ObjectTeam upgrades. ID="25359"Relationships Among DiagramsIn ObjectTeam, the components in one diagram are often related to the components in another. For example, an actor in a UCD is a class in a CD. This has two consequences for your work in ObjectTeam:n Navigation. ObjectTeam provides special navigation paths that allow you to move from a component in one diagram to another related diagram. See REFID="33913" TYPE="XREF-TEXTCOPY"Navigating Between Diagrams on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7 for more information.n Semantic checking. The following table shows the semantic equivalence of diagram follows. The Check utility ensures that your ObjectTeam model respects these semantics. For a complete list of the checks performed for each diagram, see the ObjectTeam Customization Guide.COLS="7"COLNAME="1" COLWIDTH="72p"COLNAME="2" COLWIDTH="72p"COLNAME="3" COLWIDTH="90p"COLNAME="4" COLWIDTH="72p"COLNAME="5" COLWIDTH="72p"COLNAME="6" COLWIDTH="72p"COLNAME="7" COLWIDTH="108p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="3" VALIGN="TOP" MOREROWS="0"DFDCOLNAME="4" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="5" VALIGN="TOP" MOREROWS="0"SDCOLNAME="6" VALIGN="TOP" MOREROWS="0"STDCOLNAME="7" VALIGN="TOP" MOREROWS="0"UCDCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"classCOLNAME="3" VALIGN="TOP" MOREROWS="0"actor or data storeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"objectCOLNAME="6" VALIGN="TOP" MOREROWS="0"classCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"actorCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"initiatorCOLNAME="6" VALIGN="TOP" MOREROWS="0"classCOLNAME="7" VALIGN="TOP" MOREROWS="0"actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"messageCOLNAME="3" VALIGN="TOP" MOREROWS="0"data process, control flow, or update flowCOLNAME="4" VALIGN="TOP" MOREROWS="0"messageCOLNAME="5" VALIGN="TOP" MOREROWS="0"eventCOLNAME="6" VALIGN="TOP" MOREROWS="0"event or event messageCOLNAME="7" VALIGN="TOP" MOREROWS="0"communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"qualified SDCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"use caseCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"data flowCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19294" TYPE="XREF-TEXTCOPY"Class Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41568" TYPE="XREF-TEXTCOPY"Class Communication Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20188" TYPE="XREF-TEXTCOPY"Data Flow Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41861" TYPE="XREF-TEXTCOPY"Message Generalization Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12305" TYPE="XREF-TEXTCOPY"Sequence Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34271" TYPE="XREF-TEXTCOPY"State Transition Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17920" TYPE="XREF-TEXTCOPY"Use Case Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25261" TYPE="XREF-TEXTCOPY"Navigation Between Diagrams Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22COLNAME="1" VALIGN="TOP" MOREROWS="0"Summary of Notation Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'46ID="19294"Class DiagramIntroductionThe Class Diagram supports UML and OMT notation. This section describes the diagram symbols used when you select OMT notation using Options | Diagram.Control panelThe following table shows the OMT symbols as they appear in the control panel of the Class Diagram.Note: The bold names indicate the symbols that are unique to OMT. This section describes only these OMT symbols. The remaining symbols are the same in OMT and UML and are described in REFID="19294" TYPE="XREF-TEXTCOPY"Class Diagram on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3. COLS="4"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="90p"COLNAME="3" COLWIDTH="90p"COLNAME="4" COLWIDTH="144p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00188.unk" ORIGFILE="pics/icclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00189.unk" ORIGFILE="pics/icnary.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"N-ary associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"More classesCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00190.unk" ORIGFILE="pics/icmore.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00191.unk" ORIGFILE="pics/icnote.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"NoteCOLNAME="1" VALIGN="TOP" MOREROWS="0"VertexCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00192.unk" ORIGFILE="pics/icvert.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00193.unk" ORIGFILE="pics/icassc.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"AggregationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00194.unk" ORIGFILE="pics/icaggr.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00195.unk" ORIGFILE="pics/icqual.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"Qualified associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Qualified aggregationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00196.unk" ORIGFILE="pics/icqaggr.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00197.unk" ORIGFILE="pics/icnaryc.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"N-ary connectorCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConstraintCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00198.unk" ORIGFILE="pics/icconstr.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00199.unk" ORIGFILE="pics/iclnkc2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"Association class connectorCOLNAME="1" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00200.unk" ORIGFILE="pics/icgen2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00201.unk" ORIGFILE="pics/icogen2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"Overlapping generalizationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Note connectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00202.unk" ORIGFILE="pics/icnotec.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00203.unk" ORIGFILE="pics/icprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"PropagationCOLNAME="1" VALIGN="TOP" MOREROWS="0"SelectCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00204.unk" ORIGFILE="pics/icselect.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"Begin mandatory associationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00205.unk" ORIGFILE="pics/icmand2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00206.unk" ORIGFILE="pics/icmand2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"End mandatory associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Begin optional associationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00207.unk" ORIGFILE="pics/icopt2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00208.unk" ORIGFILE="pics/icopt2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"End optional associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Begin many associationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00209.unk" ORIGFILE="pics/icmany2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00210.unk" ORIGFILE="pics/icmany2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="4" VALIGN="TOP" MOREROWS="0"End many associationLink attribute boxIn the current release of ObjectTeam, the link attribute box is not available anymore, neither in OMT, nor in UML notation. You can use an association as class instead to model the same situation For more informationSee REFID="27609" TYPE="XREF-TEXTCOPY"Association class connector on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11.Container classTERM1="container class" TERM2="symbol in CAD"TERM1="class" TERM2="container"In the current release of ObjectTeam, the container class is not available anymore, neither in OMT, nor in UML notation. You can use a regular class instead to model a container class.For more informationSee REFID="39851" TYPE="XREF-TEXTCOPY"Class on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4.Association class connectorAssociation class connectors are similar in OMT and UML. These are the only differences:n The notation:COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OMTCOLNAME="2" VALIGN="TOP" MOREROWS="0"UMLCOLNAME="1" VALIGN="TOP" MOREROWS="0"FILENAME="00211.unk" ORIGFILE="pics/iclnkc2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00212.unk" ORIGFILE="pics/iclnkc.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"n In OMT, an association class connector can connect either an attribute or class to an association. In UML, an association class connector connects a class to an association.For more information, see REFID="27609" TYPE="XREF-TEXTCOPY"Association class connector on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11.ID="26078"GeneralizationSemantically, generalizations are the same in OMT and UML. The only difference is the notation.COLS="3"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="90p"COLNAME="3" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type of GeneralizationCOLNAME="2" VALIGN="TOP" MOREROWS="0"OMTCOLNAME="3" VALIGN="TOP" MOREROWS="0"UMLCOLNAME="1" VALIGN="TOP" MOREROWS="0"DisjoinCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00213.unk" ORIGFILE="pics/icgen2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00214.unk" ORIGFILE="pics/icgen.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="1" VALIGN="TOP" MOREROWS="0"OverlappingCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00215.unk" ORIGFILE="pics/icogen2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00216.unk" ORIGFILE="pics/icogen.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"For more information, see REFID="33802" TYPE="XREF-TEXTCOPY"Generalization on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12.MultiplicitySemantically, multiplicity of associations is the same in OMT and UML. The only difference is the notation.COLS="3"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="90p"COLNAME="3" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="2" VALIGN="TOP" MOREROWS="0"OMTCOLNAME="3" VALIGN="TOP" MOREROWS="0"UMLCOLNAME="1" VALIGN="TOP" MOREROWS="0"MandatoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00217.unk" ORIGFILE="pics/icmand2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00218.unk" ORIGFILE="pics/icmand.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00219.unk" ORIGFILE="pics/icopt2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00220.unk" ORIGFILE="pics/icopt.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="1" VALIGN="TOP" MOREROWS="0"ManyCOLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00221.unk" ORIGFILE="pics/icmany2.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00222.unk" ORIGFILE="pics/icmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"In UML, the multiplicity of the association is always indicated by a multiplicity specification that appears above the association connector.In OMT, you can add a multiplicity specification after adding the association. For example, to indicate a multiplicity of 2 or more, add the following multiplicity specification to a many association: 2+.For more information, see REFID="19961" TYPE="XREF-TEXTCOPY"Associations on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7.ID="41568"Class Communication DiagramIntroductionThe Class Communication Diagram (CCD) is not a standard OMT diagram. It is an ObjectTeam diagram used to support OMT. This diagram is added to ObjectTeam when you activate the omtdgms module, as described in the ObjectTeam Customization Guide.Warning: Information specified in the CCD will be lost during future ObjectTeam upgrades.PurposeYouTERM1="Class Communication Diagram" use CCDs to focus on the interaction and communication between classes and to identify the boundaries of the system. The diagrams show the communication between classes or groups of classes.In a CCD, the communication patterns between classes are modeled by grouping the classes into subjects. The patterns between the individual classes of the subject are modeled in separate diagrams. You can use the CCD to generalize a number of communication sequences. CCDs are the class-level equivalent of SDs. They are similar to the Event Flow Diagrams in the OMT book.When drawing a CCD, the following points are of interest:n Which classes can be grouped into subjectsn How these subjects communicaten How the classes of the subjects communicateThe structure of the messages that make up the communication is not of interest.Example CCDThe following figure shows a simple CCD. A member of a video store communicates with a clerk to rent and return products.FILENAME="00223.unk" ORIGFILE="pics/ccdexamp.gif" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"SymbolsTERM1="Class Communication Diagram" TERM2="symbols in"TERM1="symbols" TERM2="in CCD"IntroductionThis section describes the symbols used in the CCD. The following illustration shows the symbols as they appear in the diagram Control Panel:FILENAME="00224.tif" ORIGSEQ="156" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"Note: The Vertex, Select, Note, and Note connector symbols are common to all diagrams. They are described in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams.ClassTERM1="class" TERM2="symbol in CCD"A class is a group of objects with similar properties (attributes), common behavior (operations), common relationships to other objects, and common semantics. Classes are arranged into hierarchies. They share common structure and behavior and are associated with other classes. You can distinguish abstract classes from concrete classes. An abstract class has no direct instances but its descendant classes do.FILENAME="00225.unk" ORIGFILE="pics/class" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"Objects in a class have the same attributes and behavior patterns. Most objects distinguish themselves through differences in their attribute values and relationships to other objects. Decomposing classesTo specify the internal communication of a class, actor, or subject, you break down that component into smaller units in a CCD. You can continue this process of breaking down classes, actors, or subjects until you reach a level on which further decomposition seems impossible or meaningless.TERM1="Class Communication Diagram" TERM2="decomposition of"To decompose an actor, class, or subject, open one of these diagram components. The editor window clears and loads a new CCD that contains at least the opened component. You can now draw a CCD for the opened component.Class referenceTERM1="class reference" TERM2="symbol in CCD"TERM1="class" TERM2="reference to existing"A class reference represents any class that exists in another CCD, whether in the same system or a different one.FILENAME="00226.unk" ORIGFILE="pics/clsref" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"Container classTERM1="container class" TERM2="symbol in CCD"A container class implements general purpose data structures. It refers to a possible actual implementation of the class. The container class refers to the organization or structure of the data so that algorithms can use it. These data structures are generally part of the library that comes with an object oriented programming language. A general purpose data structure is an instance of a container class. Possible data structures are sets, bags, dynamic arrays, lists, queues, stacks, dictionaries, associations, and trees. Container classes serve as a framework for organizing collections of other objects.FILENAME="00227.unk" ORIGFILE="pics/ctcls" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ActorTERM1="actor" TERM2="symbol in CCD"An actor is a system boundary. It represents the interaction of the system with individuals or with another system. The actor is a kind of initiator. This initiator indicates that information or some other kind of response is required from the system.FILENAME="00228.unk" ORIGFILE="pics/actor" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"SubjectTERM1="subject" TERM2="symbol in CCD"TERM1="class" TERM2="subject group"A subject is a group of classes that belong to the same CAD. So, a subject in a CCD represents a CAD. It can also represent a whole separate system. For large projects, it is useful to define all the subjects as separate systems.FILENAME="00229.unk" ORIGFILE="pics/subject" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"New systemTERM1="system" TERM2="creating from CCD"When you open a subject with scope phase, you can create a new system. If you choose to do so, a new empty CCD is also created in the new system. The name of the new system is the name of the opened subject.Communication messageTERM1="communication message" TERM2="symbol in CCD"TERM1="message" TERM2="symbol in CCD"A communication message is a connector between classes, subjects and actors. It calls the operations that the classes contain, but does not represent the actions themselves. It tells a class to do what it was designed to do.FILENAME="00230.unk" ORIGFILE="pics/commmsg" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="20188"Data Flow DiagramTERM1="Data Flow Diagram"IntroductionThe Data Flow Diagram (DFD) is an OMT diagram that is added to ObjectTeam when you activate the omtdgms module, as described in the ObjectTeam Customization Guide.Warning: Information specified in the DFD will be lost during future ObjectTeam upgrades.PurposeIn OMT, you use DFDs to model what happens with data. You model the system as a network of processes that transform and exchange data. The DFDs show the flow of data values from their sources in objects through the processes that transform them to their destination in other objects. Values can include input values, output values, and internal data stores. Control information is only shown in the form of control flows. The following table lists the important elements of DFDs:COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SymbolCOLNAME="2" VALIGN="TOP" MOREROWS="0"Stands ForCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data processCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data processingCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data flowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data flow or the exchange of data between processesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data storeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data storageCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object producing and consuming dataGuidelinesYou can follow certain guidelines to draw meaningful DFDs.n Optional input flows do not exist. A process can perform its function only if all its input flows are always available. n You cannot assign the same data to two output flows from the same process. If a process produces more than one data flow, these flows are mutually exclusive. n You can split a flow, and you can merge two flows into one. DecompositionTERM1="Data Flow Diagram" TERM2="decomposition"To specify what a high-level process does, it down into smaller units in more DFDs. A high-level process is an entire DFD. Each high-level process is decomposed into other processes with data flows and data stores. Each decomposition is a DFD in itself. You can continue to break down processes until you reach a level on which further decomposition seems impossible or meaningless. The data flows of the opened process are connected in the new diagram to the process related to the opened process. Vertices, and the flows and objects connected to them, are transferred with the flows that are connected to the decomposed process.Example DFDThe following illustration shows a sample DFD:FILENAME="00231.tif" ORIGSEQ="13" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"SymbolsTERM1="Data Flow Diagram" TERM2="symbols in"TERM1="symbols" TERM2="in DFD"IntroductionThis section describes the symbols used in the DFD. The following illustration shows the symbols as they appear in the diagram control panel:FILENAME="00232.tif" ORIGSEQ="131" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"Note: The Vertex, Select, Note and, Note connector symbols are common to all diagrams. They are described in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams.Data processTERM1="data process" TERM2="symbol in DFD"TERM1="process" TERM2="symbol in DFD"A data process transforms data values. FILENAME="00233.unk" ORIGFILE="pics/dtaproc" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"You can make a distinction between the following types of processes:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Process TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"High-levelCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process containing nonfunctional components such as data stores or external objects that cause side effectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Low-levelCOLNAME="2" VALIGN="TOP" MOREROWS="0"Pure function without side effects such as the sum of two numbersCOLNAME="1" VALIGN="TOP" MOREROWS="0"Leaf or atomic processesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process that is not further decomposed The name of a process is usually a description of the transformation it performs.There are three sorts of transformation:n Transformation of the structure, e.g. reformattingn Transformation of information contained in datan Generation of new information If you open a process, you can either create a new DFD or open an existing DFD in which the process is specified.The data flows of the opened process are connected in the new diagram to the process with the name of the opened process. Vertices, and the flows and objects connected to them, are transferred with the flows that are connected to the decomposed process.If a data process has a decomposition at a lower level, an asterisk is placed inside the ellipse. The data process can be opened only if it has a name.Data storeTERM1="data store" TERM2="symbol in DFD"A data store stores data passively for later access. A data store responds to requests to store and access data. It does not generate any operations on its own. A data store allows values to be accessed in an order different from the order in which they were generated. Input flows indicate information or operations that modify the stored data such as adding or deleting elements or changing values. Output flows indicate information retrieved from the store; this information can be an entire value or a component of a value.FILENAME="00234.tif" ORIGSEQ="75" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ActorTERM1="actor" TERM2="symbol in DFD"An actor produces and consumes data, driving the DFD. Actors lie on the boundary of the diagram; they terminate the flow of data as sources and sinks of data. They are also known as terminators. Data flows between an actor and a diagram are inputs to and outputs of the diagram. The system interacts with people through the actor.FILENAME="00235.unk" ORIGFILE="pics/dfdactor" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"AnchorTERM1="anchor" TERM2="symbol in DFD"A DFD anchor provides a start or end point. In decomposition diagrams, anchors represent the nodes connected to the decomposed process in the higher level diagram.FILENAME="00236.unk" ORIGFILE="pics/dfdanchr" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"Data flowTERM1="data flow" TERM2="symbol in DFD"A data flow moves data between processes or between processes and data stores. As such, it represents a data value at some point within a computation and an intermediate value within a computation if the flow is internal to the diagram. This value is not changed. The names of input and output flows can indicate their roles in the computation or the type of the value they move. Data names are preferably nouns. The name of a typical piece of data, the data aspect, is written alongside the arrow.FILENAME="00237.tif" ORIGSEQ="78" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"See also REFID="20192" TYPE="XREF-TEXTCOPY"Flow names and inheritance below.Result flowTERM1="result flow" TERM2="symbol in DFD"A result flow is a data flow that generates an object used as the target of another operation. The value of the flow is subsequently treated as an object, usually a data store.FILENAME="00238.tif" ORIGSEQ="79" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"See also REFID="20192" TYPE="XREF-TEXTCOPY"Flow names and inheritance below.Control flowTERM1="control flow" TERM2="symbol in DFD"A control flow is a signal that carries out a command or indicates that something has occurred. A control flow occurs at a discrete point in time. The arrow indicates the direction of the control flow. The name of the event is written beside the arrow.Control flows can correspond to messages in CCDs or events in STDs; however, because they duplicate information in the DFD, use them sparingly.FILENAME="00239.tif" ORIGSEQ="80" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"See also REFID="20192" TYPE="XREF-TEXTCOPY"Flow names and inheritance below.Update flowTERM1="update flow" TERM2="symbol in DFD"Update (or bidirectional) flows are used to indicate an update of a data store, that is, a read, change, and store operation on a data flow.FILENAME="00240.tif" ORIGSEQ="81" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"See also REFID="20192" TYPE="XREF-TEXTCOPY"Flow names and inheritance below.ID="20192"Flow names and inheritanceTERM1="flow" TERM2="symbol in DFD"Flows in DFDs must be named. However, flows can inherit the names of the objects they are connected to. The table below shows the rules for inheritance of names. These rules are applied in the order shown, until nothing more can be inherited. In some situations, the flow's inherited name causes an error when a Check command is carried out. The result of the inheritance is confusing in the diagram.COLS="3"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="130p"COLNAME="3" COLWIDTH="189p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Original SituationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Situation After InheritanceCOLNAME="3" VALIGN="TOP" MOREROWS="0"ExplanationCOLNAME="1" VALIGN="TOP" MOREROWS="0"FILENAME="00241.tif" ORIGSEQ="82" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00242.tif" ORIGSEQ="86" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"Diverging flows without names inherit the name of an incoming flow with a name. If the incoming flow has several names, each diverging flow inherits all of them.COLNAME="1" VALIGN="TOP" MOREROWS="0"FILENAME="00243.tif" ORIGSEQ="92" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00244.tif" ORIGSEQ="96" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"Converging flows without names inherit the name of an outgoing flow with a name. If the outgoing flow has several names, each converging flow inherits all of them.COLNAME="1" VALIGN="TOP" MOREROWS="0"FILENAME="00245.tif" ORIGSEQ="102" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00246.tif" ORIGSEQ="104" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"Flows connected to a data store, control store, message queue, message box, event queue, or event flag inherit the name of that node.TERM1="composite flow, in DFD"TERM1="diverging flow, in DFD"TERM1="converging flow, in DFD"TERM1="split flow, in DFD"TERM1="merging flow, in DFD"A forked (converging or diverging) data flow is either a split or merging data flow, or a composite data flow. A composite data flow has one name for each branch. A composite flow can split into the original flows again. A split or a merging data flow has only one name.The name of the flow is taken as type name if no data type is specified.ID="41861"Message Generalization DiagramIntroductionThe Message Generalization Diagram (MGD) is an OMT diagram that is added to ObjectTeam when you activate the omtdgms module, as described in the ObjectTeam Customization Guide.Warning: Information specified in the MGD will be lost during future ObjectTeam upgrades.PurposeTERM1="hierarchy" TERM2="of messages"TERM1="Message Generalization Diagram"A communication message in a CCD or a communication association in a UCD can represent more than one message. You use the MGD to define the messages that make up the communication message or communication association. The MGD focuses on a hierarchical breakdown of a complex message in the CCD or UCD.Example MGDTERM1="communication message" TERM2="decomposition in MGD"A message that represents a number of messages is a generalized message. In the MGD, the generalized message appears at the top of the hierarchy. Messages at the bottom of the hierarchy represent the specific messages. In the following figure the set of messages that are generated as a result of choosing an option on a form are grouped into the general message RentalFormCommands. The hierarchy in this example has two levels; you can create hierarchies with as many levels as necessary.FILENAME="00247.tif" ORIGSEQ="58" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"SymbolsTERM1="Message Generalization Diagram" TERM2="symbols in"TERM1="symbols" TERM2="in MGD"IntroductionThis section describes the symbols used in the MGD. The following illustration shows the symbols as they appear in the diagram Control Panel:FILENAME="00248.tif" ORIGSEQ="176" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"Note: The Vertex, Select, Note and, Note connector symbols are common to all diagrams. They are described in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams.Message definitionTERM1="message" TERM2="symbol in MGD"A Message Definition describes a message or part of a composite message.FILENAME="00249.unk" ORIGFILE="pics/msdef" ORIGTYPE="X" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"Each message definition can be a combination of other messages. Such messages are indicated by more message definition symbols and the message generalization connector that joins them to the top message definition. You can define the message definition in a separate MGD by using File | Open.Message generalization connectorTERM1="message generalization connector" TERM2="symbol in MGD"A Message Generalization Connector establishes the relationship that messages and parts of messages have with each other. The message definition, drawn on top, acts as top message. Its constituent messages or parts of the message are placed underneath.FILENAME="00250.tif" ORIGSEQ="61" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="12305"Sequence DiagramIntroductionThe Sequence Diagram supports both UML and OMT notation. The diagram and its symbols are same under both notations.Note: In OMT, the Sequence Diagram (SD) is called an Event Trace Diagram (ETD). In ObjectTeam, the name Sequence Diagram (SD) is used for both UML and OMT.For more informationFor more information about this diagram, see REFID="14788" TYPE="XREF-TEXTCOPY"Sequence Diagram (Event Trace Diagram).ID="34271"State Transition DiagramIntroductionIf you switch to OMT notation using Options | Diagram, the notation for the following State Transition Diagram element changes:n ActivityNote: Send events, state attributes, concurrent states, history states, and complex transitions are not used in OMT. These UML symbols remain available in the State Transition Diagram even when you choose OMT notation.OMT notationThe following figure shows the State Transition Diagram with OMT notation selected:UML notationFor comparison, the following figure shows the same StateTransition Diagram with UML notation selected:For more informationFor more information about this diagram, see REFID="41704" TYPE="XREF-TEXTCOPY"State Diagram on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'29.ID="17920"Use Case DiagramIntroductionThe Use Case Diagram supports both UML and OMT notation. The diagram and its symbols are same under both notations.For more informationFor more information about this diagram, see REFID="35633" TYPE="XREF-TEXTCOPY"Use Case Diagram on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'36.ID="25261"Navigation Between DiagramsIntroductionThe following table shows the OMT navigation options that appear by default. You can customize these options, as described in the ObjectTeam Customization Guide.Navigation optionsEach navigation option creates and opens a new diagram or opens an existing diagram.COLS="2"COLNAME="1" COLWIDTH="139p"COLNAME="2" COLWIDTH="303p"COLNAME="1" VALIGN="TOP" MOREROWS="0"optionCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Make decompositionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Create a diagram of the same type; the current diagram is closed.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create diagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Create a diagram of a different type.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create system(CCD subject only)COLNAME="2" VALIGN="TOP" MOREROWS="0"Create a system and a CCD in that system.COLNAME="1" VALIGN="TOP" MOREROWS="0"Load diagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Open a diagram of the same type; the current diagram is closed.COLNAME="1" VALIGN="TOP" MOREROWS="0"Start editorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Open a diagram of a different type.ID="39004"Navigation pathsNote: The CD, COD, SD, STD, and UCD are described in Chapter 4, Exploring Each Diagram. The CCD, DFD, MGD and the navigation options to and from these diagrams are described in Appendix A, OMT Support.Note: Unless mentioned otherwise, all new diagrams are created within the system from which the navigation process started.COLS="5"COLNAME="1" COLWIDTH="106p"COLNAME="2" COLWIDTH="69p"COLNAME="3" COLWIDTH="169p"COLNAME="4" COLWIDTH="75p"COLNAME="5" COLWIDTH="207p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Diagram ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Select ItemCOLNAME="3" VALIGN="TOP" MOREROWS="0"Select OperationCOLNAME="4" VALIGN="TOP" MOREROWS="0"Type Of DiagramCOLNAME="5" VALIGN="TOP" MOREROWS="0" Diagram NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"CD ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"class_nameclass_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram andStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"codCOLNAME="5" VALIGN="TOP" MOREROWS="0"class_name (assign cod_name)class_name : cod_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram andStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"etd (sd)COLNAME="5" VALIGN="TOP" MOREROWS="0"class_name (assign sd_name)class_name : sd_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"stdCOLNAME="5" VALIGN="TOP" MOREROWS="0"class_name : topclass_name : topCOLNAME="1" VALIGN="TOP" MOREROWS="0"(CD Attribute) COLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Same as CD ClassCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"replace class_name with attributeType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"(CD Operation)COLNAME="2" VALIGN="TOP" MOREROWS="0"Return TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Same as CD ClassCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"replace class_name with returnType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCD ActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"ccdCOLNAME="5" VALIGN="TOP" MOREROWS="0"ccdActor_nameccdActor_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"ccdActor_nameccdActor_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCD Class,Class Reference,Container ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram or Start EditorCOLNAME="4" VALIGN="TOP" MOREROWS="0"ccdCOLNAME="5" VALIGN="TOP" MOREROWS="0"ccdClass_nameccdClass_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram or Start EditorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"ccdClass_nameccdClass_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram and Start EditorCOLNAME="4" VALIGN="TOP" MOREROWS="0"sdCOLNAME="5" VALIGN="TOP" MOREROWS="0"ccdClass_name (assign sd_name)ccdClass_name : sd_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram or Start EditorCOLNAME="4" VALIGN="TOP" MOREROWS="0"stdCOLNAME="5" VALIGN="TOP" MOREROWS="0"ccdClass_name : topccdClass_name : topCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCD SubjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"subject_name in current system if no system has been createdsubject_name in system subject_name if system has been created (See also Create System below)COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram andStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"etd (sd)COLNAME="5" VALIGN="TOP" MOREROWS="0"subject_name (assign sd_name) in current system if no system has been createdsubject_name: sd_name in system subject_name if system has been created (See also Create System below)COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"if no cd or sd was created:Create System orStart Editorif cd or sd was created:Make decomposition orLoad DiagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"ccdCOLNAME="5" VALIGN="TOP" MOREROWS="0"system subject_name and diagram subject_namediagram subject_name in system subject_namediagram subject_name in current systemdiagram subject_name in current systemCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCD MessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"mgdCOLNAME="5" VALIGN="TOP" MOREROWS="0"ccdMessage_nameccdMessage_name COLNAME="1" VALIGN="TOP" MOREROWS="0"COD InstanceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Instance TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Create CD diagram orStart CD editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"instanceType_nameinstanceType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFD ActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram or Start EditorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"dfdActor_namedfdActor_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFD Data processCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"dfdCOLNAME="5" VALIGN="TOP" MOREROWS="0"dataprocess_namedataprocess_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFD Data Store,Data Flow, Update FlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram or Start EditorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"store/flow_namestore/flow_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGD MessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"mgdCOLNAME="5" VALIGN="TOP" MOREROWS="0"mgdMessage_namemgdMessage_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"SD Message(Nested, Flat, Asynchronous, Return MessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram andStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"mgdCOLNAME="5" VALIGN="TOP" MOREROWS="0"sdMessage_name (assign sd_name)sdMessage : sd_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"SD Object]COLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"etd (sd)COLNAME="5" VALIGN="TOP" MOREROWS="0"objectType_name (assign sd_name)objectType_name : sd_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"cad (cd)COLNAME="5" VALIGN="TOP" MOREROWS="0"objectType_nameobjectType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"ccdCOLNAME="5" VALIGN="TOP" MOREROWS="0"bjectType_nameobjectType_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram orStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"stdCOLNAME="5" VALIGN="TOP" MOREROWS="0"objectType_name : topobjectType_name : topCOLNAME="1" VALIGN="TOP" MOREROWS="0"STD State With Internal ActionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event / ActionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"stdCOLNAME="5" VALIGN="TOP" MOREROWS="0"std_name : action_namestd_name : action_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCD Use CaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Make decomposition orLoad diagramCOLNAME="4" VALIGN="TOP" MOREROWS="0"ucdCOLNAME="5" VALIGN="TOP" MOREROWS="0"useCase_nameuseCase_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram andStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"codCOLNAME="5" VALIGN="TOP" MOREROWS="0"useCase_name (assign cod_name)useCase_name: cod_nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Create diagram andStart editorCOLNAME="4" VALIGN="TOP" MOREROWS="0"etd (sd)COLNAME="5" VALIGN="TOP" MOREROWS="0"useCase_name (assign sd_name)useCase_name : sd_nameExplanation of the columns:n Diagram Object: the object that you select in a diagram to navigate from with File | Open.n Select Item: the item that you select in the Select Item dialog box.n Select Operation: the operations that appear in the Select Operation dialog box. n Of type: the type of the diagram to be created/opened.n Diagram Name: See REFID="34996" TYPE="XREF-TEXTCOPY"Diagram Name.n System: (not mentioned in the table but displayed in the Select Operation dialog box). See REFID="30952" TYPE="XREF-TEXTCOPY"Systems you can navigate to.ID="34996"Diagram Name The diagram names are generated from the component name from which the navigation was started. - When you create a CD, CCD, DFD, MGD or UCD, the name of the component is assigned to the diagram name. - When you create a COD, or SD, the name of the component is assigned to the qualifier, and a dialog box appears in which you can assign the diagram name.- When you create an STD, the name of the component is assigned to the qualifier. If the navigation process was started from a CD or SD, the STD diagram name is given the name topThe names of the new diagrams (and systems) are generated from the component name. These names remain linked to the original component. If you change the name of the component in the original diagram, ObjectTeam changes the name of the generated diagram (or system).ID="30952"Systems you can navigate toThe System column in the Select Operation dialog box displays the name of the system in which the create or open action will take place. If the item you are navigating from is already defined in that system, an asterisk is placed in front of the system name.When selecting an open or create operation, you can determine in which system the operation will be carried out by checking the value of the system field:COLS="3"COLNAME="1" COLWIDTH="82p"COLNAME="2" COLWIDTH="112p"COLNAME="3" COLWIDTH="252p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AsteriskCOLNAME="2" VALIGN="TOP" MOREROWS="0"System COLNAME="3" VALIGN="TOP" MOREROWS="0"SituationCOLNAME="1" VALIGN="TOP" MOREROWS="0"yesCOLNAME="2" VALIGN="TOP" MOREROWS="0"current system_nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"The item is defined in the current system. The operation will be carried out in this system.COLNAME="1" VALIGN="TOP" MOREROWS="0"yesCOLNAME="2" VALIGN="TOP" MOREROWS="0"other system_nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"The item is defined in another system. The operation will be carried out in the other system.COLNAME="1" VALIGN="TOP" MOREROWS="0"noCOLNAME="2" VALIGN="TOP" MOREROWS="0"current system_nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Either of the following:n The item is not defined anywhere. For example, you have created a class without a CDM or properties. n The class is defined in another system and referenced in this system. In both cases, the operation will be carried out in this system.COLNAME="1" VALIGN="TOP" MOREROWS="0"noCOLNAME="2" VALIGN="TOP" MOREROWS="0"other system_nameCOLNAME="3" VALIGN="TOP" MOREROWS="0"The item is defined in the current system but is referenced in another system. The operation will be carried out in the other system.ID="31869"Summary of NotationIn this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37510" TYPE="XREF-TEXTCOPY"Class Diagram, Basic Concepts Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'28COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12968" TYPE="XREF-TEXTCOPY"Class Diagram, Advanced Concepts Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'29COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22155" TYPE="XREF-TEXTCOPY"Class Diagram, ObjectTeam Extensions Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'30COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33055" TYPE="XREF-TEXTCOPY"Class Communication Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29425" TYPE="XREF-TEXTCOPY"Data Flow Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'32COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23409" TYPE="XREF-TEXTCOPY"Message Generalization Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'33COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14788" TYPE="XREF-TEXTCOPY"Sequence Diagram (Event Trace Diagram) Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'34COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33340" TYPE="XREF-TEXTCOPY"State Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'35COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34161" TYPE="XREF-TEXTCOPY"Use Case Diagram Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'36ID="37510"Class Diagram, Basic ConceptsTERM1="Object Model" TERM2="notation"FILENAME="00251.tif" ORIGSEQ="199" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="12968"Class Diagram, Advanced ConceptsTERM1="Object Model" TERM2="notation"FILENAME="00252.tif" ORIGSEQ="201" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="22155"Class Diagram, ObjectTeam ExtensionsTERM1="Object Model" TERM2="notation"FILENAME="00253.tif" ORIGSEQ="213" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="33055"Class Communication DiagramTERM1="Class Communication Model" TERM2="notation"FILENAME="00254.tif" ORIGSEQ="42" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="29425"Data Flow DiagramTERM1="Functional Model" TERM2="notation"FILENAME="00255.tif" ORIGSEQ="107" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="23409"Message Generalization DiagramTERM1="Class Communication Model" TERM2="notation"FILENAME="00256.tif" ORIGSEQ="3" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="14788"Sequence DiagramTERM1="Dynamic Model" TERM2="notation" (Event Trace Diagram)FILENAME="00257.tif" ORIGSEQ="7" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="33340"State DiagramTERM1="Dynamic Model" TERM2="notation"FILENAME="00258.tif" ORIGSEQ="63" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"ID="34161"Use Case DiagramFILENAME="00259.tif" ORIGSEQ="115" ORIGTYPE="I" ORIGDOC="../../sources/mg/dgmsomt.fm5.mif"Appendix B TYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideTERM1="item" TERM2="details of"TERM1="diagram component" TERM2="details of"TERM1="scope of item" TERM2="valid values"TERM1="item" TERM2="types of, detailed"ID="14387"Type and Scope of Diagram ComponentsIntroductionThe following tables list all diagram components. The columns are as follows:n Symbol Type groups the different kinds of symbols (nodes, connectors, and so on).n Component Name identifies the internal name of the component (class, association, actor, and so on).n Label identifies the internal name of the label associated with a component. Most labels have a name; many also have additional labels as well.n Item Type identifies the type of the item associated with the symbol or label. If no item type is listed, the element is not an item in the repository.n Item Scope lists all valid scopes for the item associated with the symbol or label; the initial scope is indicated in bold. A scope Q indicates that the item is a qualified item; its scope is always the same as its owner item.Class Diagram (CD)File type cad; item type cl Note: This table does not list type and scope information for class attributes and methods. See the CDM table for this information.COLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="108p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"cad_classCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameattributesmethodsCOLNAME="4" VALIGN="TOP" MOREROWS="0"cl--COLNAME="5" VALIGN="TOP" MOREROWS="0"P, S--COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"cad_containerCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameattributesmethodsCOLNAME="4" VALIGN="TOP" MOREROWS="0"cl--COLNAME="5" VALIGN="TOP" MOREROWS="0"P, S--COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"nary-assocCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, S COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"link_attr_boxCOLNAME="3" VALIGN="TOP" MOREROWS="0"attributesCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"more_classesCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"generalizationCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"deCOLNAME="5" VALIGN="TOP" MOREROWS="0"S COLNAME="1" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"overlap_genCOLNAME="3" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"deCOLNAME="5" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"S COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"noteCOLNAME="3" VALIGN="TOP" MOREROWS="0"note_textCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"namerole_startconstraint_startrole_endconstraint_endCOLNAME="4" VALIGN="TOP" MOREROWS="0"clde-de-COLNAME="5" VALIGN="TOP" MOREROWS="0"P, S Q-Q-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"aggregationCOLNAME="3" VALIGN="TOP" MOREROWS="0"namerole_startconstraint_startrole_endconstraint_endCOLNAME="4" VALIGN="TOP" MOREROWS="0"clde-de-COLNAME="5" VALIGN="TOP" MOREROWS="0"P, S Q -Q-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"qualif_assocCOLNAME="3" VALIGN="TOP" MOREROWS="0"namerole_startconstraint_startrole_endconstraint_endqualifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"clde-de-deCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, S Q-Q-F COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"qualif_aggrCOLNAME="3" VALIGN="TOP" MOREROWS="0"namerole_startconstraint_startrole_endconstraint_endqualifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"clde-de-deCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, S Q-Q-F COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"nary_assoc_conn COLNAME="3" VALIGN="TOP" MOREROWS="0"roleconstraintCOLNAME="4" VALIGN="TOP" MOREROWS="0"de-COLNAME="5" VALIGN="TOP" MOREROWS="0"Q-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"generalization_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"overlap_gen_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"loopCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"constraintCOLNAME="3" VALIGN="TOP" MOREROWS="0"constraintCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"note_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectedNodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"propagationCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"peCOLNAME="5" VALIGN="TOP" MOREROWS="0"F COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"link_attribCOLNAME="3" VALIGN="TOP" MOREROWS="0"name_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"declCOLNAME="5" VALIGN="TOP" MOREROWS="0"QP, SClass Communication Diagram (CCD)File type ccd; item type clCOLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="99p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"ccd_classCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ccd_class_refCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ccd_containerCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"subjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ccd_actorCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"noteCOLNAME="3" VALIGN="TOP" MOREROWS="0"note_textCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"com_messageCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"peCOLNAME="5" VALIGN="TOP" MOREROWS="0"SCOLNAME="1" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"note_connCOLNAME="3" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="4" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="5" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"-Class Definition Matrix (CDM)File type cdm; item type clCOLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="99p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"RowsCOLNAME="2" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"name_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"declCOLNAME="5" VALIGN="TOP" MOREROWS="0"Q P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"methodCOLNAME="3" VALIGN="TOP" MOREROWS="0"name_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"peclCOLNAME="5" VALIGN="TOP" MOREROWS="0"QP, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"CellsCOLNAME="2" VALIGN="TOP" MOREROWS="0"parameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"name_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"declCOLNAME="5" VALIGN="TOP" MOREROWS="0"F P, SCollaboration Diagram (COD)File type cod; item type cl:ceCOLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="99p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"cod_actorCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"instanceCOLNAME="3" VALIGN="TOP" MOREROWS="0"name_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"declCOLNAME="5" VALIGN="TOP" MOREROWS="0"F P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"nary_linkCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"noteCOLNAME="3" VALIGN="TOP" MOREROWS="0"note_textCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"linkCOLNAME="3" VALIGN="TOP" MOREROWS="0"namerole_startrole_endCOLNAME="4" VALIGN="TOP" MOREROWS="0"cldedeCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SQQCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"aggr_linkCOLNAME="3" VALIGN="TOP" MOREROWS="0"namerole_startrole_endCOLNAME="4" VALIGN="TOP" MOREROWS="0"cldedeCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SQQCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"qualif_linkCOLNAME="3" VALIGN="TOP" MOREROWS="0"namerole_startrole_endqualifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"cldede-COLNAME="5" VALIGN="TOP" MOREROWS="0"P, SQQ-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"qualif_aggr_linkCOLNAME="3" VALIGN="TOP" MOREROWS="0"namerole_startrole_endqualifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"cldede-COLNAME="5" VALIGN="TOP" MOREROWS="0"P, SQQ-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"nary_link_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"roleCOLNAME="4" VALIGN="TOP" MOREROWS="0"deCOLNAME="5" VALIGN="TOP" MOREROWS="0"QCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"note_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"Connected NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"cod_messageCOLNAME="3" VALIGN="TOP" MOREROWS="0"eventCOLNAME="4" VALIGN="TOP" MOREROWS="0"pedeCOLNAME="5" VALIGN="TOP" MOREROWS="0"SFData Flow Diagram (DFD)File type dfd; item type peCOLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="108p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"data_procCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"peCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, S COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"data_storeCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"deCOLNAME="5" VALIGN="TOP" MOREROWS="0"S COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"dfd_actorCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"dfd_anchorCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"noteCOLNAME="3" VALIGN="TOP" MOREROWS="0"note_textCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"data_vertexCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ctrl_vertexCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"update_vertexCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"result_vertexCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"data_flowCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"deCOLNAME="5" VALIGN="TOP" MOREROWS="0"S COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"update_flowCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"deCOLNAME="5" ROWSEP="0" VALIGN="TOP" MOREROWS="0"S COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"result_flowCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="5" ROWSEP="0" VALIGN="TOP" MOREROWS="0"- COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"ctrl_flowCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"peCOLNAME="5" ROWSEP="0" VALIGN="TOP" MOREROWS="0"S COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"note_connCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="5" ROWSEP="0" VALIGN="TOP" MOREROWS="0"-Message Generalization Diagram (MGD)File type mgd; item type peCOLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="108p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"message_defCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"peCOLNAME="5" VALIGN="TOP" MOREROWS="0"S COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"message_genCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"noteCOLNAME="3" VALIGN="TOP" MOREROWS="0"note_textCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"message_gen_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"- COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"note_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-Sequence Diagram (SD)File type etd; item type cl:etCOLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="126p"COLNAME="3" COLWIDTH="126p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"etd_object COLNAME="3" VALIGN="TOP" MOREROWS="0"name_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"declCOLNAME="5" VALIGN="TOP" MOREROWS="0"S P, S COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"etd_initiator COLNAME="3" VALIGN="TOP" MOREROWS="0"name_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"declCOLNAME="5" VALIGN="TOP" MOREROWS="0"S P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"etd_timing_constrCOLNAME="3" VALIGN="TOP" MOREROWS="0"timing_constraintCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"noteCOLNAME="3" VALIGN="TOP" MOREROWS="0"note_textCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"etd_eventCOLNAME="3" VALIGN="TOP" MOREROWS="0"eventtiming_mark_starttiming_mark_endCOLNAME="4" VALIGN="TOP" MOREROWS="0"pede--COLNAME="5" VALIGN="TOP" MOREROWS="0"S F --COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"note_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"Connected NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"in_scope_regionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"object_terminationCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-State Transition Diagram (STD)File type std; item type cl:peCOLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="99p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"name_stateCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"stCOLNAME="5" VALIGN="TOP" MOREROWS="0"QCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"stateCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameeditor_onlyCOLNAME="4" VALIGN="TOP" MOREROWS="0"st-COLNAME="5" VALIGN="TOP" MOREROWS="0"QCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"super_stateCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"stCOLNAME="5" VALIGN="TOP" MOREROWS="0"QCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ver_compl_transCOLNAME="3" VALIGN="TOP" MOREROWS="0"editor_onlyeventconditionactionsend_clauseCOLNAME="4" VALIGN="TOP" MOREROWS="0"-pede-pedepedeCOLNAME="5" VALIGN="TOP" MOREROWS="0"--F--FSFCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"hor_compl_transCOLNAME="3" VALIGN="TOP" MOREROWS="0"editor_onlyeventconditionactionsend_clauseCOLNAME="4" VALIGN="TOP" MOREROWS="0"-pede-pedepedeCOLNAME="5" VALIGN="TOP" MOREROWS="0"--F--FSFCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"std_classCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"start_stateCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"stCOLNAME="5" VALIGN="TOP" MOREROWS="0"QCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"final_stateCOLNAME="3" COLSEP="0" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" COLSEP="0" VALIGN="TOP" MOREROWS="0"pedeCOLNAME="5" VALIGN="TOP" MOREROWS="0"QF COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"noteCOLNAME="3" COLSEP="0" VALIGN="TOP" MOREROWS="0"note_textCOLNAME="4" COLSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"transitionCOLNAME="3" VALIGN="TOP" MOREROWS="0"editor_onlyeventconditionactionsend_clauseCOLNAME="4" VALIGN="TOP" MOREROWS="0"-pede-pedepedeCOLNAME="5" VALIGN="TOP" MOREROWS="0"-QF - QF SFCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"event_msgCOLNAME="3" VALIGN="TOP" MOREROWS="0"eventCOLNAME="4" VALIGN="TOP" MOREROWS="0"pedeCOLNAME="5" VALIGN="TOP" MOREROWS="0"QF COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"note_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Connected NodesCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"state_regionCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"stCOLNAME="5" ROWSEP="0" VALIGN="TOP" MOREROWS="0"QCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"history_stateCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="5" ROWSEP="0" VALIGN="TOP" MOREROWS="0"-COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"state_actionCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"eventconditionactionsend_clauseCOLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"peders-pedepedeCOLNAME="5" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Q F S- QF SFCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"activityCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"peCOLNAME="5" ROWSEP="0" VALIGN="TOP" MOREROWS="0"QUse Case Diagram (UCD)File type ucd; item type clCOLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="99p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="54p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Symbol TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"LabelCOLNAME="4" VALIGN="TOP" MOREROWS="0"Item typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"Item ScopeCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"use_caseCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ucd_actorCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"clCOLNAME="5" VALIGN="TOP" MOREROWS="0"P, SCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"noteCOLNAME="3" VALIGN="TOP" MOREROWS="0"note_textCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"und_com_assocCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"peCOLNAME="5" VALIGN="TOP" MOREROWS="0"S COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"dir_com_assocCOLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"peCOLNAME="5" VALIGN="TOP" MOREROWS="0"S COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"use_case_genCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"- COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"note_connCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="5" VALIGN="TOP" MOREROWS="0"-Project Management GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Project Management GuideAbout this manualThis manual describes how to use versions, groups, and access control. It also describes how to save Browser settings and how to determine where generated files are placed in the file system.These features are particularly useful to the ObjectTeam administrator. Depending on the size and complexity of their projects, project leaders and project members might also find these features useful.PrerequisitesThis manual assumes that you are familiar with the following products and concepts:n The operating system you are using. For more information, refer to your operating system documentation.n The Unified Modeling Language (UML) for Object-Oriented Development, as developed by Grady Booch, Ivar Jacobson, and James Rumbaugh.n The basic operation of ObjectTeam, as presented in ObjectTeam Getting Started and the ObjectTeam Modeling Guide.SEEALSO="version" TERM1="object"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="version" TERM1="item generation"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="access control" TERM1="security"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="role right" TERM1="access control"SEEALSO="role right" TERM1=""SEEALSO="access rule" TERM1="access control"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="access right" TERM1="access control"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="Class Definition Matrix" TERM1="CDM"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="access right" TERM1="access control"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="Class Definition Matrix" TERM1="CDM"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="version" TERM1="backGround version"SEEALSO="version" TERM1=""SEEALSO="version" TERM1="frozen version"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="version" TERM1="working version"Chapter 1 ID="22309"Version and Configuration ManagementTYPE="MIFmarker"TYPE="number"0TYPE="text"Project Management GuideIntroductionThis chapter describes ObjectTeam's powerful version and configuration management system.Project hierarchyThe following illustration shows the ObjectTeam project hierarchy. You should be familiar with all the objects shown here.FILENAME="00260.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/pmg/version.fm5.mif"Object versionsObjectTeam allows you to create versions of all the objects in this hierarchy, with the exception of the project object. Each version of a parent object points to a version of each of its child objects. For example, each version of a phase object points to a version of each of its child system objects.FILENAME="00261.tif" ORIGSEQ="35" ORIGTYPE="I" ORIGDOC="../../sources/pmg/version.fm5.mif"ConfigurationsThrough the links between versions, a version of a configuration effectively points to a version of every object in it.Each version has a status that indicates whether it can be edited (working) or not (frozen). Only frozen versions can be shared by multiple configurations.Access controlThis chapter focuses on how to use versions and configurations. However, it is important to note that access to object versions is also controlled through the access control mechanism described in REFID="21532" TYPE="XREF-TEXTCOPY"Chapter 5, Access Control.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40212" TYPE="XREF-TEXTCOPY"Versions 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40939" TYPE="XREF-TEXTCOPY"Configurations 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40295" TYPE="XREF-TEXTCOPY"Item Generations and Property Values 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34596" TYPE="XREF-TEXTCOPY"Version Browser 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38448" TYPE="XREF-TEXTCOPY"Working With Versions and Configurations 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14ID="40212"VersionsID="35287"Objects that have versionsTERM1="object" TERM2="that have versions"The following types of objects are under version control. When you create, delete, or modify these types of objects, you always create, delete, or modify a version of the object.n Configurationsn Phasesn Systemsn System files, such as diagrams and CDMsTERM1="diagram" TERM2="versioning"TERM1="file" TERM2="versioning"n Groupsn Text filesn Customization filesn Documents and document objects, such as document structure matrixes and file sections (see the ObjectTeam Document Generation Guide for more information)ItemsYou cannot create versions of items. Item values are saved with system versions or file versions, depending on the item scope. See REFID="40295" TYPE="XREF-TEXTCOPY"Item Generations and Property Values for more information.Hierarchy of object versionsThe ObjectTeam project hierarchy defines the content of each type of object.COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ContentCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigurationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Each configuration version contains one or more phase versions, as well as one or more customization file versions.COLNAME="1" VALIGN="TOP" MOREROWS="0"PhaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"Each phase version contains one or more system versions, as well as one or more customization file versions.COLNAME="1" VALIGN="TOP" MOREROWS="0"SystemCOLNAME="2" VALIGN="TOP" MOREROWS="0"Each system version contains one or more file versions and one or more group versions, as well as one or more customization file versions.Version statesTERM1="version" TERM2="state of"Each version of an object can be in one of three states: COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StateCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="working version" TERM2="definition of"workingCOLNAME="2" VALIGN="TOP" MOREROWS="0"An object version in this state can be edited. Its component object versions can be working or frozen. A working object version must be in exactly one configuration version.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="frozen version" TERM2="definition of"frozenCOLNAME="2" VALIGN="TOP" MOREROWS="0"An object version in this state cannot be edited. Its component object versions are also frozen. A frozen object version can be in one or more configuration versions. COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="backGround version" TERM2="definition"backGroundCOLNAME="2" VALIGN="TOP" MOREROWS="0"An object version in this state is frozen and is not in any configuration version. Background versions are removed from the repository and stored in the file system. Version identifierTERM1="version" TERM2="identifier"TERM1="identifier" TERM2="for version"When you create a new object version, ObjectTeam automatically assigns it a version identifier of the form:configuration_name.version_number where:n configuration_name is the name of the current configurationn version_number is a unique number for this object of the form:part_1.part_2.part_3...part_n Each part is an integer and there are as many parts as necessary (to a maximum of 10).Version numberTERM1="version" TERM2="number"TERM1="frozen version" TERM2="version numbering"ObjectTeam assigns new version numbers. TERM1="numbering of versions"n An object version is either the first object version or it is created from a frozen object version. n The version number for the first object version is 1. The version number for any other object version is derived from the version number of the frozen object version used to create it.n A frozen object version can be used to create one or more new object versions.This table shows the pattern that exists in version numbering:COLS="3"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="171p"COLNAME="3" COLWIDTH="117p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object Version Being CreatedCOLNAME="2" VALIGN="TOP" MOREROWS="0"Rule For Determining New Version NumberCOLNAME="3" VALIGN="TOP" MOREROWS="0"Example (Frozen Version -> New Version)COLNAME="1" VALIGN="TOP" MOREROWS="0"First object versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version is 1.COLNAME="3" VALIGN="TOP" MOREROWS="0"1COLNAME="1" VALIGN="TOP" MOREROWS="0"First object version based on a frozen versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Increment the last part of the version number.COLNAME="3" VALIGN="TOP" MOREROWS="0"1 -> 2 or1.1 -> 1.2COLNAME="1" VALIGN="TOP" MOREROWS="0"Second object version based on the same frozen versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Add .1 to the frozen version number.COLNAME="3" VALIGN="TOP" MOREROWS="0"1 -> 1.1 or1.1 -> 1.1.1COLNAME="1" VALIGN="TOP" MOREROWS="0"Third object version based on the same frozen versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Add .0.1 to the frozen version number.COLNAME="3" VALIGN="TOP" MOREROWS="0"1 -> 1.0.1 or2.2 -> 2.2.0.1Examples of version numberingThe following table and illustration provide examples of version numbering:COLS="2"COLNAME="1" COLWIDTH="36p"COLNAME="2" COLWIDTH="414p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the first version of the object. This creates version 1.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Freeze version 1 and use it to create a new object version.This creates version 2.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Create a second new object version based on version 1. This creates version 1.1.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Create a third new object version based on version 1. This creates version 1.0.1.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Freeze version 2 and use it to create two new object versions.This creates versions 3 and 2.1.COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Freeze version 2.1 and use it to create three new object versions.This creates versions 2.2, 2.1.1, and 2.1.0.1.COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Freeze version 2.2 and use it to create a new object version.This creates version 2.3.COLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"Freeze version 2.1.1 and use it to create two new object versions.This creates versions 2.1.2 and 2.1.1.1.COLNAME="1" VALIGN="TOP" MOREROWS="0"9COLNAME="2" VALIGN="TOP" MOREROWS="0"Freeze version 2.1.2 and use it to create two new object versions.This creates versions 2.1.3 and 2.1.2.1.FILENAME="00262.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/pmg/version.fm5.mif"ID="40939"ConfigurationsIntroductionIn ObjectTeam, you are always working in the context of a configuration version.Adding object versionsYou add object versions to your configuration version in one of two ways:n Create an object, which adds a new working object version to your configuration version.n Select a frozen object version, which adds the frozen object version to your configuration version.Tip: Once you have added the frozen version to your configuration, you can create a new working version of the frozen object version. You can then modify the new version.Warning: If you create an object version in your configuration and the version number is not what you expect, there may be an existing object with the same name that is unselected. Use the Version Browser to examine the version hierarchy. For more details, see REFID="34596" TYPE="XREF-TEXTCOPY"Version Browser.Removing object versionsYou remove object versions from your configuration version in one of two ways:n Delete a working or frozen object version.Note: If a frozen object version is selected in more than one configuration version, you cannot delete it.n Deselect a frozen object version.One or more configurationsA project can have one or more configurations. Most projects, even projects being worked on by a team of developers, use only one configuration. Your project only needs multiple configurations if you need to maintain separate, parallel streams of development.One configurationLarge projects being worked on by multiple developers often need only one configuration. Most of Cayenne's development projects use a single configuration. In this case, developers generally work in their own systems. If developers happen to work on the same system, they are locked out of files currently in use by another developer, preventing potential conflicts.Multiple configurationsMultiple configurations in a project allow you to maintain separate, parallel streams of development. You must then merge the separate branches to create an integrated version model. Multiple configurations are particularly useful in the following situations:n Shielded development areas. With a single configuration, the work of every developer potentially impacts the work of every other developer. Multiple configurations ensure that the changes made by one developer (or group of developers) does not affect the work of another developer (or group of developers) until you choose to merge the configurations.n Parallel release schedules. If you need to maintain multiple versions of your model simultaneously, you can do so using multiple configurations. For example, you can have a configuration for Release X and a second configuration for Release X+1. You now can use one configuration for critical corrections to the older version of the model while you use the second configuration to develop the new version of the model.For more informationREFID="14035" TYPE="XREF-TEXTCOPY"Chapter 2, Parallel Development, describes how to use multiple configurations. It also describes how to merge the configurations to create an integrated version of the model.ID="40295"Item Generations and Property ValuesItem generationsTERM1="item generation"TERM1="item" TERM2="versioning"Items contain important model information, such as property values. You cannot create versions of items. Instead, ObjectTeam creates and handles item generations for you.Item scope determines where its properties are storedThe scope of an item determines where the properties associated with that item are stored.n Properties of items with scope file are stored with the File version.n Properties of items with scope system or phaseDef are stored with the system version.ExampleAn etd_event item cannot have scope file; therefore, it is always stored with a system version. The etd_event item contains, for example, the value of the Free Text property for the event connector in the Sequence Diagram (SD). When you freeze a system version, ObjectTeam freezes the associated etd_event item generations, including the value of the Free Text property for the event connector.Not all properties are connected to ItemsNot all properties are associated with items. Many objects in the repository can have associated properties. These properties are stored with the object.ExampleThe Free Text property for a diagram is associated with the file version of the diagram. When you freeze a diagram file version, ObjectTeam freezes its associated properties, including the value of the Free Text property for the diagram.Freezing property valuesTERM1="version" TERM2="of property value"TERM1=""TERM1="property" TERM2="versioning of"TERM1="freezing" TERM2="property values"You cannot freeze item generations directly. Item generations are frozen with the system or file version in which they are stored.n When you a file version, ObjectTeam freezes the file version and all properties of items with scope file.n When you freeze a system version, ObjectTeam freezes the system version and all of its child file versions. Freezing a system version freezes all the property values in that system version, including all the property values in all the file versions in that system version.SavedGroupsIf you are using corporate groups, you can create a group that contains the files and items that you want to save called a SavedGroup. The SavedGroup is a snapshot of the current state of all files and items in the group. See REFID="11810" TYPE="XREF-TEXTCOPY"Chapter 4, Using Groups, for more information.Note: Creating a group version is not the same as creating a SavedGroup. A group version contains only the rules by which ObjectTeam determines the contents of the group. It does not contain the files and items in the group.Configurations should not share file versionsTERM1="configuration" TERM2="sharing versions"TERM1="version" TERM2="sharing"Configurations should share system versions rather than file versions. If the configurations share file versions, the property values visible from the shared file version might be different in each configuration:n The property values stored with the frozen file version are the same in both configurations.n The property values stored with the system version are unique to each configuration.For more informationREFID="14035" TYPE="XREF-TEXTCOPY"Chapter 2, Parallel Development, describes how to use multiple configurations in a project.ID="34596"Version BrowserBrowser and Version BrowserThe Browser displays object versions in the context of the project hierarchy. Thus, in the Browser, you can examine all object versions that are currently selected in your project.The Version Browser displays all versions of an object, regardless of whether or not they are currently selected in your project.FILENAME="00263.unk" ORIGFILE="pics/vbbrows.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/version.fm5.mif"NotationThe Version Browser uses the following notation:n The root node represents the object. It displays the name of the object and the number of versions of that object that exist.n Each of the other nodes represents an object version. Each displays the version identifier and the creator's user name. The border style indicates version status:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Border StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"StatusCOLNAME="1" VALIGN="TOP" MOREROWS="0"Dashed lineCOLNAME="2" VALIGN="TOP" MOREROWS="0"BackgroundCOLNAME="1" VALIGN="TOP" MOREROWS="0"Solid lineCOLNAME="2" VALIGN="TOP" MOREROWS="0"FrozenCOLNAME="1" VALIGN="TOP" MOREROWS="0"Bolded lineCOLNAME="2" VALIGN="TOP" MOREROWS="0"Workingn The straight arrows show the version hierarchy. In the previous illustration, myconfig.3 is derived from myconfig.2 is derived from main.1. Both main2. and myconfig.2 are derived from main.1.n The curved lines represent Merge Links, which are only used during merge. A Merge Link points from a source version to a target version. It indicates that ObjectTeam should use the target version rather than the source version. See REFID="11562" TYPE="XREF-TEXTCOPY"Working With Merge Links for more information.How to open a Version BrowserΣ To open a Version Browser:1 In the Browser, select an object version.2 Select Version | Version Browser.The Version Browser appears. It displays all versions of the selected object.How to update the displayWhen you update the Version Browser display, you can redisplay information about the current object or select a new object.Σ To redisplay information about the current object, select View | Refresh.Σ To display information about a different object, drag a new object from the Browser into the Version Browser. (In Windows, use the left mouse button. In Unix, use the middle mouse button.)How to examine an object versionΣ To examine an object version:1 Select the object version.2 Select one of the following commands:- File | Info displays an Info dialog box.Tip: Use File | Info to see which object versions have selected the current object version.- File | Edit opens an editor. Available for file versions only.- File | Show opens a read-only editor. Available for file versions only.How to change fonts and colorsΣ To change the fonts and colors used in the Version Browser, use the Options menu.COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="270p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CommandCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Primary FontCOLNAME="2" VALIGN="TOP" MOREROWS="0"First line of text in a nodeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Secondary FontCOLNAME="2" VALIGN="TOP" MOREROWS="0"Second line of text in a nodeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Color | ForegroundCOLNAME="2" VALIGN="TOP" MOREROWS="0"Text, node borders, and hierarchy arrowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Color | BackgroundCOLNAME="2" VALIGN="TOP" MOREROWS="0"Window backgroundCOLNAME="1" VALIGN="TOP" MOREROWS="0"Color | NodeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Node (when not selected)COLNAME="1" VALIGN="TOP" MOREROWS="0"Color | Merge ArrowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Merge arrowCOLNAME="1" VALIGN="TOP" MOREROWS="0"Color | Primary SelectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"First selected node when one or two nodes are selected; all selected nodes when more than two nodes are selectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"Color | Secondary SelectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Second selected node when two nodes are selected; Secondary Selection is useful when you are selecting the source and target versions for mergeHow to print the displayΣ To print the display area of the Version Browser, select File | Print View.Version menu commandsMost of the commands on the Version menu in the Version Browser are also in the Version menu in the Browser. For descriptions of these commands, see REFID="38448" TYPE="XREF-TEXTCOPY"Working With Versions and Configurations.ID="38448"Working With Versions and ConfigurationsID="11036"Version commandsMost of the commands for working with object versions are on the Version menu of both the Version Browser and the Browser. The following table provides brief descriptions of each command. TERM1="configuration" TERM2="commands, list of"TERM1="version" TERM2="commands, list of"COLS="4"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="81p"COLNAME="3" COLWIDTH="81p"COLNAME="4" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"In Version BrowserCOLNAME="3" VALIGN="TOP" MOREROWS="0"In BrowserCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NewCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"The first version of an object is created when you create the object. Use New to create subsequent versions of an object.See: REFID="17270" TYPE="XREF-TEXTCOPY"Creating VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DeleteCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Deletes leaf object versions, which are object versions that have not been used to create new object versions.See: REFID="23201" TYPE="XREF-TEXTCOPY"Deleting VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"FreezeCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Changes the status of an object version from working to frozen. A frozen object version cannot be edited.See: REFID="34174" TYPE="XREF-TEXTCOPY"Freezing VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"UnfreezeCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Changes the status of an object version from frozen to working. A working object version can be edited.See:REFID="26343" TYPE="XREF-TEXTCOPY"Unfreezing VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Select | NewCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Adds to a configuration a version of an object that is not yet in the configuration.See: REFID="29758" TYPE="XREF-TEXTCOPY"Selecting VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Select | SelectedCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Adds to a configuration a different version of an object that is already in the configuration.See: REFID="29758" TYPE="XREF-TEXTCOPY"Selecting VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DeselectCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Removes an object version from a configuration.See: REFID="36489" TYPE="XREF-TEXTCOPY"Deselecting VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DeactivateCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Does either of the following:- Changes the status of a configuration version from frozen to backGround. - Removes a corporate group from a system version, as described in REFID="11810" TYPE="XREF-TEXTCOPY"Chapter 4, Using Groups.See: REFID="33346" TYPE="XREF-TEXTCOPY"Deactivating and Activating Configuration VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActivateCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Does either of the following:- Changes the status of a configuration version from backGround to frozen. - Can also add a corporate group to a system version, as described in REFID="11810" TYPE="XREF-TEXTCOPY"Chapter 4, Using Groups.See: REFID="33346" TYPE="XREF-TEXTCOPY"Deactivating and Activating Configuration VersionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"File | Chang e | Link StatusCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Changes the status of links between parent object versions and child object versions. (Note: This command is on the File menu, not the Version menu.)See: REFID="19213" TYPE="XREF-TEXTCOPY"Changing Link StatusCOLNAME="1" VALIGN="TOP" MOREROWS="0"CompareCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"For file versions, compares two versions of the same file, listing their differences.See: REFID="19986" TYPE="XREF-TEXTCOPY"Comparing File VersionsNote: For configuration, phase, or system versions, merges two versions, as described in REFID="14035" TYPE="XREF-TEXTCOPY"Chapter 2, Parallel Development.COLNAME="1" VALIGN="TOP" MOREROWS="0"CopyCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Copies the contents of another object version into the current object version.See: REFID="26571" TYPE="XREF-TEXTCOPY"Copying VersionsParent-child relationshipsTERM1="object" TERM2="parent-child relationships"In most cases, applying a version-related command to a parent object also effects its child objects. For example, freezing a phase version also freezes its system versions. The following table shows the parent-child relationships between object versions:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ParentCOLNAME="2" VALIGN="TOP" MOREROWS="0"ChildCOLNAME="1" VALIGN="TOP" MOREROWS="0"Configuration versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Phase versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Phase versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"System versionsDocument versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"System versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"System file versions, such as diagram file versions and CDM versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Document versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document file versions, such as Document Structure Matrix versions and File Section versionsWarning: Working with many object versions at once can cause system resource problems. If you are applying a version-related command (see REFID="11036" TYPE="XREF-TEXTCOPY"Version commands) to an object version that has more than 50 child object versions, perform the action on the child objects first, then on the parent object.Merge commandsThe following commands, which also appear on the Version menu, are used only for merge. They are described in REFID="14035" TYPE="XREF-TEXTCOPY"Chapter 2, Parallel Development.COLS="4"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="81p"COLNAME="3" COLWIDTH="81p"COLNAME="4" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"In Version BrowserCOLNAME="3" VALIGN="TOP" MOREROWS="0"In BrowserCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"MergeCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Merges two configurations.COLNAME="1" VALIGN="TOP" MOREROWS="0"CompareCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"For configuration, phase, or system versions, merges two versions. Note: For file versions, compares two versions of the same file, as described in REFID="19986" TYPE="XREF-TEXTCOPY"Comparing File Versions.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Merge LinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"Creates a Merge Link between two versions of the same object. COLNAME="1" VALIGN="TOP" MOREROWS="0"Delete Merge LinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"Deletes the Merge Link between two versions. Document commandsThe following commands, which also appear on the Version menu, are available only at the Document level. They are described in ObjectTeam Document Generation Guide.COLS="4"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="81p"COLNAME="3" COLWIDTH="81p"COLNAME="4" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"In Version BrowserCOLNAME="3" VALIGN="TOP" MOREROWS="0"In BrowserCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Make FixedSelect FixedMake SelectedMake SnapshotMake CurrentTERM1="Make Fixed (Version menu)"TERM1="Select Fixed (Version menu)"TERM1="Make Selected (Version menu)"TERM1="Make Snapshot (Version menu)"TERM1="Make Current (Version menu)"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="4" VALIGN="TOP" MOREROWS="0"Control the status of links in the file and property sections. TERM1="creating" TERM2="versions of Browser objects"ID="17270"Creating VersionsIntroductionYou can make a new version of any object listed in REFID="35287" TYPE="XREF-TEXTCOPY"Objects that have versions.Ways to create versionsWhen you create an object for the first time, you create a version of it. The ObjectTeam Modeling Guide describes how to create each type of object.To create subsequent versions of an object, use Version | New, as described in this section.PrerequisitesIf you are creating a new version of an existing object:n The existing object version must be frozen.Note: You can create a new version from the working version of an object. However, ObjectTeam first freezes the working version, and then creates the new version from the frozen version.n The parent object version, if any, must be working. For example, if a phase version is frozen, you cannot create a new version of a system in that phase. You must create a new phase version (or unfreeze the phase version): you can then create a new version of a system in that working phase version.ResultsWhen you create a new version of an existing object:n The new object version has a status of working and is identical to the frozen version used to create it. TERM1="working version" TERM2="creating with New"n The frozen object version is removed from your configuration version. If it is not used in any other configuration version, it is removed from the repository and given the status backGround.TERM1="frozen version" TERM2="creating with New"TERM1="backGround version" TERM2="creating with New"Effect on parent and child versionsCreating a new version of an object affects its parent and child versions as follows:n Effect on parent. If the parent object version has a dynamicFrozen link to the child object, the link is updated. (See REFID="19213" TYPE="XREF-TEXTCOPY"Changing Link Status.)TERM1="dynamicFrozen link" TERM2="updated by New"n Effect on child. Creating a new version of a parent object has no effect on the child object versions. The frozen and new versions of the parent object both point to the same frozen versions of the child objects.Note: If you create a new parent object version based on a working version, ObjectTeam freezes the parent object version, which also freezes its child object versions.To create a new versionΣ To create a new version of an existing object:1 In the Information area, select the frozen (or working) version of the object.2 Select Version | New.ObjectTeam creates a new version of the object, making it the working version of the object. The working version of the object is added to your configuration. The frozen version is removed from your configuration.Warning: If you create an object version in your configuration and the version number is not what you expect, there may be an existing object with the same name that is deselected. Use the Version Browser to examine the version hierarchy. For more details, see REFID="34596" TYPE="XREF-TEXTCOPY"Version Browser.TERM1="version" TERM2="deleting"ID="23201"Deleting VersionsIntroductionTERM1="version" TERM2="deleting"TERM1="deleting" TERM2="version"Deleting an object version removes it from the repository and the file system.What versions can be be deletedOnly object versions that meet the following criteria can be deleted:n The object version is not referenced by another configuration.n It is a leaf object version, one that has not been used to create other object versions.Two ways to delete versionsYou can delete object versions using either File | Delete or Version | Delete.n File | Delete deletes the selected object version. If you attempt to delete a non-leaf object version, ObjectTeam displays a message.TERM1="Delete (File menu)"n Version | Delete deletes the selected object version, if it is the only leaf object version. If it is not, ObjectTeam displays a dialog box that lists all leaf object versions of the selected object. You can select and delete one or more of the leaf object versions.TERM1="Delete (Version menu)"Effect on parent and child versionsDeleting an object version affects its parent and child versions as follows:n Effect on parent. If you delete a child object version, its parent object version no longer has a link to the child object.n Effect on child. If you delete a parent object version, the working child object versions are also deleted. Frozen child object versions are not affected.How to use File | DeleteΣ To delete one or more object versions using File | Delete:1 In the information area, select the object versions that you want to delete.2 Select File | Delete.ObjectTeam deletes the selected object versions.How to use Version | DeleteΣ To delete one or more object versions using Version | Delete:1 In the information area, select the object version that you want to delete. You can select only one object version.2 Select Version | Delete.- If the selected object version is the only leaf object version, ObjectTeam deletes it. - If the selected object version is not the only leaf object version, ObjectTeam displays a dialog box, listing all the leaf object versions of the selected object.Select the versions that you want to delete, and then click OK.ObjectTeam deletes the selected object versions.TERM1="freezing" TERM2="versions"TERM1="version" TERM2="freezing"ID="34174"Freezing VersionsIntroductionTERM1="version" TERM2="freezing"TERM1="freezing" TERM2="versions"TERM1="Freeze (Version menu)"TERM1="frozen version" TERM2="creating with Freeze"TERM1="object" TERM2="freezing"Freezing an object version changes its status from working to frozen. The frozen object version cannot be edited.Typically, you freeze an object version to make it available to other users or so that you can return to it. For example, you are about to change the model, but you want to be able to return to the current version if the changes do not work.Only working versions can be frozen Only object versions with a status of working can be frozen; all other object versions are already frozen.Effect on parent and child versionsFreezing an object version affects its parent and child versions as follows:n Effect on parent. If the parent object version has a dynamicFrozen link to the child object, the link is updated. (See REFID="19213" TYPE="XREF-TEXTCOPY"Changing Link Status.)TERM1="dynamicFrozen link" TERM2="updated by Freeze"n Effect on child. Working child object versions are also frozen. Frozen child object versions are not affected.Links to child object versionsFreezing a parent object version also freezes the links to its child objects. As a result, a frozen parent version always references the same child object versions, regardless of the status of the links. (Link status is described in REFID="19213" TYPE="XREF-TEXTCOPY"Changing Link Status.)Notes about diagram files and groupsFollowing are a few notes on freezing diagram files and groups:n Diagram files. When you freeze a diagram file, you freeze the file only. You do not freeze the items referenced in the file. For example, freezing a Class Diagram (CD) does not freeze the CDMs of the classes that appear in the CD.TERM1="diagram" TERM2="freezing"TERM1="property" TERM2="freezing"TERM1="group" TERM2="freezing"If you want to freeze both the diagram file and the items that it references, use Groups and SavedGroups, as described in REFID="11810" TYPE="XREF-TEXTCOPY"Chapter 4, Using Groups.n Groups. When you freeze a group, you freeze the rules that define the contents of the group, not the files and items in it. See REFID="11810" TYPE="XREF-TEXTCOPY"Chapter 4, Using Groups, for more information.How to freeze an object versionΣ To freeze an object version:1 In the information area, select one or more working object versions.2 Select Version | Freeze.The Freeze Version dialog box appears.3 Enter a brief comment that describes the object version, and then click OK.The comment is stored with the frozen version and displayed when ObjectTeam lists the object versions. Careful use of comments can help you identify the object version that you want to use.ObjectTeam freezes the object version.TERM1="version" TERM2="unfreezing"ID="26343"Unfreezing VersionsIntroductionTERM1="version" TERM2="unfreezing"TERM1="Unfreeze (Version menu)"TERM1="frozen version" TERM2="unfreezing"TERM1="object" TERM2="unfreezing"TERM1="working version" TERM2="creating with Unfreeze"Unfreezing an object version changes its status from frozen to working. The working object version can be edited.What versions can be unfrozenOnly object versions that meet the following criteria can be unfrozen:n The object version must have a status of frozen.n The parent object version, if any, must have a status of working.n The object version cannot be referenced in any other configuration.n The object version must be a leaf object version, which is one that has not been used to create other object versions.TERM1="leaf object version" TERM2="unfreezing"Effect on parent and child versionsUnfreezing an object version has no effect on either its parent or child versions.How to unfreeze an object versionΣ To unfreeze an object version:1 In the information area, select one or more frozen object versions.2 Select Version | Unfreeze.ObjectTeam unfreezes the selected object versions.TERM1="selecting" TERM2="versions"TERM1="version" TERM2="selecting"ID="29758"Selecting VersionsIntroductionTERM1="version" TERM2="selecting"TERM1="selecting" TERM2="versions"TERM1="frozen version" TERM2="selecting"TERM1="backGround version" TERM2="selecting"TERM1="configuration" TERM2="adding version to"Selecting an object version adds it to your configuration.Only frozen versions can be selectedOnly frozen or backGround object versions can be selected.PurposeYou build your development environment by adding object versions to your configuration. You can add object versions that you are working on or versions that other project members are working on.n Typically, if you are working on an object, you create the object and then create new versions of it as necessary. In this case, selecting an version is useful when you want to use a previous version of the object.n You can also select a version of an object that someone else is working on. You do not interfere with the work of the other person because you can add only frozen versions of the objects to your configuration. The working version of the object is in the configuration of the person working on it.Effect on parent and child versionsSelecting an object version affects its parent and child versions as follows:n Effect on parent. A link to the selected object version is added to the parent object version.n Effect on child. Child object versions are also added to the configuration version.Ways to select objectsTERM1="Select (Version menu)"Which command you use to select an object version depends on whether a version of that object is already in your configuration version:n Choose a different version of an object. If the object is already in your configuration version, but you want to select a different version of the object, select the object version and then select Version | Select | Selected.n Choose a new object. If the object is not in your configuration version, select Version | Select | New.How to select a different version Σ To select a different version of an object that is already in your configuration version:1 In the information area, select the object version.2 Select Version | Select | Selected.A dialog box appears, displaying all other frozen versions of the object.3 Select the object version that you want to use. Then click OK.ObjectTeam adds the object version you selected in the dialog box to your configuration version. It removes the object version selected in the information area from your configuration version; if that object version is not used in any other configuration it is removed from the repository and given the status backGround.How to select a new objectΣ To select an object version when the object is not yet in your configuration version:1 Move to the appropriate level; for example, to select a system version, move to the phase level.2 Select Version | Select | New.A dialog box appears, displaying all available frozen object versions.3 Select the object version that you want to use. Then click OK.ObjectTeam adds the selected object version to your configuration version.ID="36489"Deselecting VersionsIntroductionTERM1="version" TERM2="canceling"TERM1="canceling" TERM2="versions"TERM1="Deselect (Version menu)"TERM1="frozen version" TERM2="canceling"TERM1="configuration" TERM2="removing versions from"Deselecting an object version removes it from your configuration. If it is not used in any other configuration, it is removed from the repository and given the status backGround.Only frozen versions can be deselectedOnly frozen object versions can be deselected.Note: You can deselect a working version. However, ObjectTeam first freezes the working version, and then deselects that frozen version.Effect on parent and child versionsSelecting an object version effects its parent and child versions as follows:n Effect on parent. If you deselect a child object version, its parent object version no longer has a link to the child object.n Effect on child. If you deselect a parent object version, the child object versions are also removed from the configuration version.Note: If you deselect a working object version, ObjectTeam freezes that object version, which also freezes its child object versions.How to deselect an object version Σ To remove an object version from your configuration version:1 In the information area, select one or more object versions that you want to remove from your configuration version.2 Select Version | Deselect.ObjectTeam removes the selected object version from your configuration version. If it is not used in any other configuration, it is removed from the repository and given the status backGround.TERM1="removing" TERM2="object versions from Browser"TERM1="version" TERM2="removing from Browser"ID="33346"Deactivating and Activating Configuration VersionsDeactivating a configuration versionTERM1="configuration" TERM2="deactivating"TERM1="deselecting" TERM2="configurations"TERM1="Deactivate (Version menu)" TERM2="configuration"TERM1="backGround version" TERM2="creating with Deactivate"Deactivating a configuration version changes its status from frozen to backGround. It also removes the configuration version from the repository and stores it in the file system. (Removing data from the repository can improve database performance.) The configuration version is still visible in the Browser.Note: Version | Deactivate is also used to remove Corporate Groups from a System version, as described in REFID="11810" TYPE="XREF-TEXTCOPY"Chapter 4, Using Groups.Activating a configuration versionTERM1="configuration" TERM2="activating"TERM1="activating" TERM2="configuration"TERM1="Activate (Version menu)"TERM1="frozen version" TERM2="activating"TERM1="restoring" TERM2="backGround version"Activating a configuration version changes its status from backGround to frozen, and moves the configuration version back into the repository.Note: Version | Activate is also used to add Corporate Groups to a System version, as described in REFID="11810" TYPE="XREF-TEXTCOPY"Chapter 4, Using Groups.Only for configuration versionsOnly configuration versions can be deactivated and activated.Effect on child versionsThe parent object of a configuration version is the project. Deactivating or activating a configuration version has no effect on the project object.n Deactivating a configuration version also deactivates all its child object versions, unless a child object version is used by another configuration, in which case it is not affected.n Activating a configuration version also activates all its child object versions.How to deactivate a configurationΣ To deactivate a configuration version:1 In the information area, select the frozen configuration version that you want to deactivate.2 Select Version | Deactivate.ObjectTeam deactivates the configuration version.How to activate a configurationΣ To activate a configuration version:1 In the Information area, select the backGround configuration version that you want to activate.2 Select Version | Activate.ObjectTeam activates the configuration version.ID="19213"Changing Link StatusIntroductionTERM1="version" TERM2="link status"TERM1="configuration" TERM2="links to versions"A parent object version does not contain its child object versions. Instead, the parent object version contains a list of links between the parent object version and the child object versions.PurposeTERM1="link status"An object version always has a link to its parent object, and you can always change the status of the link. However, link status is useful only when you are not the person creating new frozen versions of the object. The following scenario illustrates this situation.You want to reference an object that a colleague is working on. You use Version | Select to add a frozen version of the object to your configuration version. Your colleague continues to work on it and creates a new frozen version. The link status of the object in your configuration determines whether your configuration version references that new frozen version of the object automatically.Link statusThe status of each link allows you to choose the stability of the child object version:n A fixed link (the default) points to a specific object version. If configurationA contains a fixed link to a frozen object version, and another configuration creates a new frozen version of the object, configurationA is not affected.TERM1="fixed, link status"n A dynamicFrozen link points to the most recent object version. If configurationA contains a dynamicFrozen link to a frozen object version, and another configuration creates a new frozen version of the object, ObjectTeam updates the link in configurationA to point to the new frozen version of the object.TERM1="dynamicFrozen link" TERM2="definition"Link status displayed in Details viewWhen you are using Details view in the Browser, the status of an object's link appears in the information area. (To display the Details view, select View | Details, if it is not already selected.)How to change the status of a linkΣ To change the status of a link:1 In the information area, select the child object version.2 Select File | Change | Link Status.A dialog box appears.3 Select the link status that you want to use.ExampleIn the following illustration, Pat's configuration and Lou's configuration both point to the same frozen version of Object Design phase.FILENAME="00264.tif" ORIGSEQ="59" ORIGTYPE="I" ORIGDOC="../../sources/pmg/version.fm5.mif"Pat creates a new versionPat wants to work on the core system. He creates a new version of the object design phase and then a new version of the core system. Lou's configuration is not affected.FILENAME="00265.tif" ORIGSEQ="28" ORIGTYPE="I" ORIGDOC="../../sources/pmg/version.fm5.mif"Pat freezes the new versionPat finishes his work on the core system and freezes the object design phase, which also freezes the core system. What happens to Lou's configuration depends on the link status for the object design phase in Lou's configuration.n If the link status is fixed, Lou's configuration is not affected.n If the link status is dynamicFrozen, Lou's configuration is updated to point to the most recent version of the object design phase. Once again, Pat's configuration and Lou's configuration both point to the same frozen version of object design phase.FILENAME="00266.tif" ORIGSEQ="54" ORIGTYPE="I" ORIGDOC="../../sources/pmg/version.fm5.mif"TERM1="comparing" TERM2="versions"TERM1="version" TERM2="comparing"ID="19986"Comparing File VersionsIntroductionTERM1="version" TERM2="comparing"TERM1="Compare (Version menu)"TERM1="frozen version" TERM2="comparing"TERM1="working version" TERM2="comparing"You can use Version | Compare to compare an object version in your configuration version with any frozen version of that object. Version compare is available for the following types of objects:TERM1="file version" TERM2="comparing"n Text files on the system level of the implementation phasen Local sections on the document leveln Diagrams and matrices on the system levelCompare command for text files and local sectionsBy default, ObjectTeam uses the fcomp utility to compare text files and local sections. You can use Options | Compare Command to specify a different utility.TERM1="Compare Command (Options menu)"TERM1="comparing" TERM2="specifying compare utility"TERM1="fcomp utility"Compare command for diagrams and matrixesObjectTeam uses the udmcmp utility to compare diagrams and matrices. You can customize the udmcmp utility, as described in the ObjectTeam Customization Guide.TERM1="udmcmp utility"By default, this utility reports diagrams or matrices as identical if the elements in the following table are identical:COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ElementsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Diagram COLNAME="3" VALIGN="TOP" MOREROWS="0"MatrixCOLNAME="1" VALIGN="TOP" MOREROWS="0"NodesCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"Node connectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"RowsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="1" VALIGN="TOP" MOREROWS="0"CellsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"XBy default, the udmcmp utility finds nodes, connectors, connected nodes, and rows to be identical if the elements in the following table are identical:COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ElementsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Diagram componentCOLNAME="3" VALIGN="TOP" MOREROWS="0"Matrix componentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Component typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="1" VALIGN="TOP" MOREROWS="0"LabelsCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="1" VALIGN="TOP" MOREROWS="0"Component attributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XCOLNAME="1" VALIGN="TOP" MOREROWS="0"CoordinatesCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"SizeCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"XTo compare diagrams or matricesΣ To compare versions of a diagram or matrix:TERM1="diagram" TERM2="comparing"TERM1="Class Definition Matrix" TERM2="comparing"1 In the information area, select a diagram or matrix.2 Select Version | Compare.The Compare Version dialog box appears.FILENAME="00267.unk" ORIGFILE="pics/compvers.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/version.fm5.mif"3 Select the version that you want to compare against. Then click OK.ObjectTeam compares the two object versions, and displays the results in a Monitor window.FILENAME="00268.unk" ORIGFILE="pics/compoutp.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/version.fm5.mif"How to compare versions of a text file or a local sectionΣ To compare versions of a text file or a local section:TERM1="text file, comparing"TERM1="local section, comparing"1 Select a text file at the system level in the implementation phase, or a local section at the document level.2 Select Version | Compare.3 Select the version that you want to compare against. Then click OK.TERM1="copying" TERM2="versions"TERM1="version" TERM2="copying"ID="26571"Copying VersionsIntroductionTERM1="version" TERM2="copying"TERM1="copying" TERM2="versions"TERM1="Copy (Version menu)"TERM1="frozen version" TERM2="copying"TERM1="working version" TERM2="copying"Use Version | Copy to copy the contents of a selected object version into the current object version.Object versions that can be copiedThe following object versions can be copied:n Frozen versions of the selected objectn Working and frozen versions of any object in the project that is compatible with the selected objectHow to copy an object versionΣ To copy an object version:1 In the information area, select the object version into which you want to copy the data.2 Select Version | Copy.A dialog box appears, displaying all object versions that can be copied into the selected object version. 3 Select the object version that you want to copy. Then click OK.ObjectTeam copies the object version selected in the dialog box into the object version selected in the information area.Chapter 2 Parallel ID="14035"DevelopmentDefinition of parallel developmentParallel development occurs when a system must be modified along two or more paths simultaneously. For example:n If you have multiple developers working on the model and want to have a shielded development area for each developer (or group of developers).n If you are developing a new release of a model and, simultaneously, need to make updates to the current release of the model.Support for parallel developmentIn ObjectTeam, you can create separate configurations for each branch of development. When you are ready, you can merge the configurations.This chapter provides examples of how and when you might use parallel development in ObjectTeam. It then describes how to merge the configurations used in parallel development.PrerequisiteBefore merging configurations (phases or systems), you must be familiar with versions and configurations, as described in REFID="22309" TYPE="XREF-TEXTCOPY"Chapter 1, Version and Configuration Management.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38995" TYPE="XREF-TEXTCOPY"Sample Scenarios 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25813" TYPE="XREF-TEXTCOPY"Using Multiple Configurations 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17775" TYPE="XREF-TEXTCOPY"Merging Configurations, Phases, and Systems 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28900" TYPE="XREF-TEXTCOPY"Merge Rules 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19ID="38995"Sample ScenariosTwo scenariosThis section provides two examples of how you might use parallel development in ObjectTeam:n Scenario 1 uses parallel development to provide shielded development areas for the developers working on a model.n Scenario 2 uses parallel development to allow developers to work on multiple releases of a model.Scenario 1: team developmentIn this scenario, multiple developers are working on one model. They are each working in their own configuration, rather than sharing a single configuration. Periodically, you must merge the developers' changes into an integrated version of the model. The following figure illustrates this scenario.FILENAME="00269.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"Configurations usedIn this scenario, you use the following configurations:n One Main configuration. This configuration contains the integrated version of the model. All development changes are periodically merged into this one configuration.n A configuration for each developer (Developer configurations). Each developer, or group of developers, works in a separate configuration. Periodically, the Developer configurations are merged into the Main configuration.ProcessThe following steps outline the parallel development process:1 At the beginning of the cycle, the Main configuration holds the most recent version of the model.2 The developers add to their configurations the most recent system versions from the Main configuration.3 In their own configurations, the developers create new versions of the systems and modify them as necessary. Typically, each developer focuses on a different system or different set of systems.4 When you are ready to integrate the developers' changes, the developers freeze their configurations and you merge each Developer configuration into the Main configuration.5 The Main configuration again holds the most recent version of the model. Return to step 1 to repeat the development cycle.Scenario 2: parallel release schedulesIn this scenario, you have released a version of your model (Release X). You are ready to begin work on the next release (Release X+1), but must occasionally update the current release (Release X) to correct critical errors. The following figure illustrates this scenario.FILENAME="00270.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"Configurations usedIn this scenario, you use two configurations:n The Main configuration. This configuration contains the integrated version of the Release X+1 model. n The ReleaseX configuration. This configuration contains the integrated version of the Release X model.ProcessThe following steps outline the parallel development process:1 Release X occurs. The Main and ReleaseX configurations both contain the Release X version of the model.2 Developers working on Release X+1 update the Main configuration. Developers working on Release X update the ReleaseX configuration.Tip: If multiple developers are working on a release, you can use parallel development, as described in the previous scenario.3 When development of Release X+1 is complete, you create a ReleaseX+1 configuration.4 In the ReleaseX+1 configuration, select all the latest system versions from the ReleaseX configuration.5 Merge the Main configuration into the ReleaseX+1 configuration.If an object has been changed in both ReleaseX and ReleaseX+1, the merge process warns you of the conflicting object versions. You examine the conflicting Release X and Release X+1 versions of the object and reconcile the changes.6 The ReleaseX+1 configuration now contains the finished Release X+1 version of the model. In the Main configuration, select all the latest system versions from the Release X+1 configuration.7 Return to step 1 to begin work on the next release.ID="25813"Using Multiple ConfigurationsIntroductionWhen a project uses multiple configurations, the configurations share frozen object versions. To work on a shared object, you create a new working version of the object in your configuration.n TERM1="object" TERM2="in configuration"Each configuration can contain one version of a particular object.n TERM1="working version" TERM2="in configuration"A working version of an object is in exactly one configuration. That is, the same object version cannot be edited in two configurations.n A frozen version of an object can be in any number of configurations. ExampleThe following example shows how two configurations, a Main configuration and a Developer configuration, might be used in a project.Main configurationThe Main configuration contains an Object Design Phase version and two System versions; the Phase and System versions are frozen versions. Lou's configuration is empty.FILENAME="00271.tif" ORIGSEQ="8" ORIGTYPE="I" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"Developer configurationThe developer, Lou, wants to edit the Core system. She adds the frozen Object Design Phase version to her configuration. Because the Phase version points to the frozen System versions, the System versions are also added to Lou's configuration. Both configurations now point to the same Phase and System versions.FILENAME="00272.tif" ORIGSEQ="15" ORIGTYPE="I" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"Changing the Developer configurationLou wants to work on the Core system, so she creates a new version of the Object Design Phase and a new version of the Core system. The new versions become working versions in Lou's configuration. The Main configuration does not change. The two configurations now point to the same version of the GUI NT system, but different versions of the Core system.FILENAME="00273.tif" ORIGSEQ="24" ORIGTYPE="I" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"Share System versions, not File versionsTERM1="configuration" TERM2="sharing versions"TERM1="version" TERM2="sharing"Configurations should share frozen System versions rather than File versions.If two configurations contain the same frozen System version, the property values in that System version are the same in both configurations. If two configurations contain the same frozen File version, not all property values available in that File version are the same in both configuations.See REFID="40295" TYPE="XREF-TEXTCOPY"Item Generations and Property Values for more information.ID="17775"Merging Configurations, Phases, and SystemsIntroductionYou can mergen Two configuration versionsn Two versions of the same phasen Two versions of the same systemPurposeYou merge a source configuration, phase, or system into a target configuration, phase, or system. The merge operation updates the target based on the changes made to the source.Note: The merge operation is designed to support parallel development. It is not designed to merge two unrelated configurations, phases, or systems.ProcessThe following steps provide an overview of the merge process. This section describes each step in greater detail.1 You select a target configuration, phase, or system. You select a source configuration, phase, or system. You start the merge.See: REFID="18382" TYPE="XREF-TEXTCOPY"Starting the Merge.2 ObjectTeam examines all elements in the source in preparation for merging them into the target:- If the source version of the element is already in the target, it does not need to be merged.- If no version of the element is in the target, ObjectTeam can merge the element into the target.- If the source and target elements are directly derived from one another, ObjectTeam can merge the element into the target.- If the source and target elements are not directly derived from one another, the source element conflicts with the target element. You must resolve the conflict before ObjectTeam can merge the element into the target.See: REFID="28900" TYPE="XREF-TEXTCOPY"Merge Rules.3 ObjectTeam opens a Merge window. The window lists each source element that must be merged into the target and whether or not the source element conflicts with a target element.See: REFID="14654" TYPE="XREF-TEXTCOPY"Reviewing the Results in the Merge Window.4 You use the Merge window to merge each source element into the target.- If the source element does not conflict with the target element, you can either merge the source element into the target or use the target element.- If the source element conflicts with the target element, you can either use the source element or use the target element. Typically, you examine the conflicting elements, merge them by hand, and then use your merged version of the element.See: REFID="22277" TYPE="XREF-TEXTCOPY"Merging the Source Elements Into the Target.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18382" TYPE="XREF-TEXTCOPY"Starting the Merge 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14654" TYPE="XREF-TEXTCOPY"Reviewing the Results in the Merge Window 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22277" TYPE="XREF-TEXTCOPY"Merging the Source Elements Into the Target 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11562" TYPE="XREF-TEXTCOPY"Working With Merge Links 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18ID="18382"Starting the MergeIntroductionStarting a merge operation does not change the source or target configuration, phase, or system. It displays the Merge window. The target is changed when you use the Merge window to merge the source into the target, as described in REFID="22277" TYPE="XREF-TEXTCOPY"Merging the Source Elements Into the Target.Status of versionsYou can merge configuration, phase, and system versions that have a status of working or frozen. You cannot merge versions that have a status of background.If the status of the target version is working, the source elements are merged into that target version. If the status is frozen, ObjectTeam creates a new version of the target object and merges the source elements into that new version.How to merge configurationsΣ To merge two configurations:1 In the Browser, open the Project that contains the configurations.2 Select the target configuration.3 Select Version | Merge.The Select Source dialog box appears.4 Select the source configuration and select OK.ObjectTeam examines each object in the source, determines how it should be merged into the target, and displays the results in the Merge window.5 Examine the results, as described in REFID="14654" TYPE="XREF-TEXTCOPY"Reviewing the Results in the Merge Window.6 Optionally, merge the source elements into the target, as described in REFID="22277" TYPE="XREF-TEXTCOPY"Merging the Source Elements Into the Target.How to merge versions of a phase or systemΣ To merge two versions of a phase or system:1 Open the Version Browser for the phase or system.2 Select the target version.3 Press and hold the Control key while you select the source version.4 Select Version | Merge.ObjectTeam examines each object in the source, determines how it should be merged into the target, and displays the results in the Merge window.5 Examine the results, as described in REFID="14654" TYPE="XREF-TEXTCOPY"Reviewing the Results in the Merge Window.6 Optionally, merge the source elements into the target, as described in REFID="22277" TYPE="XREF-TEXTCOPY"Merging the Source Elements Into the Target.ID="14654"Reviewing the Results in the Merge WindowIntroductionThe following illustration shows a Merge window. The title bar lists the source and target object versions that you are merging.FILENAME="00274.unk" ORIGFILE="pics/mergwin.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"Display areaThe Merge window lists all elements in the source object version that are not in the target object version. If the source version of an element is in the target, it is not listed in the Merge window.Tip: If the Merge window is empty, the source object version is a subset of (or identical to) the target object version.Information displayedLike the Browser, the Merge window has a Navigation area and an Information area. When you select an object in the Navigation area, the Information area displays the following information for each element in that object:COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ColumnCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object name.COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object type.COLNAME="1" VALIGN="TOP" MOREROWS="0"Property NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property name.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConflictCOLNAME="2" VALIGN="TOP" MOREROWS="0"A value of No or Yes.No. The source and target elements do not conflict; ObjectTeam can merge the source element into the target. This occurs when the source element is not in the target, the source and target elements are directly derived from one another, or the source element is a System or Phase that contains no conflicting elements.Yes. The source element conflicts with the target; you must resolve the conflict before ObjectTeam can merge the source element into the target. This occurs when the source and target elements are not directly derived from one another, or the source element is a System or Phase that contains conflicting elements.COLNAME="1" VALIGN="TOP" MOREROWS="0"Base VersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version of Name from which both the From Version and the To Version were derived. Tip: If there is no Base Version, the From and To Versions are not derived from the same version.COLNAME="1" VALIGN="TOP" MOREROWS="0"From VersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version of Name (if any) that is selected in the source version of the object selected in the Navigation area. Tip: If the Base Version and From Version are the same (or from the same configuration), and the To Version is different (or from a different configuration), the To Version is the most recent version.COLNAME="1" VALIGN="TOP" MOREROWS="0"To VersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version of Name (if any) that is selected in the target version of the object selected in the Navigation area. Tip: If the Base Version and From Version are the same (or from the same configuration), and the To Version is different (or from a different configuration), the To Version is the most recent version.How to filter the informationSelect or clear the View | Show All Merge Objects command to filter the information displayed in the Merge window.n Select this command to show all elements in the source object version that must be merged into the target object version.n Clear this command (the default) to show the minimum amount of information necessary to merge the source into the target:- If a phase or system in the source object version contains conflicting elements, show all elements in the phase or system.- If a phase or system in the source object version contains no conflicting elements, show the phase or system but not the elements that it contains.How to display details about an elementUse the following commands to display information about an element:n File | Info displays a dialog box that shows- For an object version, where the source and target versions of the element are selected.- For an item, the scope of the source and the target element.- For a property, the value of the source and the target element.n File | Open Source opens an editor for the source version of the element. Available for File versions only.n File | Open Target opens an editor for the target version of the element. Available for File versions only. Tip: When examining conflicting file versions, you might find it useful to compare them. See REFID="19986" TYPE="XREF-TEXTCOPY"Comparing File Versions.ID="22277"Merging the Source Elements Into the TargetMerge all source elementsUse the Merge window to merge the source elements into the target. To completely merge the source object version into the target object version, you must merge into the target all of the source elements listed in the Merge window.How to merge source elements into the targetΣ To merge source elements into the target object version:1 Select one or more source elements in the Information area of the Merge window.Tip: To select multiple elements, press and hold the Control key while selecting the elements, or use the Edit | Select All and Edit | Invert Selection commands.2 Select one of the following commands from the Version menu:- REFID="14540" TYPE="XREF-TEXTCOPY"Merge command- REFID="24858" TYPE="XREF-TEXTCOPY"Overwrite command- REFID="37744" TYPE="XREF-TEXTCOPY"Create Merge Link commandObjectTeam executes the command and removes the selected elements from the Information area of the Merge window.3 Repeat steps 1 and 2 until all source elements have been merged into the target.ID="14540"Merge commandSelect the Merge command when eithern the selected source element is a phase or system and you want to merge the source version into the target version.Note: If the source version of the phase or system contains an element that conflicts with the target, that element is not merged. It remains in the Merge window.n the selected source element is in a System version (it is a file, property, or item), it does not conflict with the target, and you want to use the source version of the element.ExampleIn the following example, you are merging the dev1 configuration into the main configuration. The dev1 configuration contains only one phase. When the Merge window appears, you select the phase and then select the Merge command. The following table shows the effect of the Merge command. Explanatory notes follow the table.COLS="3"COLNAME="1" COLWIDTH="171p"COLNAME="2" COLWIDTH="171p"COLNAME="3" COLWIDTH="171p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"TargetCOLNAME="3" VALIGN="TOP" MOREROWS="0"New (Merged) TargetCOLNAME="1" VALIGN="TOP" MOREROWS="0"dev1 (v1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (dev.1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (dev.1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram1 (main.7)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram2 (dev.1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classMatrix2 (dev.2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item1 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item2 (system)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item3 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FreeText: newValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"main (v1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analysis (main.3)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SystemDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (main.10)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram1 (main.7)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram2 (main.6)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classMatrix2 (main.8)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item1 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item2 (system)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FreeText: valueXname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemB (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemC (main.2)COLNAME="3" VALIGN="TOP" MOREROWS="0"main (v2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analysis (main.3)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SystemDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (main.11)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram1 (main.7)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classMatrix2 (dev.2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item1 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item2 (system)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item3 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FreeText: **conflict**name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemB (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemC (main.2)n The target configuration, main (v1) is frozen, therefore, ObjectTeam creates a new version of the target configuration, main (v2).n All elements in the dev1 configuration are either new or directly derived from the main configuration. Therefore, none of the source elements conflict with the target.n The dev1 configuration contains a new version of the Object Design phase, therefore, ObjectTeam creates a new version of the Object Design phase (main.5) in main (v2).n The source Object Design phase contains a new version of systemA. In this example, the target version of systemA (main.10) has also been changed; therefore, ObjectTeam creates a new version of systemA (main.11) in the target Object Design phase.Note: If the target version of systemA (main.10) had not been changed, the source version of systemA (dev.1) would be selected in main (v2).n The source version of systemA contains new versions of diagram2 and classMatrix2, therefore, ObjectTeam selects these new versions in the target version of systemA.n The source version of systemA contains a new item, item3, therefore, ObjectTeam copies this new item to the target version of systemA.n The source version of systemA has a new value for the FreeText property. It conflicts with the target value, so cannot be merged.ID="24858"Overwrite commandSelect the Overwrite command when the source element conflicts with the target and you want to use the source version of the selected element instead of the target version.Note: The Overwrite command is only available when the source element conflicts with the target.ExampleIn the following example, you are merging the dev1 configuration into the main configuration. Both configurations are frozen.The source version of the Object Design phase (ObjectDesign, dev.1) is directly derived from target version. The source version of systemA (systemA, dev.1) is not directly derived from the target version. When the Merge window appears, it indicates that the source version of systemA conflicts with the target version.You select systemA and then select the Overwrite command. The following table shows the effect of the Overwrite command. Explanatory notes follow the table.COLS="3"COLNAME="1" COLWIDTH="171p"COLNAME="2" COLWIDTH="171p"COLNAME="3" COLWIDTH="171p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"TargetCOLNAME="3" VALIGN="TOP" MOREROWS="0"New (Merged) targetCOLNAME="1" VALIGN="TOP" MOREROWS="0"dev1 (v1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (dev.1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (dev.1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram1 (main.7)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classMatrix2 (dev.2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item1 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item2 (system)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item3 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FreeText: newValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"main (v1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analysis (main.3)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SystemDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (main.10)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram1 (main.7)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classMatrix2 (main.8)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item1 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item2 (system)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FreeText: valueXname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemB (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemC (main.2)COLNAME="3" VALIGN="TOP" MOREROWS="0"main (v2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analysis (main.3)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SystemDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (dev.1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemB (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemC (main.2)n To create a new system version in the target configuration, ObjectTeam must first create a new configuration version (main, v2) and a new phase version (ObjectDesign, main.5).n In the new target phase version, ObjectTeam can now select the source version of systemA.ID="37744"Create Merge Link commandSelect the Create Merge Link command when you want to use the target version of the selected element rather than the source version. Note: The Create Merge Link command is only available when the source element is an object version. It is not available when the source element is a property or item.Merge LinksTo store the fact that you want to use the target version of an element instead of the source version, ObjectTeam adds a Merge Link to the target version. The Merge Link points from the source version to the target version. In the future, when you merge these source and target versions, ObjectTeam sees the Merge Link and ignores the source version.Note: You can display, create, and delete Merge Links in the Version Browser, as described in REFID="11562" TYPE="XREF-TEXTCOPY"Working With Merge Links.ExampleIn the following example, you are merging the dev1 configuration into the main configuration. Both configurations are frozen.The source version of the Object Design phase (ObjectDesign, dev.1) is directly derived from target version. The source version of systemA (systemA, dev.1) is not directly derived from the target version. When the Merge window appears, it indicates that the source version of systemA conflicts with the target version.You select systemA and then select the Create Merge Link command. The following table shows the effect of the Create Merge Link command. The new target version of systemA (main.11) is identical to the old target version (main.10), except for the addition of the Merge Link.COLS="3"COLNAME="1" COLWIDTH="171p"COLNAME="2" COLWIDTH="171p"COLNAME="3" COLWIDTH="171p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"TargetCOLNAME="3" VALIGN="TOP" MOREROWS="0"New (Merged) targetCOLNAME="1" VALIGN="TOP" MOREROWS="0"dev1 (v1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (dev.1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (dev.1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram1 (main.7)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classMatrix2 (dev.2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item1 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item2 (system)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item3 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FreeText: newValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"main (v1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analysis (main.3)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SystemDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (main.10)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'diagram1 (main.7)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classMatrix2 (main.8)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item1 (phaseDef)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'item2 (system)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FreeText: valueXname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemB (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemC (main.2)COLNAME="3" VALIGN="TOP" MOREROWS="0"main (v2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analysis (main.3)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SystemDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesign (main.5)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemA (main.11)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemB (main.4)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'systemC (main.2)ID="11562"Working With Merge LinksDefinitionA Merge Link is stored on a target object version. It points from a source object version to the target object version. When you merge the source version into the target version, ObjectTeam sees the Merge Link and ignores the source version. Merge Links are only used during merge.How to view Merge LinksΣ To view Merge Links, use the Version Browser:1 In the Browser, or Merge window, select an object version that has a Merge Link.2 Select Version | Version Browser.The Version Browser appears. It displays all versions of the object, including any Merge Links between versions.For more informationSee REFID="34596" TYPE="XREF-TEXTCOPY"Version Browser for a complete description of the Version Browser.How to create a Merge LinkTypically, you create Merge Links during a merge operation, as described in REFID="37744" TYPE="XREF-TEXTCOPY"Create Merge Link command. You can also create Merge Links in the Version Browser.Σ To create a Merge Link in the Version Browser:1 In the Version Browser, display the object for which you want to create a Merge Link.2 Select the source object version.3 Select the target object version.4 Select Version | Create Merge Link.ObjectTeam adds to the target object version a Merge Link that points from the source version to the target version.How to delete a Merge LinkΣ To delete a Merge Link, use the Version Browser:1 In the Version Browser, display the object version that has the Merge Link.2 Select the source version of the Merge Link.3 Select the target version of the Merge Link.4 Select Version | Delete Merge Link.ID="28900"Merge RulesWhat source elements are mergedWhen you merge a source configuration, phase, or system version into a target source configuration, phase, or system version, ObjectTeam merges each source element into the target. The following table lists the elements that appear in system, phase, and configuration versions.COLS="2"COLNAME="1" COLWIDTH="153p"COLNAME="2" COLWIDTH="297p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object VersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Elements It ContainsCOLNAME="1" VALIGN="TOP" MOREROWS="0"System versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Selected file versionsSelected group versionsSelected customization file versionsReused corporate group versionsSystem-level propertiesItemsItem propertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Phase versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Selected system versions (as described above)Selected customization file versionsPhase-level propertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Configuration versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Selected phase versions (as described above)Selected customization file versionsConfiguration-level propertiesComparing source and target elementsHow ObjectTeam compares source and target elements depends on the object type of the element:n If the element is an object version (for example, a phase, system, or file) ObjectTeam compares the version numbers of the source and target object versions. n If the element is an item, ObjectTeam compares the name, type, and scope of the source and target items.n If the element is a property, ObjectTeam compares the values of the source and target properties.The remainder of this section describes the merge rules for each type of object.ID="41435"File versionsWhen merging a source system into a target system, ObjectTeam examines each file version selected in the source system:n If no version of the file is selected in the target system, ObjectTeam can merge the source file version into the target.n If the source and target versions of the file are derived from one another, ObjectTeam can merge the source file version into the target.Tip: To see which version is more recent, compare the Base Version, To Version, and From Version columns in the Merge window. If the Base and To Versions are the same, the From (source) Version is more recent. If the Base and From Versions are the same, the To (target) Version is more recent.n If the source and target versions of the file are not derived from one another, the source version conflicts with the target version.Group versionsWhen merging a source system into a target system, ObjectTeam examines each group version selected in the source system. The rules for examining group versions are the same as those for examining file versions (see REFID="41435" TYPE="XREF-TEXTCOPY"File versions).Customization file versionsWhen merging a source system, phase, or configuration into a target system, phase, or configuration ObjectTeam examines each customization file version selected in the source system, phase, or configuration. The rules for examining customization file versions are the same as those for examining file versions (see REFID="41435" TYPE="XREF-TEXTCOPY"File versions).Reused corporate group versionsWhen merging a source system into a target system, ObjectTeam examines each reused corporate group version selected in the source system:n If no version of the corporate group is selected in the target system, ObjectTeam can merge the source corporate group version into the target.n If a different version of the corporate group version is reused in the target system, ObjectTeam can merge the source corporate group version into the target.ItemsWhen merging a source system into a target system, ObjectTeam examines each item in the source system:n If the item does not exist in the target system- and ObjectTeam can create it in the target using the same scope that is used in the source, ObjectTeam can merge the item into the target.- and ObjectTeam cannot create it in the target using the same scope that is used in the source, then the item conflicts with the target.After merging the source item into the target system, ObjectTeam copies the source item properties into the target, as described in REFID="27757" TYPE="XREF-TEXTCOPY"Properties.n If the item exists in the target system, and the scope of the source item is different than the scope of the target item, the source item conflicts with the target.ID="27757"PropertiesWhen merging a source system, phase, or configuration into a target system, phase, or configuration ObjectTeam examines each property in the source system, phase, or configuration.Note: The same rules are used for all properties (system-, phase-, and configuration-level properties, as well as item properties).BackgroundTo determine which property values to use, ObjectTeam compares three values:n Source property name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the value of the property as defined in the source item, system, phase, or configuration. If the source property is not set, its value is null.n Target property name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the value of the property as defined in the target item, system, phase, or configuration. If the target property is not set, its value is null.n Base property name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the value of the property as defined in the base system, phase, or configuration. The base version is the version from which both the source and target versions are derived. If the base property is not set, or the source and target versions are not derived from the same version, the base property is null.RulesObjectTeam uses the following rules to examine each source property:n If the source and target properties are different, the target property is not null, and the base property is the same as either the target or the source, ObjectTeam can merge the source property into the target.Tip: To see which property value is more recent, compare the base, source, and target values. If the base and source are the same, the target is more recent. If the base and target are the same, the source is more recent.n If the target and base properties are both null, ObjectTeam can merge the source property into the target.n If the source, target, and base properties are all different, the source property conflicts with the target.ID="20556"Merging Systems into Another PhaseIntroductionThis section describes how to merge systems and their contents from one phase into the next, from Analysis into System Design, for example, or from System Design into Object Design.Note: You do not merge systems from the Object Design phase into the Implementation phase, but you generate their contents into language-specific code files using an ObjectTeam code generator. For details on generating code, see the ObjectTeam Code Generation Guide for your target language.Phase boundariesEach phase is a shielded development area. Changes to a system in one phase do not (automatically) affect systems in any other phase. For example, work in the System Design phase does not change analysis data in the Analysis phase.However, work done in one phase can affect systems in other phases. If you have merged a system from the Analysis phase into the System Design phase, you can go back and modify a new version of that system in the Analysis phase.You must then decide whether those changes affect the system in the System Design phase and, if necessary, merge these changes into the System Design phase. These changes can be merged using ObjectTeam's built-in merge mechanism.Merging dataWhen you merge systems into another phase, ObjectTeam actually carries out three tasks:n It copies system data from one phase to the other n It freezes the source system (needed to create a merge link)n It creates merge linksObjectTeam uses a mechanism called "merging" to carry out these tasks (see REFID="17775" TYPE="XREF-TEXTCOPY"Merging Configurations, Phases, and Systems).How to merge systemsYou use the ObjectTeam Merge Window to merge data from one phase into the next. In the Merge Window, you select which system(s) you want to merge.Σ To merge systems from the previous phase:1 In the ObjectTeam Browser, move to Phase into which you want to merge system data from the previous phase.2 Select Utilities | Merge From Previous PhaseThe Merge Window appears.For details: See REFID="40524" TYPE="XREF-TEXTCOPY"The ObjectTeam Merge Window.Note: If the Merge Window is empty, there is nothing to merge: the source object(s) are then identical to the target object(s).3 In the Information Area of the ObjectTeam Merge Window, select the system(s) you want to merge.Warning: If you want to preserve any changes made in a system in the current phase, do only select non-conflicting systems. A system is non-conflicting if it has a No in the Conflict field. See REFID="38403" TYPE="XREF-TEXTCOPY"Dealing with Merge Conflicts for details.4 Select Version | MergeThe data from the source system(s) is copied to the target phase, the source system(s) are frozen, and merge links are created.Merging from other PhaseYou can also merge system data from a Phase other than the previous, using Utilities | Merge From Other Phase. You select the source Phase from the Select Merge Source dialog box, after which the Merge Window appears.FILENAME="00275.unk" ORIGFILE="pics/dbmerge.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"ID="40524"The ObjectTeam Merge WindowIntroductionThe ObjectTeam Merge Window is very similar to the Merge Window that is used for merging versions (See REFID="40524" TYPE="XREF-TEXTCOPY"The ObjectTeam Merge Window). It contains two panes: n Navigation area (at the left)n Information area (at the right)FILENAME="00276.unk" ORIGFILE="../mg/pics/impwdw.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"Information AreaThe Information Area lists the contents of the object selected in the Navigation Area. It contains the following columns:COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ColumnCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object name.COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object type.COLNAME="1" VALIGN="TOP" MOREROWS="0"Property NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property name (only applicable for item and file properties)COLNAME="1" VALIGN="TOP" MOREROWS="0"ConflictCOLNAME="2" VALIGN="TOP" MOREROWS="0"A value of No or Yes (see REFID="38403" TYPE="XREF-TEXTCOPY"Dealing with Merge Conflicts)COLNAME="1" VALIGN="TOP" MOREROWS="0"Base VersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version of Name from which both the From Version and the To Version were derived. Tip: If there is no Base Version, the From and To Versions are not derived from the same version.COLNAME="1" VALIGN="TOP" MOREROWS="0"From VersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version of Name (if any) that is selected in the source version of the object selected in the Navigation area. Tip: If the Base Version and From Version are the same (or from the same configuration), and the To Version is different (or from a different configuration), the To Version is the most recent version.COLNAME="1" VALIGN="TOP" MOREROWS="0"To VersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version of Name (if any) that is selected in the target version of the object selected in the Navigation area. ID="38403"Dealing with Merge ConflictsWhen do objects conflictThe source object conflicts with the target in either of the following situations:n The names of the source and target objects are identical, but they are not directly derived from one anothern The source element is a System that contains conflicting objectsTip: Conflicting objects can be identified in the Information Area of the ObjectTeam Merge Window by a Yes in the Conflict column.Conflict exampleThe following scenario is an example of how conflicts between objects can arise:1 You merged a system from the previous Phase into the current Phase2 You have created a new version of the merged System in the current Phase and made changes to this new version: you have added attributes and operations to classes in CDs, for example.3 Somebody (maybe you) has created a new version of the corresponding System in the previous Phase, and has made changes too. Attributes have been added to existing classes, for example.The situation is now as follows:n The System in the previous Phase contains features that are lacking in the corresponding system in the current Phase n The system in the current Phase contains features that are lacking in the corresponding system in the current Phase.FILENAME="00277.tif" ORIGSEQ="33" ORIGTYPE="I" ORIGDOC="../../sources/pmg/vbparal.fm5.mif"If you now merged version 2 of the previous Phase into the current Phase, the changes made to the classes in the current Phase would be lost, since the CDMs are copied from the other Phase. The CDMs related to existing classes are conflicting.But if you do not merge the CDMs from the previous Phase, the changes made to the classes in the previous Phase will not be processed in the current Phase.The conflict that has arisen must be resolved.Resolving a conflictTo resolve a conflict, you have to decide between preserving the conflicting target object or overwriting it.Preserving the target objectWhen data is merged into another Phase, ObjectTeam normally copies data from the previous phase to the current. If you want to preserve your data, you do not want that to happen. Create a merge link to prevent ObjectTeam from overwriting the target object.Overwriting the target objectIf you want a conflicting target object to be overwritten by its corresponding source object, you merge the source object, or the system that contains the conflicting object. The source object will then be copied over the target object and a merge link will be created automatically.Warning: Changes made to a new version of the target object will be lost.Creating merge linksCreate a merge link for target objects that you do not want to be overwritten by the source object during a merge action.Σ To create a merge link:1 In the Merge Window, open the system that contains the conflicting target object.2 Select the conflicting target object in the Information Area of the Merge Window.3 Select Version | Create Merge Link.The Link From ...To ... dialog box appears.4 Enter an (optional) comment and click OK.A merge link is created, the source object is frozen, and the conflicting target object disappears from the Merge Window. No data is copied. If you now (re)merge the parent system, the target object will be ignored because of the merge link.Removing merge linksMerge links can be created implicitly or explicitly. They are created implicitly when objects are merged. They are created explicitly on conflicting objects when you select Version | Create Merge Link in the Merge Window. You can remove a merge link by unfreezing the source object.Unreferenced CDMs and itemsObjects in the target phase can be overwritten as a result of a merge action, but they are never removed. For example, if a class disappears from the target CD because it was overwritten by the source CD (which did not contain the class), the corresponding CDM becomes unreferenced, but it will not be removed.Or, similarly, if an attribute disappears from a class as a result of a merge action, the item becomes unreferenced, and will not be removed from the set of defined items.Tip: You can remove all unreferenced items from a system, or a diagram using Utilities | Delete Unreferenced Items on Phase or System level. You cannot remove unreferenced CDMs this way, but you can find out all the unreferenced CDMs in a system by running a report using Utilities | Reports | On Unreferenced CDMs.Comparing conflicting objectsBefore you decide to overwrite or preserve a conflicting object, you might want to check what the differences are between the source and the target object. Σ To compare the source and the target object:1 Select the conflicting target object in the Information Area of the Merge Window.2 Select Version | CompareA Monitoring Window appears, listing the differences between the source and the target object.Version managementFrom the Merge Window, you can start up the Version Browser for a particular object. In the Version Browser you can, among other things, select, deselect, delete, freeze and unfreeze versions of an object.Σ To start the Version Browser:1 Select the object in the Information Area 2 Select Version | Version Browser.The Version Browser starts up for the selected object.Note: The Version Browser displays merge links between object versions within the same phase. However, it does not display merge links between object versions from different phases.For more informationSee REFID="34596" TYPE="XREF-TEXTCOPY"Version Browser in the ObjectTeam Project Management Guide for more information on the Version Browser.Chapter 3 User EnvironmentTYPE="MIFmarker"TYPE="number"0TYPE="text"Project Management GuideIntroductionThe chapter shows you how to set and save settings for the Browser and generated files. These settings define your user environment.Browser settingsBrowser settings control the appearance of the Browser, as well as the default settings for many dialog box fields. ObjectTeam automatically saves these settings to a file in your home directory. Optionally, you can explicitly save selected settings at a specific level in the project hierarchy. Generated filesCertain ObjectTeam tools, such as the Document Generator and Code Generator, produce files as their output. These files must be stored in the file system so that they are accessible to external tools, such as compilers and DTP packages. In a multiuser environment, each user should have a set of directories in which to store these generated files. How to start a second Browser with the same settingsSometimes it is useful to have more than one Browser window open. When you start a new Browser from the current Browser, ObjectTeam uses the current Browser settings as the initial settings for the new Browser.TERM1="Browser" TERM2="starting"TERM1="Clone (Utilities menu)"Σ To start a new Browser, select Utilities | Clone.TERM1="cloning a Browser"A second Browser appears.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35360" TYPE="XREF-TEXTCOPY"Browser Settings 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20105" TYPE="XREF-TEXTCOPY"File Paths for Generated Files 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4ID="35360"Browser SettingsDefinitionTERM1="user environment" TERM2="Browser settings"TERM1="saving" TERM2="Browser settings"TERM1="Browser" TERM2="saving settings"Browser settings control the appearance of the browser, and the default settings for many dialog box fields. Saved in two waysThe value of each browser setting is stored as an M4 environment variable. These variables are saved automatically and can also be saved explicitly.Saved automatically to Meta4UserEnv fileTERM1="Meta4UserEnv file"When you exit from the Browser, ObjectTeam saves the current settings to the Meta4UserEnv file. When you start the Browser, ObjectTeam uses this file to initialize the Browser settings. As a result, your latest Browser settings are restored each time you start the Browser.Saved explicitly to m4env fileTERM1="Copy User Environment (Options menu)"TERM1="m4env file"You can use Options | Copy User Environment to save selected Browser settings to the corporate, project, configuration, phase, or system level. This command creates an m4env file at the specified level. (Only a corporate administrator can save settings to the corporate level.)If an m4env file exists, ObjectTeam uses the saved settings when you are at the level that holds the m4env file or at any lower level. If the same setting is saved at two different levels, ObjectTeam uses the setting saved at the higher level; the setting at the lower level is ignored.When to explicitly save Browser settingsSaving a Browser setting to a particular level ensures that the setting is always used at that level and lower.ExampleOptions | Printer Setup | Graphics allows you to specify the printer used to print diagrams. If you save this Browser setting at the project level, you ensure that all diagrams are printed using the specified printer. ObjectTeam users working in that project cannot use the Options | Printer Setup | Graphics dialog box to change the setting.How to explicitly save Browser settingsΣ To save one or more Browser settings:TERM1="copying" TERM2="context settings to another level"1 Move to the level at which you want to save the settings or to a level below it.2 Select Options | Copy User Environment.A submenu appears, allowing you to select the level at which you want to save the settings. The submenu includes only the current level and higher levels. For example, if you are at the configuration level, the submenu commands are: To ConfigVersion Environment, To Project Environment, and To Corporate Environment.3 Select the appropriate menu item.A Copy Environment dialog box similar to the following appears:FILENAME="00278.unk" ORIGFILE="pics/cpenvir.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/userenv.fm5.mif"4 Select the settings that you want to save. Then click OK.ObjectTeam saves the settings to an m4env file at the selected level.For more informationThe ObjectTeam Customization Guide describes each M4 environment variable, and the m4env and Meta4UserEnv files.ID="20105"File Paths for Generated FilesIntroductionTERM1="user environment" TERM2="file paths"TERM1="saving" TERM2="file path settings"TERM1="file path" TERM2="saving"TERM1="generated files, file paths for"Certain ObjectTeam tools, such as the Document Generator and the Code Generator, produce files as their output. These files must be stored in the file system to be accessible to external tools, such as compilers and DTP packages. The collection of files in the file system produced by a particular user is part of the user environment.File locationTERM1="fileSystemPath property"ObjectTeam uses the File System Path Part property to determine the location of a generated file. You can set this property at any level (corporate, project, configuration version, phase version, system version, or file version). The File System Path Part properties at the different levels provide the path information, as shown in the following table.Note: The File System Path Part property can refer to a nonexistent directory. ObjectTeam creates the directories, if necessary.COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PathCOLNAME="2" VALIGN="TOP" MOREROWS="0"Determined ByCOLNAME="1" VALIGN="TOP" MOREROWS="0"CorporateCOLNAME="2" VALIGN="TOP" MOREROWS="0"The property value at corporate-level. If the value begins with a slash mark (/), it is treated as an absolute path. If this value is a dot (.) or specifies a relative directory, the path is user_home_dir/fileSystemPath_value. If the property is not set, the path is user_home_dir.COLNAME="1" VALIGN="TOP" MOREROWS="0"ProjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"The result of adding the current corporate path to the value of the property fileSystemPath of the project. If this value is a dot, nothing is added to the current path. If this is an absolute directory, it becomes the path of the project. If the property is not set, the name of the project is added to the path.COLNAME="1" VALIGN="TOP" MOREROWS="0"Configuration versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"The result of adding the current project path to the value of the File System Path Part property of the configuration version. If this value is a dot, nothing is added to the current path. If it is an absolute directory, it becomes the path of the configuration version. If the property is not set, the following is added:configVersion_configVersion_numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"Phase versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"The result of adding the current configuration version path to the value of the File System Path Part property of the phase version. If this value is a dot, nothing is added to the current path. If it is an absolute directory, it becomes the path of the phase version. If the property is not set, the name of the phase version is added.COLNAME="1" VALIGN="TOP" MOREROWS="0"System versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"The result of adding the current phase version path to the value of the File System Path Part property of the system version. If this value is a dot, nothing is added to the current path. If it is an absolute directory, it becomes the path of the system version. If the property is not set, the name of the system version is added.COLNAME="1" VALIGN="TOP" MOREROWS="0"File versionCOLNAME="2" VALIGN="TOP" MOREROWS="0"The result of adding the current system version path to the value of the File System Path Part property of the file version. If this value is a dot, nothing is added to the current path. If it is an absolute directory, it becomes the path of the file version. If the property is not set, the name of the file version is added.ExampleUser Jim is generating a document Core_sys in the Object Design phase in configuration version test.1. The File System Path Part property is not set for configuration version, phase version, system version or file version. By default, the generated files are saved in:/user/jim/test_1/ObjectDesign/Core_sysJim now sets the File System Path Part property of his configuration version test.1 to testdocs. Also, because he does not want to navigate down the file system tree to look at his generated files, he specifies that the phase name be left out of the path by specifying a dot (.) for the File System Path Part property of the phase version. As a result, the generated files are now saved in the following folder:/user/jim/testdocs/Core_sysRecommendationCayenne strongly recommends that the File System Path Part property be set at corporate (or project) level to point to a network drive. This setting ensures that all generated files are stored in a central location, which simplifies backups, and that all generated files can be accessed by all members of the project team.Changing the File System Path PartObjectTeam uses the File System Path Part property to locate generated files. Always use caution when changing this property.ID="37818"How to change the File System Path Part propertyBefore you beginFreeze all generated files affected by the change. For example, if you are changing the property at the project level, freeze all generated files in the project. (Freezing the files stores the content of the file in the repository.)Σ To change the value of the File System Path Part property:1 Select the objects for which you want to change the File System Path Part property.2 Select File | Properties | Edit.The Edit Properties dialog box appears. FILENAME="00279.unk" ORIGFILE="pics/flsypprp.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/userenv.fm5.mif"3 Select an object from the list box.4 In the File System Path Part field, specify the desired path.5 Repeat steps 3 and 4 until you have set the File System Path Part for each select object.6 Click OK to close the Edit Properties dialog box.Accessing the generated files in the new locationAfter changing the File System Path Part property, you can access any generated file. When you access the file, ObjectTeam looks in the new location for the file. The file does not exist.ObjectTeam then copies the latest version of the file out of the repository and into the new location.Note: If you did not freeze the generated files, ObjectTeam creates an empty version of the generated file in the new location.Chapter 4 ID="11810"Using GroupsTYPE="MIFmarker"TYPE="number"0TYPE="text"Project Management GuideGroupTERM1="group" TERM2="definition"A grouTERM1="group" TERM2="definition"p is an organizational unit in a system that combines files and items. Groups are not part of the hierarchical tree structure of the project, but rather a view of a selected part of the currently visible contents of a system. FILENAME="00280.tif" ORIGSEQ="55" ORIGTYPE="I" ORIGDOC="../../sources/pmg/groups.fm5.mif"PurposeTERM1="group" TERM2="purpose"The primary uses of groups are as follows:n Versioning. Diagram versions do not include the items referenced in the diagram. If you want to be able to restore a diagram and the items and item properties in it, you must create and save a group that contains the diagram and its related items.n Corporate modeling. Often a diagram or portion of a diagram can be reused by different projects. If you create a group that contains the relevant diagram components and related items, you can promote that group to the corporate level. A corporate group can be accessed by other projects, but cannot be changed by any project.n Sharing model data. Often portions of a system, perhaps a class or a portion of a diagram, created by one developer can be a useful starting point for another developer. If you create a group that contains the relevant diagram components and related items, other developers can copy the group to their own configurations and then modify the components as necessary.PrerequisitesTERM1="group" TERM2="prerequisites for using"To create useful groups, you must carefully specify the related files and items that belong in it. To do so, you must be familiar with the following:n Files and file typesn Items and item typesn The relationship between files and items and how they are used to store diagram informationFor more informationThe ObjectTeam Modeling Guide provides basic information about files and items.Corporate Modeling module requiredThe ObjectTeam module Corporate Modeling provides the menu items and Tcl code required to use (corporate) groups in ObjectTeam. Therefore, this module must be active on the Browser levels where it is going to be used.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36657" TYPE="XREF-TEXTCOPY"Creating Groups 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35319" TYPE="XREF-TEXTCOPY"Creating Group Versions and SavedGroup Versions 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28675" TYPE="XREF-TEXTCOPY"Creating and Using Corporate Groups 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="36657"Creating GroupsTwo stepsTERM1="group" TERM2="creating"TERM1="creating" TERM2="groups"Creating a group is a two-step process:1 Create the group.2 Specify its contents.You use rules to specify the contentsSpecifying the contents of a group means identifying the files and items in it. Because your systems are constantly changing, you specify rules that ObjectTeam can use to identify the files and items in the group, rather than specifying individual files and items.ObjectTeam uses the rules to build the groupThe following table shows how ObjectTeam uses the set of rules that you specify to determine the contents of the group:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Uses the Explicit File and File Filter rules to add files to the group.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Uses the Item Filter rule to add items to the group.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Uses the File Selectors rule to add additional files to the group based on what items are already in the group.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Uses the Item Selectors rule to add additional items to the group based on what files are already in the group.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Repeats steps 3 and 4 until they no longer add files or items to the group.Note: You can specify one or more rules. ObjectTeam uses all the rules that you specify to identify the files and items in the group.SubgroupsThe modes Explicit Group Version and Group Version Filter can only be used for group versions that contain subgroups. Unlike group versions in the current release, group versions in previous releases of ObjectTeam could contain subgroups.Groups contain current file versionsTERM1="version" TERM2="of object in group"When ObjectTeam adds a file to a group, it uses the current, selected version of the file. To create a group composed of specific file versions, you must use saved groups, as described in REFID="35319" TYPE="XREF-TEXTCOPY"Creating Group Versions and SavedGroup Versions.TERM1="group" TERM2="creating"TERM1="creating" TERM2="groups"How to create a groupΣ TERM1="group" TERM2="creating"TERM1="creating" TERM2="groups"To create a group:1 Move to the system level.2 Select File | New | Group Version.The New Group Version dialog box appears.3 Specify the group name.4 Do you want to specify the contents of the group at this time?If yes, click Edit.The Edit Group Structure dialog box appears. Use the following procedure to specify the contents of the group.If no, click OK.ObjectTeam creates an empty group. How to specify the contents of a groupΣ To specify the contents of a group:1 Open the group. (In the information area, double-click on the group, or select the group and then click File | Open.)TERM1="Edit Group Structure dialog box" TERM2="picture of"The Edit Group Structure dialog box appears. Overview mode, the default mode (see REFID="19688" TYPE="XREF-TEXTCOPY"Overview Mode),displays all files and items in the group.FILENAME="00281.unk" ORIGFILE="pics/edgrpstr.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/groups.fm5.mif"2 Use Explicit File and File Filter modes to specify the rules for adding files to the group.3 Use Item Filter mode to specify the rules for adding items to the group.4 Use File Selector mode to specify the rules for adding files to the group based on what items are already in the group.5 Use Item Selector mode to specify the rules for adding items to the group based on what files are already in the group.In this sectionThe remainder of this section describes how to use each mode of the Edit Group Structure dialog box to specify the rules that define the contents of a group.COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19688" TYPE="XREF-TEXTCOPY"Overview Mode 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31630" TYPE="XREF-TEXTCOPY"Explicit File Mode 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26915" TYPE="XREF-TEXTCOPY"File Filter Mode 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22021" TYPE="XREF-TEXTCOPY"Item Filter Mode 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24674" TYPE="XREF-TEXTCOPY"File Selector Mode 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25711" TYPE="XREF-TEXTCOPY"Item Selector Selector Mode 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16ID="19688"Overview ModePurposeTERM1="displaying" TERM2="groups"TERM1="Overview mode (Edit Group Structure dialog)"TERM1="group" TERM2="displaying contents of"Use Overview mode to display the current contents of the group.TERM1="Edit Group Structure dialog box" TERM2="Overview mode"Edit Group Structure dialog boxIn this mode, the Contents list displays all files and items in the group.The New, Show, and Delete buttons are unavailable.FILENAME="00282.unk" ORIGFILE="pics/edgrpstr.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/groups.fm5.mif"How to view the contents of the groupΣ To view the contents of the group, select Overview mode.ID="31630"Explicit File ModePurposeTERM1="Explicit File mode (Edit Group Structure dialog)"TERM1="group" TERM2="explicit file mode"Use Explicit File mode to add selected files to the group.Adding a file adds an itemWhen you add a file to the group, ObjectTeam also adds the item associated with that file. For example, if you use Explicit File to add the CoreClasses CD to the group, the group containsn File CoreClasses of type cadn Item CoreClasses of type clTERM1="Edit Group Structure dialog box" TERM2="Explicit File mode"Edit Group Structure dialog boxIn this mode, the fields of the Edit Group Structure dialog box are used as follows:n The Contents list displays the files added to the group using Explicit File mode. Note: To see both the files and items that are in the group, select Overview mode.n The New button allows you to select one or more files to add to the group.n The Delete button allows you to remove one or more files from the group.n The Show button is unavailable.TERM1="New dialog box" TERM2="Explicit File mode"New Explicit File dialog boxThe New Explicit File dialog box allows you to select one or more files.FILENAME="00283.unk" ORIGFILE="pics/nwexplfl.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/groups.fm5.mif"How to add one or more files Σ To add one or more selected files to a group:1 Select Explicit File mode.The Contents list displays the files added to the group using Explicit File mode.2 Click New... The New Explicit File dialog box appears, displaying a list of all files in the current system that are not in the group.3 Select one or more files. Then click OK.ObjectTeam adds the files and their items to the group and updates the Contents list, displaying the files added to the group.How to remove filesNote: In Explicit File mode, you can remove only those files that were added using Explicit File mode.Σ To remove one or more files from the group:1 In Explicit File mode, click Delete...A dialog box appears, displaying the files added using Explicit File mode.2 Select one or more files. Then click OK.ObjectTeam removes the files and their items from the group and updates the Contents list.ID="26915"File Filter ModePurposeTERM1="File Filter mode (Edit Group Structure dialog)"TERM1="group" TERM2="file filter mode"Use File Filter mode to create a filter that defines a set of files to add to the group. You can create filters based on name, type, and property values.Adding a file adds an itemWhen you add a file to the group, ObjectTeam also adds the item associated with that file. For example, if you create a file filter that adds the CoreClasses CD to the group, the group containsTERM1="item" TERM2="adding to group"n File CoreClasses of type cadn Item CoreClasses of type clTERM1="Edit Group Structure dialog box" TERM2="File Filter mode"Edit Group Structure dialog boxIn this mode, the boxes of the Edit Group Structure dialog box are used as follows:n The Contents list initially displays all files added to the group using File Filter mode.Note: To see both the files and items that are in the group, select Overview mode.n The New button allows you to create a filter that adds files to the group.n The Delete button allows you to delete one or more file filters.n The Show button allows you select one or more file filters, then updates the Contents list to show only those files added to the group using the selected filters. (To display all files added to the group using File Filter mode, select all file filters.)TERM1="New dialog box" TERM2="File Filter mode"New Item Filter dialog boxThe New Item Filter dialog box allows you to create a file filter. Select one or more of the options, which are described following the illustration:FILENAME="00284.unk" ORIGFILE="pics/nwitfltr.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/groups.fm5.mif"n Name. Select the Name check box and use Tcl global pattern matching to specify a file name. For example, to add all files whose names begin with client or are qualified by client, type client*; to add only files qualified by client, type client:*.n Type. Select the Type check box and use Tcl global pattern matching to specify a file type. The following table lists the file types, which are case sensitive:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="378p"COLNAME="1" VALIGN="TOP" MOREROWS="0"cadCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"ccdCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class Communication DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"cdmCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class Definition MatrixCOLNAME="1" VALIGN="TOP" MOREROWS="0"codCOLNAME="2" VALIGN="TOP" MOREROWS="0"Collaboration DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"dfdCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data Flow DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"etdCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sequence DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"mgdCOLNAME="2" VALIGN="TOP" MOREROWS="0"Message Generalization DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"stdCOLNAME="2" VALIGN="TOP" MOREROWS="0"State Transition DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"ucdCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use Case Diagramn Property. Select the Property check box, specify a property name, and use Tcl global pattern matching to specify a property value.For more informationSee the Tcl documentation for details on Tcl global pattern matching. See REFID="39383" TYPE="XREF-TEXTCOPY"Appendix A, OMT Support, for more information about the OMT diagrams.How to add a file filterΣ To add a file filter:1 Select File Filter mode.The Contents list displays the files added to the group using file filters.2 Click New... The New File Filter dialog box appears.3 Specify the options. Then select OK.ObjectTeam adds the files that match the filter criteria to the group, adds the items associated with those files to the group, and updates the Contents list to include the files added to the group.How to display the files added by a particular file filterΣ To display the files added to group by a particular file filter:1 In File Filter mode, click Show...A dialog box appears, displaying a list of all file filters. 2 Select one or more of the file filters. Then click OK.The files added to the group by the selected file filters are displayed in the Contents list.How to remove a file filterΣ To remove a file filter:1 In File Filter mode, click Delete...A dialog box appears displaying a list of all file filters. 2 Select one or more of the file filters. Then click OK.ObjectTeam removes the selected file filters. Files added to the group only by the selected file filters are removed from the group along with their associated items.ID="22021"Item Filter ModePurposeTERM1="Item Filter mode (Edit Group Structure dialog)"TERM1="group" TERM2="item filter mode"Use Item Filter mode to create a filter that defines a set of items to add to the group. You can create item filters based on name, type, and property values.TERM1="Edit Group Structure dialog box" TERM2="Item Filter mode"Edit Group Structure dialog boxIn this mode, the fields of the Edit Group Structure dialog box are used as follows:n The Contents list box initially displays all items added to the group using Item Filter mode.n The New button allows you to create a filter that adds items to the group.n The Delete button allows you to delete one or more item filters.n The Show button allows you select one or more item filters, and then updates the Contents list to show only those items added to the group using the selected filters. (To display all items added to the group using Item Filter mode, select all item filters.)TERM1="New dialog box" TERM2="Item Filter mode"New Item Filter dialog boxThe New Item Filter dialog box allows you to create an item filter. Select one or more of the options, which are described following the illustration.FILENAME="00285.unk" ORIGFILE="pics/nwitfltr.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/groups.fm5.mif"n Name. Select the Name check box and use Tcl global pattern matching to specify an item name. For example, to add all items whose names begin with client or are qualified by client, type client*. To add only items qualified by client, type client:*.n Type. Select the Type check box and use Tcl global pattern matching to specify an item type. The following table lists the item types, which are case sensitive:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="378p"COLNAME="1" VALIGN="TOP" MOREROWS="0"clCOLNAME="2" VALIGN="TOP" MOREROWS="0"classCOLNAME="1" VALIGN="TOP" MOREROWS="0"deCOLNAME="2" VALIGN="TOP" MOREROWS="0"data elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"etCOLNAME="2" VALIGN="TOP" MOREROWS="0"event traceCOLNAME="1" VALIGN="TOP" MOREROWS="0"peCOLNAME="2" VALIGN="TOP" MOREROWS="0"process elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"stCOLNAME="2" VALIGN="TOP" MOREROWS="0"staten Property. Select the Property check box, specify a property name, and use Tcl global pattern matching to specify a property value.For more informationSee the Tcl documentation for details on Tcl global pattern matching.Using item filtersAdding and removing item filters is similar to adding and removing file items. Displaying the items added to the group using a particular item filter is similar to displaying the files added the group using a particular file filter.For details on these procedures, see REFID="26915" TYPE="XREF-TEXTCOPY"File Filter Mode.ID="24674"File Selector ModePurposeTERM1="File Selector mode (Edit Group Structure dialog)"TERM1="group" TERM2="file selector mode"Use File Selector mode to specify selection criteria that add files to the group based on what items are already in it.Adding a file adds an itemWhen you add a file to the group, ObjectTeam also adds the item associated with it. For example, if you specify selection criteria that adds the CoreClasses CD to the group, the group containsn File CoreClasses of type cadn Item CoreClasses of type clTERM1="Edit Group Structure dialog box" TERM2="File Selector mode"Edit Group Structure dialog boxIn this mode, the boxes of the Edit Group Structure dialog box are used as follows:n The Contents list displays all files and items in the group.n The New button allows you to specify the selection criteria that add files to the group based on what items are already in the group.n The Delete button allows you to delete selection criteria.n The Show button is unavailable.TERM1="New dialog box" TERM2="File Selector mode"New File Selector dialog boxThe New File Selector dialog box allows you to specify selection criteria that add files to the group.FILENAME="00286.unk" ORIGFILE="pics/nwfilsel.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/groups.fm5.mif"The selection criteria works as follows:1 ObjectTeam collects all items that are in the group and whose criteria match the type specified in the Item Type box.2 It then uses those items and the Decomp Flags box to locate files that are not already in the group.COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Decomp FlagSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Files LocatedCOLNAME="1" VALIGN="TOP" MOREROWS="0"FilesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Any file attached to any of the itemsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Any file that contains a component that is attached to any of the itemsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ParentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Any file that contains a parent component (for example, a superclass) that is attached to any of the itemsCOLNAME="1" VALIGN="TOP" MOREROWS="0"LeafsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Any file that contains a leaf component (for example, a subclass) that is attached to any of the items3 ObjectTeam adds to the group any file that is found in step 2 and that has a type specified in the File Types box.Note: You can specify one item type, one or more decomp flags, and one or more file types. You can specify one set of criteria for each item type.How to add a file selectorΣ To add a file selector:1 In File Selector mode, click New...The New File Selector dialog box appears.2 Specify the file selection criteria. Then click OK.ObjectTeam uses the file selection criteria and all other rules specified in all other modes of the Edit File Structure dialog box to update the contents of the group. It then updates the Contents list box to display all files and items in the group.How to remove a file selectorΣ To remove a file selector:1 In File Selector mode, click Delete...A dialog box appears, displaying a list of all file selectors. 2 Select one or more of the file selectors. Then click OK.ObjectTeam removes the selected file selection criteria, uses the remaining file selection criteria and all other rules specified in all other modes of the Edit File Structure dialog box to update the contents of the group. It then updates the Contents list box to display all files and items in the group.ID="25711"Item Selector Selector ModePurposeTERM1="Item Selector mode (Edit Group Structure dialog)"TERM1="group" TERM2="item selector mode"Use Item Selector mode to specify selection criteria that add items to the group based on what files are already in the group.TERM1="Edit Group Structure dialog box" TERM2="Item Selector mode"Edit Group Structure dialog boxIn this mode, the fields of the Edit Group Structure dialog box are used as follows:n The Contents list displays all files and items in the group.n The New button allows you to specify the selection criteria that add items to the group based on what files are already in the group.n The Delete button allows you to delete selection criteria.n The Show button is unavailable.TERM1="New dialog box" TERM2="Item Selector mode"New dialog boxThe New Item Selector dialog box allows you to specify selection criteria that adds items to the group.FILENAME="00287.unk" ORIGFILE="pics/nwitmsel.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/groups.fm5.mif"The selection criteria work as follows:1 ObjectTeam collects all files that are in the group and that have the type specified in the File Type box.2 ObjectTeam adds to the group all the items in all of those files that match the criteria specified in the Type and Qualified boxes. The Qualified field for each item type can be Yes or Don't Care.- If you specify Yes, all qualified items of the specified type match the criteria and are added to the group.- If you specify Don't Care, all items of the specified type match the criteria and are added to the group.Note: You can specify one file type and one or more item types (with qualification). You can specify one set of criteria for each file type.Using the Qualified boxTERM1="Qualified item, in group"The following illustration shows a class (on the left) and the item types associated with each element of the class (on the right).FILENAME="00288.tif" ORIGSEQ="12" ORIGTYPE="I" ORIGDOC="../../sources/pmg/groups.fm5.mif"If the group contains the CDM file, Person, an item selector that specifies items of type de with the qualification Don't Care returns all items of type de:n The birthdate attributen The now argumentAn item selector that specifies items of type de with the qualification Yes, returns all qualified items of type de:n The birthdate attributeHow to add an item selectorΣ To add an item selector:1 In Item Selector mode, click New... The New Item Selector dialog box appears.2 Specify the item selection criteria. Then click OK.ObjectTeam uses the item selection criteria, and all other rules specified in all other modes of the Edit File Structure dialog box to update the contents of the group. It then updates the Contents list to display all files and items in the group.How to remove an item selectorΣ To remove an item selector:1 In Item Selector mode, click Delete...A dialog box appears, displaying a list of all item selectors. 2 Select one or more of the item selectors. Then click OK.ObjectTeam removes the selected item selection criteria and uses the remaining item selection criteria and all other rules specified in all other modes of the Edit File Structure dialog box to update the contents of the group. It then updates the Contents list to display all files and items in the group.ID="35319"Creating Group Versions and SavedGroup VersionsIntroduction Groups have a special type of version control. The reason is that they are not so much a part of the hierarchical tree structure of the project, but rather a view of a selected part of the currently visible contents of a system. Two version typesGroup versions support two version types:n Group version stores the settings of the Edit Group Structure dialog box.TERM1="group" TERM2="version of"TERM1="version" TERM2="of group"n SavedGroup version stores the names and versions of all files and items in the group.TERM1="group" TERM2="saving contents of"TERM1="saving" TERM2="group contents"TERM1="SavedGroup" TERM2="definition"You need a group to make a SavedGroup. You need a SavedGroup to make a corporate group.Group versionsFreezing a group version and creating a new one does not affect the members of the group. Only the settings of the explicit lists, filters, and selectors defined in the Edit Group Structure dialog box are part of the group. The main reason for freezing a group version is so that you can modify the composition of the group and be able to restore the original composition if necessary.Note: Groups that are part of the current group are not frozen automatically. If you want to be able to restore the exact settings of the group structure, you must freeze the included groups also.TERM1="freezing" TERM2="group"TERM1="group" TERM2="freezing"How to freeze a groupΣ To freeze a selected group:TERM1="freezing" TERM2="group"TERM1="group" TERM2="freezing"1 Select a group in the information area of the Browser.2 Select Version | Freeze.A dialog box appears in which you can enter a comment.3 Include a comment. Then click OK.ObjectTeam freezes the group.Copying group versions between systemsΣ To copy a group version from one system to another:1 Select the group version you want to copy in the information area of the Browser2 Select Edit | Copy (or Edit | Cut).3 Open the system into which you want to copy the group.4 Select Edit | Paste.The Copy Group dialog appears.5 Select Copy Definition and/or Copy Contents and click OK.Copy Definition copies the definition of the group to the new system. Copy Contents copies the actual contents the group. Note: You can also import a group by dragging it to a system.SavedGroup versionsWhen you create a SavedGroup version, ObjectTeam stores a list of all objects in the group with their versions in the <saved groups> pseudo object. All objects in the group are frozen. FILENAME="00289.tif" ORIGSEQ="20" ORIGTYPE="I" ORIGDOC="../../sources/pmg/groups.fm5.mif"PurposeThe main reason for creating saved groups is to be able to easily retrieve earlier versions of diagrams, including their associated items and properties. Diagram versions do not include the items referenced in the diagram. If you want to be able to restore a diagram, and the items and item properties in it, create a saved group that contains the diagrams and the items and properties in the diagram. Restoring the saved group restores your diagram, including the items and properties. TERM1="diagram" TERM2="and SavedGroup"TERM1=""TERM1="item" TERM2="and SavedGroup"TERM1=""TERM1="property" TERM2="and SavedGroup"ID="11006"How to create a SavedGroupTERM1="snapshot, of group"Σ To create a SavedGroup:TERM1="SavedGroup" TERM2="creating"TERM1="creating" TERM2="SavedGroups"TERM1="version" TERM2="of SavedGroup"1 On the system level, select a group in the information area.2 Select Version | Snapshot.A dialog box appears in which you can enter a comment, such as the reason the saved group was created. This comment appears in the Info dialog box.3 Enter a comment, and then click OK.In the <saved groups> pseudo object, ObjectTeam creates a saved group version with the same name as the group version and the contents of the group version are frozen.Restoring a SavedGroup When you restore a SavedGroup version, the object versions listed in the SavedGroup become the selected versions and appear in the information area. Other versions of these objects are unselected but still available.For files, the versions that were the selected versions when the SavedGroup was made, become the selected versions again. The items and their properties are overwritten by the items and properties as they were at the time the SavedGroup was created. The group composition, defined in the Edit Group Structure dialog box is not affected.FILENAME="00290.tif" ORIGSEQ="37" ORIGTYPE="I" ORIGDOC="../../sources/pmg/groups.fm5.mif"How to recall a saved group versionsΣ To recall a SavedGroup version:TERM1="restoring" TERM2="SavedGroup"TERM1="group" TERM2="restoring saved"TERM1="SavedGroup" TERM2="restoring"TERM1="Restore (Version menu)"1 Move to the system level.2 Select View | Pseudo to display the pseudo objects.3 Open the <saved groups> pseudo object.4 Select the SavedGroup version.5 Select Version | Restore.ObjectTeam restores the SavedGroup version, as described above.ID="28675"Creating and Using Corporate GroupsTERM1="corporate group" TERM2="definition of"TERM1="group" TERM2="corporate"Corporate groupsBy promoting a SavedGroup from system to corporate level, you create a corporate group. The group and its contents become available for use in all other projects. Together, these corporate groups form the corporate model.TERM1="corporate modeling"TERM1="modeling, corporate"FILENAME="00291.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/pmg/groups.fm5.mif"Note: Because corporate groups are always created from SavedGroups, a corporate group and its contents are always frozen. PurposeCorporate groups allow you to share design data among projects. One primary use of the corporate model is make one set of commonly used subsystems available to projects throughout the corporation. Doing so reduces both development time and maintenance time. Careful use of corporate groups can also promote standardization and stimulate reuse of design data.A corporate group can be created only from a SavedGroup; thus, ObjectTeam ensures that the corporate model is not changed arbitrarily. Conversely, a system always has a fixed link to a corporate group; thus, ObjectTeam ensures that changes to the corporate model do not change the system unexpectedly.Creating corporate groupsTERM1="creating" TERM2="corporate groups"TERM1="corporate group" TERM2="creating"TERM1="group" TERM2="promoting to corporate"When you promote a SavedGroup to the corporate level, it becomes a corporate group. Creating a new version of the SavedGroup does not update the corresponding corporate group. If you want to replace the corporate group, you must promote the new version of the SavedGroup to the corporate level. This promotion ensures that the corporate model is not changed arbitrarily.How to create a corporate groupΣ To create a corporate group:1 In the Browser, open a <saved groups> pseudo object.For details on how to create a saved group, see REFID="11006" TYPE="XREF-TEXTCOPY"How to create a SavedGroup.Note: The <saved groups> object is visible in two places: under the group itself or on the system level. The <saved groups> object under the group shows all saved group versions of that group. The <saved groups> object on the system level shows all saved group versions for all groups within the system.2 Select a SavedGroup.3 Select Version | Make Corporate.A dialog box appears.FILENAME="00292.unk" ORIGFILE="pics/makecorp.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/groups.fm5.mif"4 Specify a name for the corporate group and, optionally, a comment describing the group. Then select OK.ObjectTeam makes the SavedGroup a corporate group. In the Information area of the Browser, under the heading In Corporate, the status Yes appears next to the file versions that make up this group version, indicating that these file versions are now part of the corporate model. The name of the corporate group is added to the pseudo object <corporate groups> on the corporate level.Reusing corporate groupsTERM1="corporate group" TERM2="reusing"TERM1="reusing corporate data"TERM1="group" TERM2="reusing"TERM1="item" TERM2="reusing"TERM1="property" TERM2="reusing"TERM1="object" TERM2="reusing"TERM1="file" TERM2="reusing"To reuse a corporate group, copy it into your system. When you copy the corporate group into your system, the following occurs:n All file versions and items in the corporate group version are copied to the system. Conflicts between existing item generations in the system and item generations from the corporate group are solved by overwriting the existing item generations.n A fixed link to the corporate group version is established. You cannot establish a dynamic link. If someone changes the corporate group, and you want those changes in your system, you must copy the corporate group into your system again. Doing so ensures that changes to the corporate model do not affect any system without warning.You cannot modify the properties of the files and items copied from the corporate group, but you can modify their scope.How to reuse a corporate groupΣ To reuse a corporate group:TERM1="configuration" TERM2="adding corporate group to"TERM1="corporate group" TERM2="adding to System"1 Open the system in which you want to use the corporate group.2 Select Version | Activate.A dialog box appears, displaying all corporate groups.3 Select the corporate group that you want to use, and then click OK.ObjectTeam adds references to the files (or groups) of the selected corporate group to the system,and then updates the information area of the Browser. All the files have fixed links and a status of reused.Note: You can also activate a corporate group by dragging and dropping it into a system.How to remove a corporate groupΣ To remove a corporate group from a system:TERM1="corporate group" TERM2="deleting"TERM1="deleting" TERM2="corporate group"TERM1="Deactivate (Version menu)" TERM2="corporate group"TERM1="corporate group" TERM2="removing from System"TERM1="removing" TERM2="corporate group from System"1 Open the system.2 Select Version | Deactivate.A dialog box appears, displaying all corporate groups in the system.3 Select the corporate group that you want to remove, and then click OK.ObjectTeam removes all references to the files or groups of the selected corporate group from the system,and then updates the information area of the Browser. Chapter 5 ID="21532"Access ControlTYPE="MIFmarker"TYPE="number"0TYPE="text"Project Management GuidePurposeTERM1="diagram" TERM2="access control"TERM1="file" TERM2="access control"TERM1="access control" TERM2="purpose"Because the Cayenne repository is a shared resource, access control is particularly important. Using the features described in this chapter, the corporate administrator can give project members access to appropriate areas of the repository, restricting access to other areas.ExampleYour organization has project leaders, analysts, designers and programmers. You use the access control features to give the project leaders read/write access to the entire project, the analysts read/write access to the analysis phase, the designers read access to the analysis phase and read/write access to the design phase, and the programmers read access to the design phase and read/write access to the implementation phase.Security module requiredThe ObjectTeam module Security provides the menu items and Tcl code required to use the security and access control features of ObjectTeam. Therefore, this module must be active on the Browser levels where it is going to be used.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.TERM1="role" TERM2="for access control"How it worksIn ObjectTeam, you control access to the repository as follows:1 At the corporate level, you define users and roles.2 At the corporate or project level, you create UserRoleLinks. A link between a user and a role indicates that the user has access to the role.3 ObjectTeam defines a set of actions for each object; for example, the set of actions for the system object includes Create and Destroy. For every object, you define a set of access rules that specifies, for every role and every action, whether the role can perform the action.FILENAME="00293.unk" ORIGFILE="pics/userrole.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"Automating Access Control If you know who the users of a project are going to be, what roles they must be able to play, and what access each role needs to have, you can use ObjectTeam's automatic access control mechanism. This mechanism allows you to set up access control before the users of the project populate and use objects in it.You specify the Users, Roles, UserRoleLinks, and the allowed and prohibited actions on phase objects within a configuration version in two customization files. These files are the input for Security | Setup Access on the configuration level. This command creates users, roles, user role links, and access rules according to the specifications in the customization files.For more informationSee REFID="33041" TYPE="XREF-TEXTCOPY"How to Set up Access Control Automatically.Managing the detailsThe combination of users, roles, and access rules allows you to control access to every object in the repository. ObjectTeam does not require that you specify access rules for every object in the repository. It helps you manage access rules by allowing you to use the repository's class hierarchy to specify access rules at the level appropriate for your site. For example, you can specify a set of access rules at the project level to define access control for all objects in a project.The access control processThis illustration gives an overview of the relationships between the terms in the access control process. It does not explain the entire security process.FILENAME="00294.tif" ORIGSEQ="6" ORIGTYPE="I" ORIGDOC="../../sources/pmg/access.fm5.mif"DefinitionsThe following terms are used throughout this chapter:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TermCOLNAME="2" VALIGN="TOP" MOREROWS="0"DefinitionCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="user" TERM2="definition of"UserCOLNAME="2" VALIGN="TOP" MOREROWS="0"Names derived from the operating system users. By registering users in the repository with the same name as in the operating system, access can be controlled per user.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="UserRoleLink" TERM2="definition"UserRoleLinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"A UserRoleLink between a role and a user means the user has access to the role. The status of a UserRoleLink determines whether the role is always activated, initially activated, or initially deactivated.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="role" TERM2="definition"RoleCOLNAME="2" VALIGN="TOP" MOREROWS="0"An intermediate object between users and actions on objects. Object access is defined for roles. A user can activate one or more roles.COLNAME="1" VALIGN="TOP" MOREROWS="0"Access ruleCOLNAME="2" VALIGN="TOP" MOREROWS="0"A rule that defines whether a role is permitted to perform an action on an object. The collection of all access rules for an object and a role is a RoleRight. Access rules can be defined per object or per class of objects.COLNAME="1" VALIGN="TOP" MOREROWS="0"(Controlled) ActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Everything in the repository is an object. Each object has its own set of actions. COLNAME="1" VALIGN="TOP" MOREROWS="0"Controlled listCOLNAME="2" VALIGN="TOP" MOREROWS="0"Every parent object in the repository has a controlled list for each of its child object types. When a child object is created, ObjectTeam adds that object to the appropriate controlled list on the parent object.COLNAME="1" VALIGN="TOP" MOREROWS="0"Access RightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Your effective roles and the object's role rights determine your access rights to an objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"RoleRightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies for each role and action whether the role can perform the action.COLNAME="1" VALIGN="TOP" MOREROWS="0"OwnRight / ChildrightCOLNAME="2" VALIGN="TOP" MOREROWS="0" TERM1="ownRight"TERM1="role right" TERM2="ownRight"Determines who can add objects to or remove objects from the Controlled List. TERM1="childRight"TERM1="role right" TERM2="childRight"A childRight specifies the initial role rights assigned to the objects added to the controlled list.Version and configuration managementThis chapter focuses on how to control access to objects using the access control mechanisms. However, it is important to note the access to object versions is also controlled through versions and configurations, as described in REFID="22309" TYPE="XREF-TEXTCOPY"Chapter 1, Version and Configuration Management.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12942" TYPE="XREF-TEXTCOPY"Users 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18086" TYPE="XREF-TEXTCOPY"Roles 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19607" TYPE="XREF-TEXTCOPY"UserRoleLinks 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19190" TYPE="XREF-TEXTCOPY"Access Control Rules 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20462" TYPE="XREF-TEXTCOPY"How ObjectTeam Evaluates Access Rights 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31ID="12942"UsersIntroductionTERM1="pseudo object" TERM2=""TERM1=""Users are defined at the corporate level. They are listed in the pseudo object <users>. The following illustration shows <users> unfolded:FILENAME="00295.unk" ORIGFILE="pics/br_users.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"PurposeThe repository should contain a user object for every person who uses ObjectTeam. During a session, the user object identifies the person using ObjectTeam.ObjectTeam users must match operating system usersUsers do not log on to ObjectTeam, but they do log on to the operating system. When a user starts the Browser, ObjectTeam does the following:1 Reads the user's log on name from the operating system.TERM1="login name, as user name"TERM1="user" TERM2="login name"2 Searches the repository for a user with that name.3 If the user name is in the repository, ObjectTeam uses it for the session. Otherwise, it uses the user name Guest.How to create a userNote: To create a user, you must be at the corporate level and have the SuperUser role activated.Σ To create a user:TERM1="user" TERM2="creating"TERM1="creating" TERM2="users"1 On Corporate level, open the pseudo object <users>. 2 Select File | New | User.The New User dialog box appears.FILENAME="00296.unk" ORIGFILE="pics/newuser.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"3 Enter the name of the new user, and then click OK.ObjectTeam creates the user. It also creates a role with the same name as the user and makes it the user's default role.ID="18086"RolesIntroductionTERM1="pseudo object" TERM2=""TERM1=""Roles are defined at the corporate level. They are listed in the pseudo object <roles>. Note: The roles described in this chapter have no relation to the roles used to specify associations in Class Diagrams (CDs).PurposeAccess to objects is based on roles. A user can activate one or more roles. Generally, if a certain role has access to an object and a user has that role active, the user has access to the object.Roles that ObjectTeam definesObjectTeam creates the following special roles:n TERM1="SuperUser role"TERM1="role" TERM2="SuperUser"SuperUser. When a user creates a repository, ObjectTeam creates a SuperUser role and a corporate-level UserRoleLink between the role and the user; the status of the UserRoleLink is defaultOn. The SuperUser role at corporate level has unrestricted access to all objects in the repository, can create users and roles, and can create UserRoleLinks at the corporate or project level.When a user creates a project, ObjectTeam creates a SuperUser role and a project-level UserRoleLink between the role and the user. The status for the UserRoleLink is defaultOff; the user activates the role when necessary. The SuperUser role at the project level has unrestricted access to all objects in the project and can create UserRoleLinks at the project level.n TERM1="Default role"TERM1="role" TERM2="Default"Default roles. When you create a new user, ObjectTeam creates a role with the same name and creates a corporate-level UserRoleLink between the role and the user. To ensure that the user's default role is always activated, the status for the UserRoleLink is alwaysOn.n TERM1="role" TERM2="Guest"TERM1="Guest role"Guest. Every repository contains a guest user, a guest role, and a corporate-level UserRoleLink between them. To ensure that the Guest role is always activated for a Guest user, the status for the UserRoleLink is alwaysOn. If an unknown user starts the Browser, ObjectTeam uses the Guest user and role for the session. Roles that you defineYou can define additional roles. Typically, the roles that you define are based on the job functions required for a project; for example, you can create the roles Analyst and Programmer.TERM1="role" TERM2="creating"TERM1="creating" TERM2="roles"How to create a new roleNote: To create a role, you must be at the corporate level and have the SuperUser role activated.Σ To create a new role:1 On the corporate level, open the pseudo object <roles>. 2 Select File | New | Role.The New Role dialog box appears.FILENAME="00297.unk" ORIGFILE="pics/newrole.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"3 Enter the name of the new role, and then click OK. ObjectTeam creates the role. To give a user access to this role, create a UserRoleLink between the user and the role, as described in REFID="19607" TYPE="XREF-TEXTCOPY"UserRoleLinks.ID="19607"UserRoleLinksTERM1="role" TERM2="and UserRoleLinks"IntroductionUserRoleLinks can be defined at the corporate or project level. UserRoleLinks defined at the project level supplement those defined at the corporate level.PurposeUserRoleLinks define a link between a user and role. If such a link exists, the user has access to the role.The UserRoleLinks provide a many-to-many relationship between users and roles. That is, each user can have access to one or more roles, and each role can be accessed by one or more users.Status of UserRoleLinksTERM1="UserRoleLink" TERM2="status of"TERM1="defaultOff, UserRoleLink status"TERM1="defaultOn, UserRoleLink status"TERM1="alwaysOn, UserRoleLink status"The status of a UserRoleLink determines the degree of control that the user has in activating and deactivating the role.COLS="2"COLNAME="1" COLWIDTH="81p"COLNAME="2" COLWIDTH="369p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StatusCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"defaultOffCOLNAME="2" VALIGN="TOP" MOREROWS="0"Initially, the role is deactivated; the user can activate the role.COLNAME="1" VALIGN="TOP" MOREROWS="0"defaultOnCOLNAME="2" VALIGN="TOP" MOREROWS="0"Initially, the role is activated; the user can deactivate the role.COLNAME="1" VALIGN="TOP" MOREROWS="0"always OnCOLNAME="2" VALIGN="TOP" MOREROWS="0"Initially, the role is activated; the user cannot deactivate the role.How to examine UserRoleLinksΣ To examine the UserRoleLinks for a particular role:TERM1="user" TERM2="and UserRoleLinks"TERM1=""TERM1="role" TERM2="and UserRoleLinks"TERM1="displaying" TERM2="UserRoleLinks"1 To examine corporate-level UserRoleLinks, move to the corporate level. To examine project-level UserRoleLinks, move to the project level.2 Open the <roles> object.The information area lists all roles defined in the repository.3 Open the role that you are interested in.The information area lists all users linked to this role; that is, it displays all the UserRoleLinks for this role.Note: At the corporate level, you can examine the UserRoleLinks for a particular user. Open the <users> object, and then open the user that you are interested in. The information area lists all roles linked to this user; that is, it displays all UserRoleLinks for this user.How to create a UserRoleLinkTERM1="creating" TERM2="UserRoleLinks"TERM1="UserRoleLink" TERM2="creating"Σ To create a UserRoleLink:1 Activate the SuperUser role.2 To create a corporate-level UserRoleLink, move to the corporate level. To create a project-level UserRoleLink, move to the project level.3 Open the <roles> object. The information area lists all roles defined in the repository.4 Open the role that you are interested in.The information area lists all users linked to this role.5 Select File | New | UserRoleLink(s). A dialog box appears with a list of all users not already linked to this role. If all users are already linked to this role, File | New | UserRoleLink is unavailable.FILENAME="00298.unk" ORIGFILE="pics/nwusrlnk.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"6 Select one or more users. Then click OK.ObjectTeam creates a link between the role and the user, and updates the Information area.How to change the status of a UserRoleLinkNote: You can change the status of your own UserRoleLinks, unless the status is alwaysOn. To change a status of alwaysOn or to change the status of another user's UserRoleLink, you must have the SuperUser role activated.Σ To change the status of a UserRoleLink:TERM1="changing" TERM2="UserRoleLink status"1 To change the status of a corporate-level UserRoleLink, move to the corporate level. To change the status of a project-level UserRoleLink, move to the project level.2 Open the <roles> object.The information area lists all roles defined in the repository.3 Open the role that you are interested in.The information area lists all users linked to this role; that is, it displays all UserRoleLinks for this role.4 Select the UserRoleLink whose link status you want to change.5 Select File | Change | Link Status.The Change Link Status dialog box appears.FILENAME="00299.unk" ORIGFILE="pics/linkstat.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"6 Select the new link status. Then click OK.How to activate a roleΣ To activate a role:TERM1="role" TERM2="activating"TERM1="activating" TERM2="roles"TERM1="Activate Role (Security menu)"1 Move to level at which you want to activate the role, either corporate or project.2 Select Security | Activate Role.The Activate Role dialog box appears.FILENAME="00300.unk" ORIGFILE="pics/activrol.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"3 Select the role that you want to activate. Then select OK.How to examine which roles are activatedTERM1="Effective Context (File menu)"TERM1="role" TERM2="and effective context"TERM1="user" TERM2="and effective context"The roles you have activated define your effective context, which determines your access to repository objects. If you have activated project-level roles, these roles are in your effective context only if you are at or below project level.Σ To examine your effective context, select Security | Show Effective Roles.TERM1="displaying" TERM2="effective context"The Effective Context dialog box appears, displaying your currently active roles.FILENAME="00301.unk" ORIGFILE="pics/effcntxt.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"ID="19190"Access Control RulesIntroductionOnce you have specified roles, you can define role rights for each object. Role rightsObjectTeam defines a set of actions for each object. To specify the role rights for an object, you specify, for each role and each action, whether the role can perform the action. The following illustration shows the dialog box that you use to specify the role rights for an object:FILENAME="00302.unk" ORIGFILE="pics/rolerits.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"Controlled actionsObjectTeam defines a set of valid actions for each type of object in the repository. Because you can control acess to each action, the actions are called controlled actions.Controlled objectsYou can specify role rights for every object in the repository. Any object for which role rights can be defined is called a controlled object.Controlled classes and controlled listsSpecifying the role rights for every object in the repository would be a time-consuming and error-prone task. ObjectTeam provides two mechanisms that allow you to define role rights that controlled objects can inherit:n Controlled classes allow you to define role rights for a class of objects. You can define role rights for controlled classes at the corporate or project level.For example, if you set the role rights for the controlled class, ConfigVersion, at the project level, every configuration version that you create in that project inherits those role rights.n Controlled lists allow you to define role rights for an object's child objects. Controlled lists are available only for objects that have child objects, this includes all objects that are under version control because each version is considered a child object.See REFID="38414" TYPE="XREF-TEXTCOPY"Controlled Lists for examples of role rights on controlled lists.Specifying role rightsTypically, the corporate administrator defines role rights on controlled classes and controlled lists at the corporate level. A project leader might modify the role rights on the controlled classes and controlled lists at the project level. Occassionally, a project leader or team member might modify the role rights for a controlled object to control access to that particular object.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19555" TYPE="XREF-TEXTCOPY"Role Rights, Access Rules, and Access Rights 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14288" TYPE="XREF-TEXTCOPY"Controlled Actions 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42002" TYPE="XREF-TEXTCOPY"Controlled Classes 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42612" TYPE="XREF-TEXTCOPY"Controlled Objects 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38414" TYPE="XREF-TEXTCOPY"Controlled Lists 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25ID="19555"Role Rights, Access Rules, and Access RightsIntroductionThis section provides the basic procedures you use to specify and examine access control rules.DefinitionsTERM1="access rule" TERM2="definition"Access rulesOn an object, each combination of role and action define an access rule. The set of access rules for an object are the object's role rights.Role rightsYou specify role rights for each object. For each role and each action, the role rights specify whether the role can perform the action.TERM1="access right" TERM2="definition"Access rightsYou view the access rights for each object. ObjectTeam uses your effective context and the object's role rights to determine your access rights to the object.How to specify role rightsΣ To specify the role rights (and access rules) for an object:TERM1="role right" TERM2="specifying"TERM1="Role Rights (Security menu)" TERM2="Edit"1 Select the object.2 Select Security | Role Rights | Edit.The Edit Role Rights dialog box appears.FILENAME="00303.unk" ORIGFILE="pics/rolerits.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"3 In the Objects list, if necessary, select the object whose role rights you want to edit. You can specify role rights for controlled objects, controlled classes, and controlled lists. (See REFID="42612" TYPE="XREF-TEXTCOPY"Controlled Objects, REFID="42002" TYPE="XREF-TEXTCOPY"Controlled Classes, and REFID="38414" TYPE="XREF-TEXTCOPY"Controlled Lists for more information.)4 In the Roles list, select the role whose rights you want to edit. (See REFID="18086" TYPE="XREF-TEXTCOPY"Roles for more information.)5 In the Actions list, specify one of the following permissions for each action:TERM1="access rule" TERM2="permissions"TERM1="permission" TERM2="definition"COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PermissionCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="allowed (access permission)"AllowedCOLNAME="2" VALIGN="TOP" MOREROWS="0"The action is permitted for the selected role.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="prohibited (access permission)"ProhibitedCOLNAME="2" VALIGN="TOP" MOREROWS="0"The action is denied for the selected role.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="undefined (access permission)"UndefinedCOLNAME="2" VALIGN="TOP" MOREROWS="0"There is no setting for this action for the selected role.6 Click OK or Apply.ObjectTeam updates the object's role rights. (See REFID="20462" TYPE="XREF-TEXTCOPY"How ObjectTeam Evaluates Access Rights for an explanation of how ObjectTeam uses the role rights to determine whether a user has access to an object.)How to view role rights for an objectΣ To view the role rights for an object:TERM1="role right" TERM2="displaying"TERM1="displaying" TERM2="role rights"TERM1="Role Rights (Security menu)" TERM2="Show"1 Select the object.2 Select Security | Role Rights | Show.The Show Role Rights dialog box appears. This dialog box is similar to the Edit Role Rights dialog box shown in the previous section.How to view access rules for an objectΣ To view the access rules for an object:TERM1="access rule" TERM2="displaying"TERM1="displaying" TERM2="access rules"TERM1="pseudo object" TERM2=""TERM1=""1 In the information area of the Browser, select the object.2 Select Security | Show Access RightsThe object's access rules appear in the Show Access Rights dialog box.Not all access rules are stored in the repositoryObjectTeam stores all access rules that allow or prohibit an action. If one or more actions are allowed or prohibited for a role, ObjectTeam stores all the access rules for that role. If all actions for a role are undefined, ObjectTeam does not store access rules for that role.For example, in the Edit Role Rights dialog box shown earlier in this section, no action is allowed or prohibited for the docu role. If, for example, the destroyAction were prohibited for the docu role, eight access rules for the docu role would be stored , one for each valid action.How to view access rightsΣ To view your access rights for an object:TERM1="access right" TERM2="displaying"TERM1="displaying" TERM2="access rights"1 Select the object.2 Select Security | Show Access Rights.TERM1="Show Access Rights (Security menu)"The Show Access Rights dialog appears, displaying your access rights to the object based on your effective context.FILENAME="00304.unk" ORIGFILE="pics/showrits.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"TERM1="access control" TERM2="controlled actions"TERM1="controlled action"ID="14288"Controlled ActionsIntroductionFor each object type, ObjectTeam defines a set of actions; for example, actions for the Project object include create and destroy. These actions are called controlled actions because you can specify access control rules for them.The controlled actions for an object type are defined by ObjectTeam and cannot be changed.How to view an object's controlled actionsΣ To view an object's controlled actions:TERM1="displaying" TERM2="controlled action"1 In the navigation or information area of the Browser, highlight the object.2 Select File | Info.The Info dialog box appears, listing the object's controlled actions.FILENAME="00305.unk" ORIGFILE="pics/accinfo.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"AlternativeThe Edit Role Rights, Show Role Rights, and Show Access Rights dialog boxes, as described in REFID="19555" TYPE="XREF-TEXTCOPY"Role Rights, Access Rules, and Access Rights, also include this information. They list all controlled actions; the actions that do not apply to the selected object appear dimmed.List of controlled actionsTERM1="controlAction"TERM1="createAction"TERM1="destroyAction"TERM1="readAction"TERM1="modifyAction"TERM1="insertAction"TERM1="removeAction"TERM1="freezeAction"TERM1="unfreezeAction"TERM1="modifyStatusAction"The following table describes all controlled actions:COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"controlCOLNAME="2" VALIGN="TOP" MOREROWS="0"Controls access to all other actions. If a role is allowed this action, it can change the permissions of other actions; otherwise, the role cannot change permissions of other actions.COLNAME="1" VALIGN="TOP" MOREROWS="0"createCOLNAME="2" VALIGN="TOP" MOREROWS="0"Applies to controlled classes. By setting rights to this action you can control whether someone can make a particular controlled object. For example, if create for controlled class ConfigurationVersionList is set to denied, the user cannot make any new configuration versions.COLNAME="1" VALIGN="TOP" MOREROWS="0"destroyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Applies to controlled classes.COLNAME="1" VALIGN="TOP" MOREROWS="0"readCOLNAME="2" VALIGN="TOP" MOREROWS="0"Applies to all object and controls whether a user can examine an object's contents. COLNAME="1" VALIGN="TOP" MOREROWS="0"modifyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Applies to all objects and controls a user's ability to change some property of an object, including its status. For example, without modify rights to a system version object, a user cannot make a new version of that system version or edit its properties.COLNAME="1" VALIGN="TOP" MOREROWS="0"insertCOLNAME="2" VALIGN="TOP" MOREROWS="0"This applies to controlled lists and controls a user's rights to insert object in that list, that is, to make new versions of an object. For example without insert rights to a SystemVersionList, a user cannot add any objects to that list and make a new version of a particular system.COLNAME="1" VALIGN="TOP" MOREROWS="0"removeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Applies to controlled lists.COLNAME="1" VALIGN="TOP" MOREROWS="0"freezeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Applies to version of objects. It controls the ability to freeze objects, and thus change their status.COLNAME="1" VALIGN="TOP" MOREROWS="0"unfreezeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Applies to versions of objects.COLNAME="1" VALIGN="TOP" MOREROWS="0"modifyStatusCOLNAME="2" VALIGN="TOP" MOREROWS="0"Applies to versions of objects. It controls the ability to change the status of objects. For example, you could prevent a user from changing the status of an object version from fixed to dynamic frozen.TERM1="access control" TERM2="controlled classes"ID="42002"Controlled ClassesTERM1="controlled class" TERM2="definition"TERM1="object" TERM2="role rights for class of"TERM1="role right" TERM2="for class of object"IntroductionThe role rights that you specify for a controlled class apply to all objects of that type. This provides an easy way to specify role rights for a large number of objects at one time.ConflictsIf you specify role rights on a controlled class and an object of that type, ObjectTeam uses the most restrictive access control rules to determine access rights. Thus, if an action is prohibited on either the controlled class or the object, ObjectTeam prohibits the action.ExampleThe controlled class GroupVersion is defined at the project level. In the role rights for the controlled class GroupVersion, you prohibit the destroyAction for the tester role. All group versions in the project now have the role rights for the controlled class GroupVersion. The tester role cannot delete a group version from the project.FILENAME="00306.unk" ORIGFILE="pics/accrule1.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"ObjectTeam defines controlled classesObjectTeam defines corporate-level and project-level controlled classes. You cannot add or delete controlled classes.Corporate-level controlled classesTERM1="controlled class" TERM2="list of (corporate level)"The following controlled classes are defined on the corporate level:COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CorporateCOLNAME="2" VALIGN="TOP" MOREROWS="0"CustomFileVersionListCOLNAME="1" VALIGN="TOP" MOREROWS="0"CorporateGroupCOLNAME="2" VALIGN="TOP" MOREROWS="0"LevelCustomFileLinkCOLNAME="1" VALIGN="TOP" MOREROWS="0"CorporateGroupVersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"LevelCustomFileLinkListCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"ProjectCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomFileListCOLNAME="2" VALIGN="TOP" MOREROWS="0"ProjectListCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomFileVersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Project-level controlled classesThe following TERM1="controlled class" TERM2="list of (project level)"controlled classes are defined on the project level:COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigCOLNAME="2" VALIGN="TOP" MOREROWS="0"ItemPropertyReferenceCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigListCOLNAME="2" VALIGN="TOP" MOREROWS="0"LevelCustomFileLinkCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigPhaseLinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"LevelCustomFileLinkListCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigPhaseLinkListCOLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigVersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseListCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigVersionListCOLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseSystemLinkCOLNAME="1" VALIGN="TOP" MOREROWS="0"CorporateGroupCOLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseSystemLinkListCOLNAME="1" VALIGN="TOP" MOREROWS="0"CorporateGroupVersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseVersionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseVersionListCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomFileListCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyReferenceListCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomFileVersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"SavedGroupCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomFileVersionListCOLNAME="2" VALIGN="TOP" MOREROWS="0"SavedGroupVersionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ExternalLinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"ExternalLinkListCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemCorporateLinkCOLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemCorporateLinkListCOLNAME="1" VALIGN="TOP" MOREROWS="0"FileListCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemFileLinkCOLNAME="1" VALIGN="TOP" MOREROWS="0"FilePropertyReferenceCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemFileLinkListCOLNAME="1" VALIGN="TOP" MOREROWS="0"FileVersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemFileReferenceCOLNAME="1" VALIGN="TOP" MOREROWS="0"FileVersionListCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemFileReferenceListCOLNAME="1" VALIGN="TOP" MOREROWS="0"GroupCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemGroupLinkCOLNAME="1" VALIGN="TOP" MOREROWS="0"GroupGroupLinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemGroupLinkListCOLNAME="1" VALIGN="TOP" MOREROWS="0"GroupListCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemListCOLNAME="1" VALIGN="TOP" MOREROWS="0"GroupVersionCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemVersionCOLNAME="1" VALIGN="TOP" MOREROWS="0"GroupVersionListCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemVersionListHow to specify role rightsΣ To specify the role rights for a controlled class:1 Move to corporate or project level, depending on which controlled class you are interested in. 2 Select Security | Role Rights | Edit Controlled Classes...The Edit Controlled Class Role Rights dialog box appears.FILENAME="00307.unk" ORIGFILE="pics/edctrlcl.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"3 Select a Controlled Class from the Objects list.4 Select a Role from the Roles list.5 Specify the role rights of the controlled class in the Actions list.Note: When you specify the role rights for a controlled class, ObjectTeam does not change the role rights for all objects of that type. However, when evaluating access rules for an object, ObjectTeam checks the role rights of its controlled class.How to view role rightsΣ To view the role rights of controlled classes:TERM1="controlled class" TERM2="displaying"TERM1="displaying" TERM2="controlled class"1 Move to the corporate or project level, depending on which controlled class you are interested in. 2 Select Security | Role Rights | .TERM1="pseudo object" TERM2=""TERM1=""Show Controlled Classes...The dialog box Show Controlled Class Role Rights appears.3 Select a Controlled Class from the Objects list.4 Select a Role from the Roles list.Under Actions the role rights of the selected controlled class are now displayed. For more informationFor more information about role rights, access rules, access rights, and the procedures used to view and specify them, see REFID="19555" TYPE="XREF-TEXTCOPY"Role Rights, Access Rules, and Access Rights.TERM1="access control" TERM2="controlled objects"ID="42612"Controlled ObjectsIntroductionTERM1="controlled object"Any object for which you can define role rights is called a controlled object. The role rights that you specify for a controlled object apply only to that object, which allows you to limit access to it.ConflictsIf you specify role rights on both a controlled class and a controlled object of that type, ObjectTeam uses the most restrictive role rights to determine the user's access rights. Thus, if an action is prohibited on either the class or the object, ObjectTeam prohibits the action.Initial role rightsTERM1="object" TERM2="role rights, initial"TERM1="role right" TERM2="initial value"When you create an object, ObjectTeam provides the following initial role rights for it:n ControlAction allowed for the default role of the creating user.n All other actions for the default role of the creating user are undefined.n All actions for all other roles are undefined.ExampleThe controlled class GroupVersion is defined on the project level. In the role rights for the controlled class GroupVersion, you allow the destroyAction for the tester role. However, for the controlled object myGroupVersion, you prohibit the destroyAction for the tester role. The tester role can delete any group version from the project except myGroupVersion.FILENAME="00308.unk" ORIGFILE="pics/accrule2.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"How to specify role rightsΣ To specify the role rights for a controlled object:1 Select the object in the information area2 Select Security | Role Rights | Edit.The Edit Role Rights dialog box appears.3 Make sure you have selected the object in the Objects list.4 Select a role from the Roles list.You can now specify the role rights of the object in the Actions list..How to view role rights Σ To view the role rights for a controlled object:1 Select the object in the information area2 Select Security | Role Rights | Show.TERM1="displaying" TERM2="controlled object"The Show Role Rights dialog box appears.3 Make sure you have selected the object in the Objects list.4 Select a role from the Roles list.The role rights of the object are now displayed in the Actions list.How to view access rightsΣ To view your access rights for a controlled object:1 Select the object2 Select Security | Show Access Rights.The Show Access Rights dialog box appears, displaying your access rights to the object based on your effective context.For more informationFor more information about role rights, access rules, access rights, and the procedures used to view and specify them, see REFID="19555" TYPE="XREF-TEXTCOPY"Role Rights, Access Rules, and Access Rights.TERM1="access control" TERM2="controlled lists"ID="38414"Controlled ListsIntroductionTERM1="controlled list" TERM2="definition"TERM1="object" TERM2="role rights for children of"TERM1="role right" TERM2="for child objects"In ObjectTeam, a parent object has a controlled list for each of its child object types. When you create a child object, ObjectTeam adds it to the appropriate controlled list on the parent object.TERM1="version" TERM2="access control for"For example, each system object has a controlled list, SystemVersionList. When you create a new version of the system, ObjectTeam adds the system version to SystemVersionList. Similarly, each project object has a controlled list, ConfigList. When you add a configuration to the project, ObjectTeam adds the configuration object to ConfigList.Two types of role rightsFor each controlled list, you specify two types of role rights: n TERM1="ownRight"TERM1="role right" TERM2="ownRight"ownRight determines who can add objects to or remove objects from the controlled list. You use ownRight role rights to control who creates and deletes child objects.n TERM1="childRight"TERM1="role right" TERM2="childRight"childRight specifies the initial role rights assigned to the objects added to the controlled list. You use childRight role rights to define the initial role rights of child objects.Naming conventions for controlled listsThe following naming convention identifies the contents of each list:n xxxList lists child objects other than versions.n xxxVersionList lists versions.n xxxLinkList lists links between versions of the parent object and versions of the child object.The links created and entered into this list are not immediately visible in the Browser. For example, the object that links a phase version and a system version does not appear in the Browser. However, Browser operations often affect the links created and entered into this list. For example, when you change the link status of a system version from fixed to dynamicFrozen you are changing the property of the link object.List of controlled listsThe following table lists all parent objects and their controlled lists.COLS="3"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="180p"COLNAME="3" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object COLNAME="2" VALIGN="TOP" MOREROWS="0"Controlled ListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Contents Of Controlled ListCOLNAME="1" VALIGN="TOP" MOREROWS="0"Corporate COLNAME="2" VALIGN="TOP" MOREROWS="0"ProjectListCOLNAME="3" VALIGN="TOP" MOREROWS="0"ProjectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Project COLNAME="2" VALIGN="TOP" MOREROWS="0"ConfigListCOLNAME="3" VALIGN="TOP" MOREROWS="0"ConfigurationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseListCOLNAME="3" VALIGN="TOP" MOREROWS="0"PhasesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CustomFileListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Customization filesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"LevelCustomFileLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between project and customization file versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigCOLNAME="2" VALIGN="TOP" MOREROWS="0"ConfigVersionListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Configuration versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ConfigPhaseLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between configuration versions and phase versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CustomFileListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Customization filesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"LevelCustomFileLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between configuration versions and customization file versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"PhaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseVersionListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Phase versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SystemListCOLNAME="3" VALIGN="TOP" MOREROWS="0"System versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PhaseSystemLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between phase versions and system versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CustomFileListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Customization filesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"LevelCustomFileLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between phase versions and customization file versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SystemCOLNAME="2" VALIGN="TOP" MOREROWS="0"SystemVersionListCOLNAME="3" VALIGN="TOP" MOREROWS="0"System versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ExternalLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"External linksCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"FileListCOLNAME="3" VALIGN="TOP" MOREROWS="0"FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SystemFileLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between system versions and file versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"GroupListCOLNAME="3" VALIGN="TOP" MOREROWS="0"GroupsNote: This list does not contain corporate groups; there is no controlled list for corporate groups.COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SystemGroupLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between system versions and group versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SystemCorporateLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between system versions and corporate group versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CustomFileListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Customization filesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"LevelCustomFileLinkListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Links between system versions and customization file versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"GroupCOLNAME="2" VALIGN="TOP" MOREROWS="0"GroupVersionListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Group versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"FileVersionListCOLNAME="3" VALIGN="TOP" MOREROWS="0"File versionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"CustomFileVersionListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Customization file versionsExample 1The following example shows how to use a controlled list that contains child objects other than object versions. On the controlled list, ConfigList, you specify the following role rights:n ownRight: allows the insertAction for your default rolen childRight: no permissions specifiedThese settings ensure that only you can create Configuration versions in the project (you are the only one who can insert configurations into the ConfigList). They ensure that there are no special restrictions on the Configurations that you create.Example 2The following example shows how to use a controlled list that contains object versions. On the controlled list, PhaseVersionList, you specify the following role rights:n ownRight: no permissions explicitly specifiedn childRight: allows the freezeAction for the QA-Manager roleThis ensures that anyone can create a new phase version (there are no special restrictions on the PhaseVersionList). However, only the QA-Manager role can freeze the phase versions that are created.Example 3The following example shows how to use a controlled list that contains links between object versions. On the controlled list, PhaseSystemLinkList, you specify the following role rights:n ownRight: allows the insertAction for your default rolen childRight: allows the modifyAction for your default roleThis ensures that only you can add a system version to the phase, either by adding a new system to the phase or by creating a new version of a system already in the phase. When a new system version is added, a link between the phase version and the system version must also be added to the PhaseSystemLinkList. You are the only user who can insert a link into that controlled list.It also ensures that, once the link is created, you are the only who can modify it. In this case, for example, you are the only who can change the link status of the system version.Controlled classes versus ownRights of controlled listsTERM1="controlled class" TERM2="and controlled list"TERM1=""TERM1="controlled list" TERM2="and controlled class"Because every controlled list is an object, a controlled class exists for every controlled list. Specifying the role rights on the controlled class (for the controlled list) affects every controlled list of that type. Specifying the ownRole rights on the controlled list affects only that particular controlled list.ExampleFor example, setting the insertAction for the controlled class SystemList (defined at project level) sets the insertAction of every SystemList in the project. These settings control who can add systems to the project. Setting the insertAction for the ownRights role rights of the controlled list SystemList (defined at the phase level) affects only this list. This controls who can add systems to the phase.Note: If the controlled class affects only one controlled list, then specifying the role rights of the controlled class has the same effect as specifying the ownRights of that one controlled list. For example, a project has only one ConfigList. Specifying the role rights of the controlled class ConfigList (defined at the project level), has the same effect as specifying the ownRights of the controlled list ConfigList (defined at the project level).Controlled classes versus childRights of controlled listsTERM1="controlled class" TERM2="and controlled list"TERM1=""TERM1="controlled list" TERM2="and controlled class"There are two significant differences between setting childRight role rights on a controlled list and setting role rights on a controlled class:n The childRight role rights on a controlled list define the initial role rights for each object added to the list. Changing the childRight role rights on a controlled list has no effect on existing objects.The role rights on a controlled class define the role rights for all objects of that type. Changing the role rights on a controlled class changes the role rights for all objects of that type.n Control classes are defined at the corporate and project level. Many controlled lists are defined at lower levels.For example, the controlled class System is defined at the project level. Specifying role rights on the controlled class System defines the role rights for every system in the project. The controlled list SystemVersionList is defined at the sytem level. Specifying childRight role rights on the controlled list SystemVersionList defines the initial role rights for every version of that particular system.How to specify role rightsΣ To specify the role rights for a controlled list:1 Select Security | Role Rights | Edit Controlled Lists...The Edit Controlled List Role Rights dialog box appears.FILENAME="00309.unk" ORIGFILE="pics/edctrllt.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"2 Select a Controlled List from the Objects list.3 Select a one or more roles from the Roles list.4 Specify the role rights of the controlled list in the Actions list.How to view role rightsΣ To view the role rights of controlled lists:TERM1="controlled class" TERM2="displaying"TERM1="displaying" TERM2="controlled class"1 Select Security | Role Rights | TERM1="pseudo object" TERM2=""TERM1=""Show Controlled Lists...The Show Controlled List Role Rights dialog box appears.2 Select a Controlled List from the Objects list.3 Select a Role from the Roles list.Under Actions, the role rights of the selected controlled list are now displayed. How to specify role rightsΣ To specify the role rights for a controlled list, select the object, then select Security | Role Rights | Edit.The Edit Role Rights dialog box appears. Use the Type box in the dialog box to select ownRight or childRight.How to view role rights Σ To view the role rights for a controlled list, select the object, and then select Security | Role Rights | Show.The Show Role Rights dialog box appears. Use the Type box of the dialog box to select ownRight or childRight.How to view access rightsΣ To view your access rights for a controlled list, select the object, and then select Security | Show Access Rights.The Show Access Rights dialog box appears, displaying your access rights to the object based on your effective context.Note: Your access rights are based on the ownRights of the controlled list. The childRights of the controlled list do not affect your access rights to the controlled list.For more informationFor more information about role rights, access rules, access rights, and the procedures used to view and specify them, see REFID="19555" TYPE="XREF-TEXTCOPY"Role Rights, Access Rules, and Access Rights.ID="20462"How ObjectTeam Evaluates Access RightsAccess rights checked at moment of accessTERM1="access right" TERM2="evaluating"TERM1="evaluating access rights"TERM1="permission" TERM2="evaluating"Because a user's effective context is dynamic (that is, the user can activate and deactivate roles), the user's access rights for any repository object are also dynamic. Every time you carry out an action on an object, ObjectTeam checks your access rights to that object.Most restrictive role rights are usedObjectTeam always uses the most restrictive role rights to define access rights. For example, if an action is allowed for one active role and prohibited for another active role, ObjectTeam prohibits the action.Evaluating access rightsΣ ObjectTeam follows these steps to determine whether you have access to a particular action on an object:1 Checks for SuperUser in your effective context. If SuperUser is in your effective context, the action is allowed regardless of which access rules are specified for this object.2 Checks the class of the object to determine whether you have access to the action. The action is prohibited in the following cases:- When one or more roles allowed this action, but none of them is in your effective context. - When one or more roles prohibited this action, and at least one of them is in your effective context. 3 Checks the object to determine whether you have access to the the action. The action is prohibited in the cases shown in step 2.Example 1TERM1="access control" TERM2="example"Suppose the user Fred and the role ProjectMember exist at the corporate level. The project manager creates a UserRoleLink between Fred and ProjectMember with a status of defaultOff. Fred now has two UserRoleLinks: his default role, Fred, and the role ProjectMember. Fred has not activated the ProjectMember role, so only his default role is in his effective context. Fred enters the command to freeze his current configuration version. ObjectTeam checks his access rights as follows:FILENAME="00310.unk" ORIGFILE="pics/accrule3.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"Now, the project manager adds an access rule to the controlled class ConfigVersion that allows the freezeAction for the ProjectMember role. Fred, still without the ProjectMember role in his effective context, again enters the command to freezes his current configuration version. ObjectTeam checks his access rights as follows:FILENAME="00311.unk" ORIGFILE="pics/accrule4.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"Example 2Suppose for a controlled class Cl and for objects Obj1 and Obj2, both of class Cl, the following role rights are defined:COLS="4"COLNAME="1" COLWIDTH="63p"COLNAME="2" COLWIDTH="117p"COLNAME="3" COLWIDTH="126p"COLNAME="4" COLWIDTH="144p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"RoleCOLNAME="3" VALIGN="TOP" MOREROWS="0"Allowed ActionsCOLNAME="4" VALIGN="TOP" MOREROWS="0"Prohibited ActionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClCOLNAME="2" VALIGN="TOP" MOREROWS="0"ProjectMemberCOLNAME="3" VALIGN="TOP" MOREROWS="0"create, freezeCOLNAME="4" VALIGN="TOP" MOREROWS="0" -COLNAME="1" VALIGN="TOP" MOREROWS="0"ClCOLNAME="2" VALIGN="TOP" MOREROWS="0"GuestCOLNAME="3" VALIGN="TOP" MOREROWS="0" -COLNAME="4" VALIGN="TOP" MOREROWS="0"modifyCOLNAME="1" VALIGN="TOP" MOREROWS="0"Obj1COLNAME="2" VALIGN="TOP" MOREROWS="0"JillCOLNAME="3" VALIGN="TOP" MOREROWS="0"controlCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"Obj2COLNAME="2" VALIGN="TOP" MOREROWS="0"JillCOLNAME="3" VALIGN="TOP" MOREROWS="0"controlCOLNAME="4" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"Obj2COLNAME="2" VALIGN="TOP" MOREROWS="0"GuestCOLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="4" VALIGN="TOP" MOREROWS="0"readBecause user Joe is not a registered user in the repository he has only the role Guest in his effective context. Users Jill and Jim are both registered users. Jill has the roles Jill and ProjectMember in her effective context. Jim has the roles Jim and Analyst in his effective context.n Any user (including Joe) can read Obj1, because no role right allows or denies that action on Cl or Obj1. n Joe cannot read Obj2, because a role right prohibits the action for role Guest, which is in Joe's effective context. Jill and Jim can read Obj2 because they do not have Guest in their effective contexts, and no role right allows read access for any role.n Joe cannot modify any object of class Cl, because the role right prohibits the action for the role Guest.n Only Jill can modify the access rules on Obj1 and Obj2, because the role rights on the objects allow the action for the role Jill, and she is the only with that role in her effective context. n Only Jill can freeze Obj1 and Obj2, because the role rights on class Cl explictly allow the action for the role ProjectMember, and she is the only user with that role in her effective context.ID="33041"How to Set up Access Control AutomaticallyIntroductionIf you know who the users of a project are, what roles they should be able to play, and which access these Roles need to have, you can use ObjectTeam's automatic access control mechanism.Automatic Access Control mechanismYou can use the automatic access control mechanism to:n Create usersn Create rolesn Create user role linksn Update user role linksn Update users' effective contextn Set the access rights for each role for one or more phase versions.The automatic Access Control mechanism consist of the following customization files:COLS="2"COLNAME="1" COLWIDTH="142p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Customization FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"roles.rolesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Defines which roles are allowed to execute which actionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"userroles.userrolesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Defines which roles users play, or are allowed to playThese customization files are further discussed in this section.ID="12475"The customization file roles.rolesUse the customization file roles.roles to specify which access rights you want to set for which roles in which phase.DefaultThe default customization file roles.roles on the corporate level contains an example specification of access rights for the Roles ProjectManager, Analyst, Designer, Programmer, Tester, and QA-Officer.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rolename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Phasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Accessname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rightsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ProjectManagername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Mname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Uname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analystname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analystname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Analysisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Uname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Designername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Designername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*Designname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Uname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Programmername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Programmername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Implementationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Uname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Testername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectDesignname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Testername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Implementationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'QA-Officername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RThe columns in this file indicate the following:Role NameThe role for which you specify the access rights. If the specified role does not yet exist in the repository, it will be created.See REFID="18086" TYPE="XREF-TEXTCOPY"Roles for details on Roles.Phase NameThe phase for which you specify the role's access rights. You can use the special characters for Tcl glob style pattern matching in the phase names, such as asterisks (*). Use just one asterisk to specify the role's access rights for all phases.Access RightsThis field contains a subset of the values M, C, R, U and D. With these values you can set certain controlled actions to Allowed or Prohibited for the role in the specified phase:n Controlled Actions are set to Prohibited explicitly if the corresponding letter is included in the Access Rights field. n Controlled Actions are set to Prohibited implicitly if the corresponding letter is not included in this field.The values M, C, U, R and D stand for the following:COLS="3"COLNAME="1" COLWIDTH="51p"COLNAME="2" COLWIDTH="102p"COLNAME="3" COLWIDTH="294p"COLNAME="1" VALIGN="TOP" MOREROWS="0"LetterCOLNAME="2" VALIGN="TOP" MOREROWS="0"Stands ForCOLNAME="3" VALIGN="TOP" MOREROWS="0"Controlled ActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"MCOLNAME="2" VALIGN="TOP" MOREROWS="0"ManageCOLNAME="3" VALIGN="TOP" MOREROWS="0"controlActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCOLNAME="2" VALIGN="TOP" MOREROWS="0"CreateCOLNAME="3" VALIGN="TOP" MOREROWS="0"createActioninsertActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"RCOLNAME="2" VALIGN="TOP" MOREROWS="0"ReadCOLNAME="3" VALIGN="TOP" MOREROWS="0"readActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCOLNAME="2" VALIGN="TOP" MOREROWS="0"UpdateCOLNAME="3" VALIGN="TOP" MOREROWS="0"modifyActionmodifyStatusActionfreezeActionunfreezeActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCOLNAME="2" VALIGN="TOP" MOREROWS="0"DeleteCOLNAME="3" VALIGN="TOP" MOREROWS="0"removeActiondestroyActionThe default roles.roles file (see, for example, the roles Analyst, Designer and Programmer) shows that certain controlled actions can be set implicitly to Prohibited for all phases and set explicitly to Allowed for one or more specific phases. Note: The access rights specified will be set on the following objects:n PhaseVersionn PhaseVersionListn PhaseSystemLinkListn SystemListSee REFID="19555" TYPE="XREF-TEXTCOPY"Role Rights, Access Rules, and Access Rights for details on Access Rights.ID="12701"The customization file userrolesUse the customization file userroles.userroles to specify which users you want to (be able to) play which roles. Effectively, you specify the UserRoleLinks for the roles in your project.DefaultThe default customization file userroles.userroles on the corporate level contains an example specification of UserRoleLinks for the Roles ProjectManager, Analyst, Designer, Programmer, Tester, and QA-Officer. However, no users are defined:...# Role Name | UsersProjectManager |Analyst |Designer |Programmer |Tester |QA-Officer |The columns in this file indicate the following:Role NameThe role for which you specify the UserRoleLink. If the specified role does not yet exist in the repository, it will be created.See REFID="18086" TYPE="XREF-TEXTCOPY"Rolesfor details.UsersHere is where you specify:COLS="2"COLNAME="1" COLWIDTH="331p"COLNAME="2" COLWIDTH="115p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SpecificationCOLNAME="2" VALIGN="TOP" MOREROWS="0"How to IndicateCOLNAME="1" VALIGN="TOP" MOREROWS="0"The users for whom the role will be activatedCOLNAME="2" VALIGN="TOP" MOREROWS="0"userName:YCOLNAME="1" VALIGN="TOP" MOREROWS="0"The users allowed to activate the role, but for whom the role will not be activated initiallyCOLNAME="2" VALIGN="TOP" MOREROWS="0"userName:NNote: Users whose names do not appear in the Users box are not allowed to activate the corresponding Role.ExampleThe following example distributes the Roles ProjectManager, Analyst, Designer, Programmer, Tester and QA-Officer over the users joe, john, mary, paula, jim and bob....# Role Name | UsersProjectManager | joe:Y Analyst | john:Y joe:Y mary:NDesigner | mary:Y joe:Y john:NProgrammer | paula:Y joe:YTester | jim:Y joe:Y paula:NQA-Officer | bob:YJoe has all roles except QA-officer in his effective context. Bob has only one role, QA-Officer. John and Mary each have the two roles Analyst and Designer. Mary plays the Designer role and will be able to play the Analyst role too. Paula has two roles, Programmer and Tester. Jim has only one role, Tester.See REFID="12942" TYPE="XREF-TEXTCOPY"Users for details on Users.How to set up access controlThe customization files roles.roles and userroles.userrroles allow you to set up access control for a particular configuration version within a project.Σ To set up this access control mechanism automatically:1 Verify that the module Security is active.See the ObjectTeam Installation Guide for details on ObjectTeam modules.2 Verify that SuperUser is one of your effective roles.Tip: Use Security | Show Effective Roles to see your effective roles. Use Security | Activate Role to make the SuperUser role part of your set of effective roles, you are allowed to do so.3 Create a customization file roles.roles and edit it.See the ObjectTeam Customization Guide for details on how to create a customization file. REFID="12475" TYPE="XREF-TEXTCOPY"The customization file roles.roles has further details on the structure of the file roles.roles.4 Create a customization file userroles.userrroles and edit it.See REFID="12701" TYPE="XREF-TEXTCOPY"The customization file userroles for details on the structure of this file,5 Make sure that the PhaseVersions mentioned in the roles.roles file exist in the configuration version for which you are setting up the access control.6 Make sure that these phase versions are empty.Warning: Automatic access control will not work for objects that already exist in these phase versions; it only works for empty objects.7 In the ObjectTeam Browser, go to the project or the configuration level.On Project level, you first have to select the Configuration(s) for which you want to set up acces control automatically.8 Select Security | Setup Access.An Execution Window starts up, showing the execution of all necessary commands.FILENAME="00312.unk" ORIGFILE="pics/autacc.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/access.fm5.mif"9 Restart the ObjectTeam Browser.The access control rules as defined in the customization files roles.roles and userroles.userrroles are now in effect.Appendix A Importing from and Exporting to GroundWorksTYPE="MIFmarker"TYPE="number"0TYPE="text"Modeling GuideIntroductionThis chapter describes:n How to import a GroundWorks data model into ObjectTeam n How to export an ObjectTeam persistent class model to GroundWorksGroundWorks (VAR) interface module requiredThe ObjectTeam module GroundWorks (VAR) interface provides the menu items and Tcl code required to import an export GroundWorks .var files. Therefore, this module must be active on the Browser levels where it is going to be used.Tip: You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Required modulesThe module GroundWorks (VAR) interface requires the module Persistent properties and one module of type CodeGeneration. You select a code generation module from a dialog box. Depending on the code generation module you select, new dialog boxes appear from which you are to select a module.These are the modules required to run the tool for importing .var files and exporting ObjectTeam class models:FILENAME="00313.tif" ORIGSEQ="26" ORIGTYPE="I" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"The names in this picture refer to the following modules:COLS="3"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="234p"COLNAME="3" COLWIDTH="106p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Module nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Long NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"varfileCOLNAME="2" VALIGN="TOP" MOREROWS="0"GroundWorks (VAR) interfaceCOLNAME="3" VALIGN="TOP" MOREROWS="0"IntegrationCOLNAME="1" VALIGN="TOP" MOREROWS="0"persist-propsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent propertiesCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersistPropsCOLNAME="1" VALIGN="TOP" MOREROWS="0"cplusplusCOLNAME="2" VALIGN="TOP" MOREROWS="0"C++ Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CodeGenerationCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cplusplusCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent C++ GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CodeGenerationCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-libcaynCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne class library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CppClasslibCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-librwCOLNAME="2" VALIGN="TOP" MOREROWS="0"Rogue Wave class library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CppClasslibCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-libstlCOLNAME="2" VALIGN="TOP" MOREROWS="0"STL class library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CppClasslibCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-aixCOLNAME="2" VALIGN="TOP" MOREROWS="0"IBM C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-decCOLNAME="2" VALIGN="TOP" MOREROWS="0"Digital C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-hpCOLNAME="2" VALIGN="TOP" MOREROWS="0"HP C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-sunCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sun C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-bc-45COLNAME="2" VALIGN="TOP" MOREROWS="0"Borland C++ 4.5 compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-vc-40COLNAME="2" VALIGN="TOP" MOREROWS="0"Visual C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-libwmtCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent Cayenne library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersCppClasslibCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-librwCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent Rogue Wave integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersCppClasslibID="32584"Importing GroundWorks .var FilesIntroductionThis section describes how to import Cayenne GroundWorks .var files into ObjectTeam.PurposeImporting a GroundWorks data model into ObjectTeam allows you to use the Entity Relationship Diagrams (ERDs) created in GroundWorks as a starting point for the Class Diagrams (CDs) in ObjectTeam.Note: This tool is not designed to maintain synchronized versions of the GroundWorks and ObjectTeam models.What is convertedThis tool converts GroundWorks entities, entity type hierarchies, attributes, and relationships to ObjectTeam classes, class hierarchies, attributes, and associations. These are the primary objects used for modeling and code generation in ObjectTeam.What is not convertedThe following GroundWorks objects are not converted: allowed value tables, business subject areas, free attributes, keywords, maps, notes, process models, process specification diagrams, and synonyms.How it worksObjectTeam reads in a .var file and converts it into a combination of CD and CDM files. In the process:n Entities and attributes are converted into classes and attributesn Dimensions and domains are converted into attribute data types (either standard data types or classes representing user-defined data types).n Relations are converted into associations.n Entity hierarchies are converted to class hierarchies.How to import .var filesΣ To import a .var file:1 In the Browser, open the system into which you want to import the .var file.2 Select Utilities | ObjectLoad.The Reverse Engineer VAR dialog box appears. The following illustrations show both the Windows and UNIX dialogs. In Windows, use the File Name and Files of Type fields to filter the list of files displayed. On UNIX systems,use the Filter Field and Filter button to filter the list of files displayed.FILENAME="00314.unk" ORIGFILE="pics/revarw.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"FILENAME="00315.unk" ORIGFILE="pics/revaru.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"3 Select the .var file that you want to import, then select OK.The Import VAR dialog appears, as shown below.4 Select the options that you want to use, as described in REFID="25166" TYPE="XREF-TEXTCOPY"Import VAR options.ObjectTeam imports the .var file, displaying status messages in the Execution window.5 Select View | Refresh.ObjectTeam updates the Information area of the Browser, displaying the newly generated files.ID="25166"Import VAR optionsThe following illustration shows the Import VAR dialog box:FILENAME="00316.unk" ORIGFILE="pics/revaropt.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"The following table describes each option:COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Prefix to be used in naming each generated CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn CDs only (only an inheritance structure is generated)n CDMs only (only features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, separate CDs are generated for classes that exceed the maximum size. COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class. When a class exceeds this size, it is folded.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree. When a class hierarchy exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram. When a diagram exceeds this size, a new diagram is created.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the algorithm used to create the CDs that show the associations:n Simple. Creates a CD for each class that has associations.n Grid. Creates a CD for each n classes, where n is the number specified in the Number of Classes per CD field.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of Classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Placement Algorithm is Grid, specifies the number of unfolded classes per CD.In this sectionThis section contains the following subsections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11577" TYPE="XREF-TEXTCOPY"Basic Conversion Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36211" TYPE="XREF-TEXTCOPY"Relationships and Partnership Sets Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13663" TYPE="XREF-TEXTCOPY"Component Attributes Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32421" TYPE="XREF-TEXTCOPY"Subdomains Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17ID="11577"Basic ConversionIntroductionThis section describes the conversion of GroundWorks entities and their attributes. The conversion of entity relationships is described in REFID="36211" TYPE="XREF-TEXTCOPY"Relationships and Partnership Sets.Conversion of entitiesWhen you import a .var file, each entity is converted to a class.n The entity's description, if any, is copied to the Free Text property of the class.n The class's Persistent class property is set. This property is visible only in the Object Design phase and only if the target language for code generation (as defined by the active ObjectTeam code generation module) supports persistent code generation.Entity type hierarchyAn entity type hierarchy is converted to a class hierarchy. All classes in the hierarchy are defined in a single CD named superentityTree.Conversion of attributesWhen you import a .var file, each entity attribute is converted to an attribute in the generated class.n The dimension/domain of the entity attribute is used to determine the data type of the generated attribute (see REFID="30182" TYPE="XREF-TEXTCOPY"Data type mappings). Subdomains are converted as described in REFID="32421" TYPE="XREF-TEXTCOPY"Subdomains.n An entity attribute's description is copied to the Free Text property of the generated attribute.n If the entity attribute's Nulls Allowed field is selected, the Nullable property of the class attribute is set to Default (indicating that Nulls are allowed); otherwise, the Nullable property of the generated attribute is set to No.n If the entity attribute's Source Type field is set to derived, the name of the generated attribute begins with a slash (/).n Component attributes are converted as described in REFID="13663" TYPE="XREF-TEXTCOPY"Component Attributes.n Shared attributes are converted as top-level entity attributes, not as component attributes.Conversion of methodsGroundWorks methods are not imported into ObjectTeam. But if an entity has exactly one attribute or exactly one relationship, the generated class includes one method: a $create operation.An ObjectTeam class that has exactly one attribute or relationship is a typedef class; these classes are treated specially by ObjectTeam's code generators. Adding the $create operation to the class ensures that the generated class is not a typedef class.Example: entity conversionSource ERDFILENAME="00317.unk" ORIGFILE="pics/gwent.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Generated CDFILENAME="00318.unk" ORIGFILE="pics/otent.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Example: entity type hierarchy conversionSource ERDFILENAME="00319.unk" ORIGFILE="pics/gwhier.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Generated CDThe class hierarchy defines the attribute inheritance; attributes appear only in the class in which they are defined.FILENAME="00320.unk" ORIGFILE="pics/othier.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"ID="30182"Data type mappingsThe data type of a generated attribute is based on the data type of the GroundWorks domain, as shown in the following table.Note: For character fields, length is the maximum length of the character field, as specified on the Domain form. If the maximum length is 1 (the default), length is not included in the ObjectTeam data type.COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"GroundWorks Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam Data TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"AlphabeticCOLNAME="2" VALIGN="TOP" MOREROWS="0"char [length]COLNAME="1" VALIGN="TOP" MOREROWS="0"AlphanumericCOLNAME="2" VALIGN="TOP" MOREROWS="0"char [length]COLNAME="1" VALIGN="TOP" MOREROWS="0"AudioCOLNAME="2" VALIGN="TOP" MOREROWS="0"audioCOLNAME="1" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="2" VALIGN="TOP" MOREROWS="0"flagCOLNAME="1" VALIGN="TOP" MOREROWS="0"DoublebyteCOLNAME="2" VALIGN="TOP" MOREROWS="0"double_byte_char [length]COLNAME="1" VALIGN="TOP" MOREROWS="0"ImageCOLNAME="2" VALIGN="TOP" MOREROWS="0"imageCOLNAME="1" VALIGN="TOP" MOREROWS="0"IntegerCOLNAME="2" VALIGN="TOP" MOREROWS="0"integerCOLNAME="1" VALIGN="TOP" MOREROWS="0"MixedCOLNAME="2" VALIGN="TOP" MOREROWS="0"char [length]COLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"notypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"RealCOLNAME="2" VALIGN="TOP" MOREROWS="0"realCOLNAME="1" VALIGN="TOP" MOREROWS="0"VideoCOLNAME="2" VALIGN="TOP" MOREROWS="0"videoCOLNAME="1" VALIGN="TOP" MOREROWS="0"all othersCOLNAME="2" VALIGN="TOP" MOREROWS="0"unknownID="36211"Relationships and Partnership SetsIntroductionThis section describes the conversion of relationships and partnership sets.Different notationGroundWorks and ObjectTeam use different notation for relationships.n In GroundWorks models, you read the optionality of a relationship from the partnership set at the near end of the relationship and the multiplicity of the relationship from the far end of the relationship. n In ObjectTeam models, you read both the optionality and the multiplicity of the relationship from the far end of the relationship.The following table summarizes these differences:COLS="3"COLNAME="1" COLWIDTH="216p"COLNAME="2" COLWIDTH="198p"COLNAME="3" COLWIDTH="216p"COLNAME="1" VALIGN="TOP" MOREROWS="0"RelationshipCOLNAME="2" VALIGN="TOP" MOREROWS="0"GroundWorksCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Note: The dashes indicate that the relationship from Account to Customer is not shown.COLNAME="1" VALIGN="TOP" MOREROWS="0"Customer must open exactly one Account (one-mandatory)COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00321.unk" ORIGFILE="pics/gwonem.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00322.unk" ORIGFILE="pics/otonem.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"COLNAME="1" VALIGN="TOP" MOREROWS="0"Customer may open zero or one Account (one-optional)COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00323.unk" ORIGFILE="pics/gwoneo.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00324.unk" ORIGFILE="pics/otoneo.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"COLNAME="1" VALIGN="TOP" MOREROWS="0"Customer must open one or more Account (many-mandatory)COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00325.unk" ORIGFILE="pics/gwmanym.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00326.unk" ORIGFILE="pics/otmanym.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"COLNAME="1" VALIGN="TOP" MOREROWS="0"Customer may open zero or more Account (many-optional)COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00327.unk" ORIGFILE="pics/gwmanyo.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"COLNAME="3" VALIGN="TOP" MOREROWS="0"FILENAME="00328.unk" ORIGFILE="pics/otmanyo.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Conversion of simple relationshipsEach relationship between two entities is converted to the ObjectTeam notation. In ObjectTeam, the relationship appears in the CD of the source entity.Note: In GroundWorks, the source entity is the first entity selected when the relationship is drawn. You cannot tell which entity is the source entity by looking at the data model.Source ERDFILENAME="00329.unk" ORIGFILE="pics/gwrel.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Generated CDsFILENAME="00330.unk" ORIGFILE="pics/otrel.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Conversion of IOR relationshipsIOR relationships are converted to multiple relationships. From the perspective of the entity that owns the IOR partnership set, all of the generated relationships are optional.Note: Typically, the entity that owns the IOR partnership set is the source entity for all the IOR relationships; therefore, all relationships generated for the IOR relationship typically appear in one CD.Source ERDFILENAME="00331.unk" ORIGFILE="pics/gwor.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Generated CDsFollowing is the CD created for the entor class; each folded class is defined in its own CD. FILENAME="00332.unk" ORIGFILE="pics/otor.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Note: The rel partnership set on the entor entity becomes two rel roles associated with the entor class. To prevent naming conflicts, the roles are named rel and rel2.Conversion of XOR relationshipsObjectTeam does not distinguish between IOR and XOR relationships when importing a .var file.Conversion of AND relationshipsAND relationships are converted to multiple relationships. From the perspective of the entity that owns the AND partnership set, all the generated relationships are mandatory.Note: Typically, the entity that owns the AND partnership set is the source entity for all the AND relationships; in this case, all relationships generated for the AND relationship appear in one CD.Source ERDFILENAME="00333.unk" ORIGFILE="pics/gwand.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Generated CDsFollowing is the CD created for the entand class; each folded class is defined in its own CD.FILENAME="00334.unk" ORIGFILE="pics/otand.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Note: The rel partnership set on the entand entity becomes two rel roles associated with the entand class. To prevent naming conflicts, the roles are named rel and rel2.ID="13663"Component AttributesIntroductionThis section describes the conversion of owner attributes and their component attributes. The conversion of subdomains (see REFID="32421" TYPE="XREF-TEXTCOPY"Subdomains) is similar.Conversion of component attributesWhen you import a .var file, each owner attribute is converted to a class named attrName_Type. Component attributes are converted to attributes in the attrName_Type class.n A one-to-one relationship connects the attrName_Type class with the class of its owner entity (or owner attribute).Each owner entity (owner attribute) must have exactly one attrName_Type; each attrName_Type may have zero or one owner entities (owner attributes).n Attribute details (dimension, domain, description, nulls allowed, and source type) are converted as described in REFID="11577" TYPE="XREF-TEXTCOPY"Basic Conversion.ExampleSource ERDThe following ERD has been edited slightly; in GroundWorks, component attributes are not indented.FILENAME="00335.unk" ORIGFILE="pics/gwcomp.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Generated CDFILENAME="00336.unk" ORIGFILE="pics/otcomp.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"ID="32421"SubdomainsIntroductionThis section describes the conversion of subdomains.Conversion of subdomainsWhen you import a .var file, each superdomain is converted to a class named domain_type. Subdomains are converted to attributes in the domain_type class.n When an attribute associated with the superdomain is converted:- The data type of the generated attribute is the superdomain class.- A one-to-one relationship connects the superdomain class with the class of the attribute's owner entity (or owner attribute).Each owner entity (owner attribute) must have exactly one superdomain class; each superdomain class may have zero or one owner entities (owner attributes).n Other attribute details (description, nulls allowed, and source type) are converted as described in REFID="11577" TYPE="XREF-TEXTCOPY"Basic Conversion.ExampleSource ERDThe following illustration shows an entity with two attributes. The domain of the name attribute is the fullname domain, which has two subdomains: firstname and lastname.FILENAME="00337.unk" ORIGFILE="pics/gwsubdom.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Generated CDFILENAME="00338.unk" ORIGFILE="pics/otsubdom.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Exporting GroundWorks .var FilesIntroductionThis chapter describes how to export an ObjectTeam (persistent) class model to a GroundWorks data model.PurposeExporting an ObjectTeam (persistent) class model allows you to use the Class Diagrams (CDs) and corresponding Class Definition Matrices (CDMs) created in ObjectTeam as a starting point for the Entity Relationship Diagrams (ERDs) in GroundWorks.Note: This tool is not designed to maintain synchronized versions of the ObjectTeam and GroundWorks models.Persistent classesThe module GroundWorks (VAR) Interface, that needs to be active in order to export GroundWorks .var files, requires another module, called Persistent Properties. The latter module allows you to specify a class in a CD as persistent, using the class property Persistent.Note: You can only export persistent classes to a GroundWorks .var file.What is convertedThe following table outlines which ObjectTeam data is converted to which GroundWorks data:COLS="2"COLNAME="1" COLWIDTH="286p"COLNAME="2" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="2" VALIGN="TOP" MOREROWS="0"GroundWorksCOLNAME="1" VALIGN="TOP" MOREROWS="0"persistent classCOLNAME="2" VALIGN="TOP" MOREROWS="0"VAR entityCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"VAR attributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"association between persistent classesCOLNAME="2" VALIGN="TOP" MOREROWS="0"VAR relationshipCOLNAME="1" VALIGN="TOP" MOREROWS="0"peristent class property Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"VAR ANLText objectHow is the data convertedIf SQL code is generated in ObjectTeam for persistent classes, ObjectTeam builds up an SQL model. This model is used to translate CD and CDM data to SQL tables, columns, and relationships. The same model is used to export persistent ObjectTeam classes to a GroundWorks .var file.The following classes (and group of classes) from the SQL Model are used to generate .var files:n SQLModeln SQLTablen SQL Column Classesn SQL Relationship Classesn SQL Link ClassesFor more informationSee ObjectTeam Programming Interface Guide for details on classes of the SQL Model.How to export .var filesΣ To export a .var file:1 In the Browser, open the system you want to export to a .var file.Make sure this system contains persistent classes.2 Select Utilities | ObjectDownLoad.3 Select the .var file that you want to export to, then select OK.ObjectTeam exports the current system to the selected .var file, displaying status messages in the Monitoring window.FILENAME="00339.unk" ORIGFILE="pics/objdload.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"The .var file is now generated.ExampleThe following example diagram is a simple CD with two associated persistent classes. FILENAME="00340.unk" ORIGFILE="pics/objdlcd.gif" ORIGTYPE="X" ORIGDOC="../../sources/pmg/var2oo.fm5.mif"Following are some of the significant parts of a .var file created by ObjectDownLoad based on the example CD.Cayenne Grndwrk V6.1 865590839 0 "ObjectTeam-Model" "" "" **ENTERPRISE_MODEL**9,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,"b",0,0...**DATA_MODEL** 10,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,"dm",0,0,0,0,"",0,9,0,0,0,0,0,0,7,8,0,0,0,0,0,0,0,0,0,0,0,0...**ENTITY**11,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,"Author",0,9999999,0,0,"Y","C","N",0,0,0,0,0,0,0,0,0,0,0,0,0,0,020,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,"Book",0,9999999,0,0,"Y","C","N",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...**ENTITYATTRIBUTE**11,1411,1820,2220,26...**ENTITYDIAGRAM_OBJE** 11,1220,21**ENT_KEY**16,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,11,"id",0,"Y",0,0,0,024,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,20,"id",0,"Y",0,0,0,0 ...**PARTNERSHIP_SET** 28,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,20,"author",1,1,1,"I",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"S",029,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,11,"Book",1,9999999,1,"I",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"S",0...**PARTNERSHIP_SETDIA** 28,3329,34...**PARTNERSHIP** 30,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,28,29,1,1,1,1,1,9999999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...**DOMAINS** 13,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,0,1,0,"int",0,"I","0.","0.",0,0,0,0,0,0,0,0,0,0,017,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,0,1,0,"char[20]",0,"A","0.","0.",0,0,0,0,0,0,0,0,0,0,025,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,0,1,0,"char[20]",0,"A","0.","0.",0,0,0,0,0,0,0,0,0,0,0...**ATTRIBUTE**14,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,11,0,"id",1,"Y","","M","S",0,13,0,0,0,0,0,0,018,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,11,0,"name",1,"Y","","M","S",0,17,0,0,0,0,0,0,022,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,20,0,"id",1,"Y","","M","S",0,13,0,0,0,0,0,0,026,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,20,0,"name",1,"Y","","M","S",0,25,0,0,0,0,0,0,0**ATTRIBUTEENT_KEY**14,1622,24...**DIAGRAM_PROPERTIES** 7,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,0,0,1,1,1,1,0,08,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,0,0,1,1,1,1,0,0...**DIAGRAM_OBJECT_PRO** 12,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,8421376,0,0,"Arial",48,400,015,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,8421376,0,0,"Arial",48,400,019,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,8421376,0,0,"Arial",48,400,021,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,8421376,0,0,"Arial",48,400,023,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,8421376,0,0,"Arial",48,400,027,"",1997-01-01-00.00.00.000000,"",1997-01-01-00.00.00.000000,0,8421376,0,0,"Arial",48,400,0...Code Generation SetAda Professional Developer's ToolkitHow to Use This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitAbout this manualObjectTeam provides code generation tools that enable you to generate object-oriented code for a range of object-oriented programming languages. This guide focuses on Ada 83 and Ada 95 as target languages. This manual explains the following things:n Which steps to take to generate Ada 83 and Ada 95 code.n How certain constructions in the Class Diagram (CD) are translated into Ada code.n How you use reverse and round-trip engineering.n How you can customize the default code generation process.PrerequisitesThis book assumes a basic knowledge of ObjectTeam, including familiarity with the information provided in the ObjectTeam Getting Started and ObjectTeam Modeling Guide.Furthermore, knowledge of Ada 83 or Ada 95 is necessary to understand the constructions generated from the Class Diagrams. You also need this knowledge to complete the generated code.If you plan to customize the default code generation process, you should be familiar with Tcl and the object-oriented extensions to Tcl supplied with ObjectTeam. For details on Object Tcl, refer to the ObjectTeam Programming Interface Guide.Chapter 1 IntroductionTYPE="MIFmarker"TYPE="number"0TYPE="text"ObjectTeam - Ada Professional Developers ToolkitIntroductionThis chapter introduces the concepts and procedures used by the ObjectTeam Ada Professional Developers Toolkit.The chapter introduces the concepts of code generation, synchronized engineering, and reverse-engineering. Short examples are provided of each.This manual assumes a moderate understanding of how to use ObjectTeam, the Unified Modeling Language (UML) notation, and the Ada 83 or Ada 95 programming languages.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33533" TYPE="XREF-TEXTCOPY"Introduction 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32838" TYPE="XREF-TEXTCOPY"Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12971" TYPE="XREF-TEXTCOPY"Synchronized Engineering 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38788" TYPE="XREF-TEXTCOPY"Reverse Engineering 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8ID="33533"IntroductionWhat is the ObjectTeam Ada Professional Developers Toolkit?The ObjectTeam Ada Professional Developers Toolkit (TERM1="APDT" TERM2="What is it?"APDT) is a suite of tools providing ObjectTeam with code generation, synchronous engineering, and reverse-engineering capability for the Ada 83 and Ada 95 programming languages.TermsHere is a short description of key concepts used throughout this manual:n TERM1="code generation" TERM2="defined"Code Generation (or forward engineering) is generating source code from design models. Code re-generation, or the ability to generate code taking into account previously generated and modified code is a key part of "synchronized engineering".n TERM1="code regeneration" TERM2="Defined"Code Regeneration updates previously generated source based on design (UML) changes.n TERM1="Synchronized Engineering" TERM2="Defined"Synchronized Engineering is the process of step-wise refinement of both design (UML) and source code, with both kept in synch with the other. In practice, this requires that changes to the code automatically be represented in the design, and that changes to the design incorporate previously generated and modified code. n TERM1="reverse engineering" TERM2="Defined"Reverse-Engineering is generating design models from code for the sole purpose of loading in design objects needed by new elements for referral or documenting purposes. What is the APDT useful for?The TERM1="APDT" TERM2="Useful for..."APDT is used primarily as a bridge between OO design and OO implementations using the Ada 83 or Ada 95 language. In particular, the APDT can:n Automatically generate compilable (and useful) Ada 83/95 code directly from ObjectTeam design models.n Synchronize design and implementation, incorporating adjustments that have been made to both.n Help with understanding and comprehension of existing bodies of large and complicated Ada 83 or Ada 95 programs.n Populate ObjectTeam design models with representations of existing code so that "as built" documentation can be produced with ObjectTeam documentation tools.n Load design representations of existing code into design models that can then be referred to (or re-used) when designing new systems.ID="32838"Code GenerationIntroductionTERM1="Code Generation" TERM2="Introduction"Sometimes also referred to as "forward-engineering", TERM1="forward engineering"TYPE="MIFmarker"TYPE="number"0TYPE="text"Ada Professional Developers Toolkitcode generation in ObjectTeam is the process of translating diagrams into program code. The ObjectTeam APDT translates the Class Diagrams and their related Class Definition Matrices into Ada specification and body files. Code generation involves the following steps:n The user defines Class Diagrams and Class Definition Matrices using ObjectTeam. n The user manipulates various properties and options controlling aspects of Ada code generation.n The APDT translates the Class Diagrams and the Class Definition Matrices that are stored in the repository into a Code Generation model.n This Code Generation model is translated into Ada source code.During design, you define a class more precisely by specifying its features, such as attributes and methods, relationships with other classes and inheritance:FILENAME="00341.unk" ORIGFILE="pics/ordful.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaintro.fm5.mif"Example of Ada Code GenerationHere is an example Ada specification, automatically generated for the class "Address" from the above example. Note that to save space, some white space has been removed from this code (and all code used in this manual).-- Specification file for Address--OT Ignore--OT Analyzewith OrderFullfillment_Types;package Address is --OT Ignore--OT Analyzename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is tagged recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Name : String;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Street : String;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'City : String;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'State : OrderFullfillment_Types.US_States;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ZipCode : String;end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access all Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Class_Link is access all Instance'Class;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--OT Attribute accessor methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Name (Self : Instance) return String;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Set_Name (Self : in out Instance; New_Name : String);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Street (Self : Instance) return String;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Set_Street (Self : in out Instance; New_Street : String);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_City (Self : Instance) return String;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Set_City (Self : in out Instance; New_City : String);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_State (Self : Instance) return OrderFullfillment_Types.US_States;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Set_State (Self : in out Instance; New_State : OrderFullfillment_Types.US_States);-- OT Attribute accessor methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_ZipCode (Self : Instance) return String;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Set_ZipCode (Self : in out Instance; New_ZipCode : String);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--OT user- defined methodsprivate--OT User-defined methods-- Ignore-- Analyzeend Address;-- Ignore-- AnalyzeID="12971"Synchronized EngineeringIntroductionID="synchronized engineering"Synchronized engineering refers to incremental development that keeps design and implementation synchronized. In practice it means being able to generate code, change the code, bring that changed code back into ObjectTeam, make changes in the design, and to then generate code again (with the existing code being re-used).Synchronized engineering involves these steps:1 Forward Engineer from ObjectTeam design model.2 Add implementation changes to the generated source code.3 The APDT parses the changed source to identify changes requiring UML design update.4 The user confirms each proposed change.5 The APDT creates a new version of each altered Class.Note: In the current version of APDT, only code that was originally generated by the APDT may be used in a synchronized engineering manner.Changing the source codeIn the prior example of automatically generated Ada code, the source code is sprinkled with comments looking like "--OT Ignore" and "--OT Analyze". These comments are indicators of where the generated source code can be changed without affecting the synchronization. After a "--OT Ignore" comment, you may add your implementing and/or non-design affecting code.After a "--OT Analyze" comment, you may still add or modify code, but you must take into account that the APDT will attempt to synchronize these changes into the ObjectTeam model used to generate the original source code. These kinds of changes can be made:n Add, delete or modify components of typesn Add, delete or modify methods (i.e. functions/procedures)n Add, delete or modify parameters to methodsn Add or alter comments describing the purpose of each design entityIf you make changes where it will affect design, then the APDT will update the appropriate class definition matrices (CDM), or create new CDMs if new classes have been introduced by the code changes.Changing the ObjectTeam DesignAfter the altered source code and the ObjectTeam design have been brought into synch, it's then possible to continue with design adaptations.Similar kinds of changes are permitted:n Changes to properties affecting code generationn Addition, modification, or removal of classes, methods, and attributesn Creation of new relationships or generalizationsIt is possible to make changes in the design that then makes existing code obsolete. For instance, one could remove a method, or delete a class.Changes such as this result in a code section at the bottom of a re-generated source file surrounded by the comments:"--OT Obsolete" This section contains existing code found to have been made obsolete by the most recent design changes.ID="38788"Reverse EngineeringIntroductionID="reverse engineering"Reverse Engineering is the process of mapping existing Ada 83 or Ada 95 code into ObjectTeam diagrams.The resulting design can be used for:n Making an existing code body referenceable or re-usable (from a design perspective) in ObjectTeamn Production of "as built" documentation by the ObjectTeam documentation toolsn Gaining an understanding of the structure and function of the existing codeNote: Reverse engineering is not the process of importing code so that it can be maintained from within ObjectTeam. The APDT code generator cannot merge changes made in ObjectTeam diagrams with the existing code used to create those diagrams.ExampleSample codeID="reverse engineering"Here is a simple Ada 95 example implementing operations on rectangles:package shapes_package is type rectangle is tagged -- Gives characteristics of a rectangle. record length : float; -- Length of rectangle width : float; -- Width of rectangle end record; function size (r : rectangle -- A rectangle for which size is to be determined ) return float; -- Returns size of a given rectangle. type cuboid is new rectangle with -- Adds height to a rectangle to make a cube. record height : float; -- Height of cube. end record; type objects is record -- Holds a rectangle and a cube. rec : rectangle; cube : cuboid; end record; global_rectangle : rectangle; global_cuboid : cuboid; procedure initialize_shapes;end;Generated classesThe following classes are generated from the source code:FILENAME="00342.unk" ORIGFILE="pics/reveng11.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaintro.fm5.mif"FILENAME="00343.unk" ORIGFILE="pics/reveng12.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaintro.fm5.mif"FILENAME="00344.unk" ORIGFILE="pics/reveng13.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaintro.fm5.mif"Chapter 2 Preparing ID="30937"Your ObjectTeam Model for Code GenerationIntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.Ada module requiredThe ObjectTeam modules Ada83 Code Generation and Ada95 Code Generation provide the menu items, the properties and the Tcl code required to use the Ada Professional Developer's Toolkit. Therefore, before moving to the Object Design phase, make sure the Ada Code generation module of your choice is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and Implementation This chapter describes the tasks of the Object Design phase. Chapter 3, Building an Ada Application, Chapter 4, Mapping Modeling Data to Ada 95 Code , and Chapter 5, Mapping Modeling Data to Ada 83 Code describe the tasks of the Implementation phase. Chapter 6, Synchronized Engineering describes incremental development and synchronized engineering. You work iteratively in these phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use other diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25958" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36972" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00345.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/ada/adaobjd.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and subtypes. OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationChapter 5, Mapping Modeling Data to Ada 83 Code, and Chapter 4, Mapping Modeling Data to Ada 95 Code, describe how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, consider the following:n When naming classes, do not leave a space between words. Code generators cannot handle blank spaces in identifier (class) names.n Do not use the same name for a class and a system, or for a class and a CD. Class, system, and diagram names are all stored in the repository as items of type cl.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 3 Building ID="16183"an Ada ApplicationIntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details not specified in the model.Prerequisitesn The appropriate ObjectTeam module Ada83 Code Generator or Ada95 Code Generator must be active from Object Design phase and Implementation phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="30937" TYPE="XREF-TEXTCOPY"Chapter 2, Preparing Your ObjectTeam Model for Code Generation.Steps in code generationThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Configure the Ada environment.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate code for your systems in the Implementation phase. During this step, ObjectTeam runs the Tcl scripts that generate the application source code files.Note: System level in the Implementation phase is fundamentally different than System level in other phases. The System files in the Implementation phase are source files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Edit the source files. ObjectTeam generates a large portion of your application code, but not all of it. In this stage, you finish writing the application code.Changes you make to the source files are not lost. When you regenerate the source files, the code generator recognizes your changes and transfers them to the newly generated files.TERM1="code regeneration"TERM1="regeneration" TERM2="code" TERM1="otsh" TERM2="code regeneration"COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Build the executable..COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Test the executable. If necessary: correct the source files, the model, or both; regenerate the files; and return to step 3.Illustration of code generationThe following illustration shows how ObjectTeam generates code. The CDs and CDMs shown at the top are in the Object Design phase.FILENAME="00346.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/ada/adacodg.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16880" TYPE="XREF-TEXTCOPY"Components of Code Generation 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40480" TYPE="XREF-TEXTCOPY"Generating Ada Code 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26759" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15358" TYPE="XREF-TEXTCOPY"Building an Executable 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10ID="16880"Components of Code GenerationTcl scripts for code generationThe scripts written for code generation retrieve information from the code generation models, format this information and write the results to source code files. Code generation models are built from the CDs in the Object Design phase.The default TERM1="Tcl" TERM2="script files used for code generation"Tcl scripts used by otsh to generate Ada83 source code can be found under the M4_home\modules\ada83\tcl directory tree. The default scripts for generating Ada95 source code can be found under the M4_home\modules\ada95\tcl directory tree. .TERM1="code regeneration"TERM1="regeneration" TERM2="code"Code TERM1="otsh" TERM2="code regeneration"regenerationCode generation is an automated process that generates Ada83 or Ada95 files. ObjectTeam ensures that n You can regenerate these files when you change your model.n Changes that you make to the generated files are preserved when you regenerate the files.For more information, see REFID="28849" TYPE="XREF-TEXTCOPY"Chapter 6, Synchronized EngineeringTERM1="class library" TERM2="including in code generation"ID="35964"ConfigurationThe code that ObjectTeam generates could be any object-oriented programming language, but this guide focuses on Ada. Before generating Ada code, you may configure your APDT environment.You can configure the settings of the default values that are applied when the design is transformed into Ada83 or Ada95 code.For more information, see REFID="21577" TYPE="XREF-TEXTCOPY"Chapter 8, Configuring the APDT Code Generators.ID="18430"ID="40480"ID="24041"ID="34047"Generating Ada CodeResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create Ada source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are Ada files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate source files on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate Ada83 or Utilities | Generate Ada95.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet. - Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files.ID="10881"How to generate code on System levelΣ To generate (selected) source files for a system from System level of the Implementation phase:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate Ada83 or Utilities | Generate Ada95.A cascading menu appears.3 Select one of the following:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then generates the files. The following illustration shows the Monitor window after generating code for a system.FILENAME="00347.unk" ORIGFILE="pics/codegen1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adacodg.fm5.mif"Location of the source filesSource files are stored in the repository as external files. They are also written to the user_environment\system-name directory, where user_environment is the file path for your generated files. For more information on the user environment, see the ObjectTeam Project Management Guide. The following illustrations show how the source files appear in the Browser. FILENAME="00348.unk" ORIGFILE="pics/codegen2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adacodg.fm5.mif"When code is not generatedThe code generator generates code for all classes defined in the current system. It does not generate code in the following situations:n If a CD in the current system contains a class that is defined in another system, the code generator does not generate code for that class.n If a CD in the current system contains a class component (a graphical element) that does not have an associated item (a semantic element), the code generator does not generate code for that class.Note: For more information about components and items, see REFID="29698" TYPE="XREF-TEXTCOPY"Working With Items on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31 in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams, of the ObjectTeam Modeling Guide.ID="17211"The OOPL ModelOOPL ModelThe OOPL Model, which is generated from the CDs in the Object Design phase, contains information used to generate code. The objects in this model are organized in such a way that code can be generated easily.For more informationThe ObjectTeam Repository Interface Guide provides a detailed description of the classes in the OOPL Model.Generated codeThe Ada code generators generate the following files for classes in the CDs of the Object Design phase:TERM1="C++ header file" TERM2="generating"TERM1="generating" TERM2="C++ header file"COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="313p"COLNAME="1" VALIGN="TOP" MOREROWS="0"File COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"class_name.adsCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="H++"TERM1="header file"file containing thepackage specification implemening the classCOLNAME="1" VALIGN="TOP" MOREROWS="0"class_name.adbCOLNAME="2" VALIGN="TOP" MOREROWS="0"file containing the package body implementing the classFor more informationSee REFID="20014" TYPE="XREF-TEXTCOPY"Chapter 4, Mapping Modeling Data to Ada 95 Code and REFID="39994" TYPE="XREF-TEXTCOPY"Chapter 5, Mapping Modeling Data to Ada 83 Code.ID="26759"Editing (Generated) Source FilesIntroductionAfter the code has been generated, you can relate each generated Ada specification and body file to a specific class in a CD of the Object Design phase.Package specification filesThe generated package specification files contain all the necessary with statements and do not need editing.If, however, you choose to edit a package specification file, you can use the round-trip engineering task to move your changes back into your model so that they are not lost when you regenerate code. See REFID="28849" TYPE="XREF-TEXTCOPY"Chapter 6, Synchronized Engineering for more information.Package body filesThe generated package body files serve as framework files. They contain a subprogram for each method of the classes in the CDs, but the subprogram bodies are empty. You need to fill in the following:n The bodies of the subprograms that are defined in the package body. No executable code is created for the subprogram. Instead, the following line is generated:--!! Implement this function !!n The sections that are marked by comments similar to the following:--OT Ignore--OT AnalyzeSample Ada package body fileThe following is a sample Ada95 package body (adb) file. User edits are highlighted.--OT Ignorewith Amount_Io;--OT Analyzepackage body Account is --OT Ignore Number_Of_Prints : Integer := 0; --OT Analyze procedure Print_Amount(Self : in out Instance) is --OT Ignore begin Number_Of_Prints := Number_Of_Prints + 1; Amount_Io.Put(Self.Ammount); end Print_Amount; --OT Analyze --OT Ignore --OT Analyzeend Account; --OT Ignore--OT AnalyzeTERM1="source files" TERM2="editing generated -"TERM1="generated source file" TERM2="editing"How to edit source filesΣ To edit source files:1 Move to System level in the Implementation phase.2 In the Information area, double-click on the source file that you want to edit, or select the source file and then select File | Edit.The default Text Editor starts up with the corresponding file in the user environment.Update diagramsDepending on the type of additions you have made to the source files, you may need to edit the CDs to reflect your changes. If you do so, be sure to use Check | Global Model to check the updated diagrams before regenerating the source files.TERM1="makefile" TERM2="generating"ID="15358"Building an ExecutablePrerequisitesTo successfully compile and run an executable, you must have the following:n The required source code files (language-specific source files); see REFID="40480" TYPE="XREF-TEXTCOPY"Generating Ada Coden All procedural code in the source files must be completely defined for the implementation of methods (see REFID="26759" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files).n The source code files required for implementing associations for Ada83 or Ada95. These files can be found in M4_home/modules/ada83/config/src for Ada83 code generation and in M4_home/modules/ada95/config/src for Ada95 code generation.How to build an executableFor building an Ada83 or Ada95 executable, you must use the tools provided with your Ada compiler.See your Ada complier documentation for details on compiling and linking an Ada application.Conduct a final check for errorsAs always, before you distribute anything, conduct a quality check of your work. If necessary, fix the source files, fix the ObjectTeam model, regenerate the code, and retest the executable.Chapter 4 Mapping Modeling Data to ID="20014"Ada 95 CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitIntroductionThis chapter explains how particular parts of classes and class specifications result in particular parts of Ada 95 source code.The first section of the chapter explains some principles of the code generation process. The next six sections describe the relationship between class specifications and the generated code. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38866" TYPE="XREF-TEXTCOPY"Mapping Attributes 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31gQn2d7nsem" TYPE="XREF-TEXTCOPY"Mapping Operations 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="S1gQn1e4nsem" TYPE="XREF-TEXTCOPY"Mapping Inheritance 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="q1gQn144nsem" TYPE="XREF-TEXTCOPY"Mapping Associations 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="x3gQn310nsem" TYPE="XREF-TEXTCOPY"Mapping Associations as Classes 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="ThJUm389rlb" TYPE="XREF-TEXTCOPY"Mapping Aggregations 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'29IntroductionMapping Non-Persistent Classes into Ada 95 CodeTERM1="class" TERM2="in non-persistent code generation"Code generation in ObjectTeam is the process of translating diagrams into program code. In the Object Design Phase, you prepare Class Diagrams and their attributes, operations and associations with each other. When generating Ada 95 code only Class Diagrams are used. Also, code is only generated for only for non-persistent classes.During design, you define a class more precisely by specifying its features:FILENAME="00349.tif" ORIGSEQ="6" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Class characteristics generate equivalent Ada 95 constructsObjectTeam produces the equivalent Ada 95 constructs for each of the following characteristics of a class:n Attributes n Operationsn Relationships (or Associations)n InheritanceCaveatsObjectTeam's implementation for Ada 95 has these caveats:n A class must have at least one attribute and one operation in order to have code generation performed.n Only single inheritance is supported (this is a limitation in the Ada 95 language).n Bi-Directional associations (associations with role names on each side) generate code that will not compile. REFID="x3gQn310nsem" TYPE="XREF-TEXTCOPY"Mapping Associations as Classes describes an alternate method.ExanpleObjectTeam maps an ObjectTeam class into an Ada record type defined in its own package. The root class of an inheritance hierarchy maps to an Ada 95 tagged record type. Source files for both package spec and body are generated. Here is a short example:FILENAME="00350.tif" ORIGSEQ="4" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is [tagged] recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;End Object_Class;Package Body Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--OT!! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Get_Object_Name;End Object_Class;Editing class propertiesYou can edit the properties of a class, its attributes, operations, parameters, and data types in the Object Design phase. You do this by selecting the class symbol then by choosing Edit PropertiesTERM1=""TERM1="" from the Item menu on the Class Diagram editor's menubar.The TERM1=""properties you establish for a class and its characteristics determine the code that is generated for the class. Some properties may generate something other than a class in the resulting code, such as a new type.Class visibility controls read/write access The Class VisibilityTERM1="Class visibility" TERM2="editing properties"TERM1="Classes" TERM2="visibility property" property establishes read/write accessTERM1="Read/Write access" TERM2="class visibility property" to the record type of the class.TERM1="Record types" TERM2="setting class visibility" The record types are Public (the default), Private, Limited, or Opaque. Record and access type namesBy default, the Ada95 code generator produces a record type named "Instance" and an access type named "Link" for each ObjectTeam Class.You can customize the name used for the record type by modifying the M4 variable M4_Ada95_Class_Record_Type_Name. Simularly, you can customize the name used for the access type by modifying the variable M4_Ada95_Class_Access_Type_Name. You must do so, however, before generating code.TERM1=""TERM1=""TERM1=""See Chapter 8, Configuring the APDT Code Generators, for more information on M4 variables affecting code generation. If the access typeTERM1="Access type" TERM2="optional for a class"TERM1="Classes" TERM2="access type is not required" is not required for a class, you can include the following length clause in the appropriate -OT Analyze section of the package specification so that it does not reserve storage for the collection associated with the access type:TERM1="Access type" TERM2="length clause" for Link'storage_size use 0;Below are examples of the Ada 95 code that is generated for the class example on the previous page, for each record type. The tagged keyword is generated for the top class in an inheritance hierarchyTERM1="Ada code examples" TERM2="class record types". Code generated for a class with public record typeTERM1="Public record types" TERM2="code example"TERM1="Classes" TERM2="public record types"package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is [ tagged ] recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance; name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;end Object_Class;package body Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Get_Object_Name;end Object_Class;Code generated for a class with private record typeTERM1="Private record types" TERM2="code example"TERM1="Classes" TERM2="private record types"package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is [ tagged ] private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance; name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is [ tagged ] recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Object_Class;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(Package body is the same as Public's)Code generated for a class with limited record typeTERM1="Limited record type" TERM2="code example"TERM1="Classes" TERM2="Limited record types"package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is [ tagged ] limited private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance; name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is [ tagged ] recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Object_Class;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(Package body is same as Public's)Code generated for a class with opaque record typeTERM1="Opaque record types" TERM2="code example"TERM1="Classes" TERM2="Opaque record types"package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is limited private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Data;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is [ tagged ] access Data;end Object_Class;package body Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Data is [ tagged ] recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Get_Object_Name;end Object_Class;Code generated for classes with private extension record typeTERM1="Opaque record types" TERM2="code example"TERM1="Classes" TERM2="Opaque record types"Note that the Private Extensions type is valid only for child classes in an inheritance hierarchy. The example below assumes that <parent> is the class name of the parent. package Object_Class is type Instance is new <parent> with private; type Link is access Instance; function Get_Object_Name (Self: Instance) return String;private type Instance is new <parent> with record Object_Id: Integer; end record;end Object_Class;Defining controlled typesBy deriving a class from a controlled or limited controlled type, Adaname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'95 allows a class to define initialization, finalization, and adjustment functionality. To support this concept, each ObjectTeam class has a Controlled property that specifies whether it is Controlled, Limited Controlled, or Not Controlled. The default is Not Controlled.When a class is set to Controlled then that class, when generated into Ada 95, will be a subclass of the standard Ada package Ada.Finalization.Controlled. It will therefore implicitly have Initialize, Finalize, and Adjust procedures. Note that these procedures will not appear in the generated code, since they are defined in the parent. They can be overwritten by creating operations in the class called Initialize, Finalize, and Adjust. When a class is Limited Controlled, the generated class will be a subclass of Ada.Finalization.Limited_Controlled, and will implicitly have Initialize, Adjust, and Finalize procedures.As an example, if the Object_Class class from the start of this chapter is generated with Control set to Controlled (and public access), the following code is generated.package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is new Ada.Finalization.Controlled withname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance; name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;end Object_Class;package body Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Get_Object_Name;end Object_Class;In an inheritance hierarchy, only the root class is derived from Ada.Finalization.Controlled. Therefore, the code generator ignores the Controlled property for all subclasses. When the root class is a controlled type, it is not generated as a tagged type. Initialize, Finalize, or Adjust procedures, if defined in the root class, may need to be overridden in the child classes.Child syntaxAda 95 supports two syntaxes for package names. A package name can have a simple name, such as Object_Class, or it can have a name in Child Library Unit format, in which the name is a composition of names from the derivation tree for the class. For example, if class B is a subclass of A, and C is a subclass of B, then C could be denoted as A.B.C. This is termed child syntax.The Ada 95 code generator supports a Child Syntax property for classes. The value is False, by default. When this property is set to True for a class, the class name will be generated in its child syntax form. This not only includes how the name will appear in its defining specification and body file, but also how the class name will appear in all references and associations from other classes.Representing abstract classes and operationsYou can represent abstract classes and operations in ObjectTeam using the standard UML notation.The code generator interprets any class containing an abstract operation as an abstract class. An abstract operation is identified in Class Diagrams by the keyword {abstract} after the operation declaration. An abstract operation cannot be implemented by its declaring classname='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]'it must be implemented in a subclass.Abstract classes that are generated in Ada 95 code have the keyword abstract in their record types. Abstract operations have the keywords is abstract following the declaration of their return types. ID="38866"Mapping AttributesTranslating data attribute syntaxThe TERM1="Attributes of a class" TERM2="Ada mapping"attributes of a class map to components of the record type.TERM1="Ada record types" TERM2="attribute mapping" Class based attributes (those prefixed by a $) map to objects declared in the same package as the type.Use the following syntax to specify the TERM1="Data types" TERM2="attribute syntax"data type of an attribute of a class.TERM1="Classes" TERM2="data types for attributes"TERM1="Attributes" TERM2="data types in classes" FILENAME="00351.unk" ORIGFILE="pics/attsytx" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Specify a standard data type such as integer or the name of another class. The optional dollar sign specifies a class-based attribute.TERM1="Class-based attributes" TERM2="syntax"TERM1="Attributes" TERM2="class-based" That is, it applies to the entire class, not an instance of a class.Tip: [$] means the attribute may optionally be prefixed by a $, indicating the attribute is class-based.Ada 95 constructsThe code generator produces the following Ada 95 constructs for an attTERM1="Attribute properties" TERM2="Ada constructs"ribuTERM1="Properties" TERM2="Ada constructs"te baTERM1="Ada constructs" TERM2="attributes"sed on the value of its read/write access property.COLS="2"COLNAME="1" COLWIDTH="168p"COLNAME="2" COLWIDTH="277p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AdaCOLNAME="2" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Class record component" TERM2="attribute properties"class record componentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Private or public, depending on the Class Visibility property settingCOLNAME="1" VALIGN="TOP" MOREROWS="0"get member functionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Private or public depending on the Read/Write Access attribute setting. No function is generated if Read/Write is set to None.COLNAME="1" VALIGN="TOP" MOREROWS="0"set member functionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Private or public depending on the Read/Write Access attribute setting. No function is generated if Read/Write is set to None.Representing user-defined subtypesTo represent a user-defined subtypeTERM1="Classes" TERM2="user-defined subtypes"TERM1="User-defined subtypes" TERM2="representing in a class" in the Class Diagram, create a class with a single attribute whose data type is a standard Ada 95 type. The class must not contain: n Associations that generate code for the classn Operationsn Super classesThe attribute name is not important. However, you may want to insert additional text after the standard type. Select the class name in the left window of the Edit Properties dialog box, then add this text in the Subtype Text field.Defining non-standard typesTo have the Ada code generator include non-standard types and subtypes in a system's specification file, you must first define them. Do this in the system's user-defined types specification file named system_name_Types.ads. Once defined, you can include these non-standard types and subtypes in all other system specification files that reference them.System specification file format:-- Specification file for Sample_Types--OT Ignore--OT Analyzepackage Sample_Type is--OT Ignore--OT Analyze<non-standard types and subtype definitions of the system>--OT Ignore--OT Analyzeend Sample_Types;--OT Ignore--OT AnalyzeRepresenting a subtype in a class symbolThe example below shows how to represent a subtype in a Class Diagram using the following class symbol:FILENAME="00352.tif" ORIGSEQ="18" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Edit the properties for this class, then add the following entry in the Subtype Text field:TERM1="Class properties" TERM2="subtype text"TERM1="Subtype text" TERM2="class properties"Subtype text = (1..20)This generates the following Ada 95 code in the user section (after a --OT Analyze comment) of the user-defined typesTERM1="User-defined types file" TERM2="code for subtypes" file:subtype String20 is Character (1 . . 20);Defining enum typesTo define an enum type class,TERM1="Classes" TERM2="defining enum types" you must specify class-based attributesTERM1="Class-based attributes" TERM2="enum types"TERM1="Attributes" TERM2="defining enum type classes" (those specified with a $) of the type enum. Do not specify any associations that generate code for the typedef class,TERM1="Typedef class" TERM2="defining enum types" operations, subclasses, or superclasses.The following is an example of an enum class definitionTERM1="enum class" TERM2="example"FILENAME="00353.tif" ORIGSEQ="10" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada95.fm5.mif"The resulting code is generated in the system types specification:type EnumEx1 is (X,Y,Z);TERM1="Ada code examples" TERM2="enum type classes"Editing attribute propertiesThe value of an attribute's Read/Write Access property determines in which section of the specification file, private or public, the code TERM1="Package specification file" TERM2="get and set subprograms"generator TERM1="set procedure" TERM2="attribute properties"produces TERM1="Attributes" TERM2="properties, set procedure"the TERM1="Properties" TERM2="attributes, get function"get TERM1="get function" TERM2="attribute properties"and set subprograms.COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute access properties:COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"public accessCOLNAME="2" VALIGN="TOP" MOREROWS="0"private accessCOLNAME="1" VALIGN="TOP" MOREROWS="0"set setCOLNAME="2" VALIGN="TOP" MOREROWS="0"get setCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Public - Public (default)COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Private - PrivateCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Public - PrivateCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Private - NoneCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Public - NoneCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"None - NoneGet and set subprograms in Ada 95 packagesFor each attribute A of type T, the code generator creates these additional subprograms based on the attribute's read/write access. If set to None then no Get/Set sub-programs are generated.In the package specification file:TERM1="Package specification file" TERM2="get and set subprograms"TERM1="get and set subprograms" TERM2="specification file"TERM1="Ada code examples" TERM2="get and set in Ada packages"function Get_A(Self: Instance) return T;procedure Set_A(Self: in out Instance; New_A: T);In the package body file:TERM1="Package body files" TERM2="get and set subprograms"function Get_A(Self: Instance) return T isbeginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return Self.A;end Get_A;procedure Set_A(Self: in out Instance; New_A: T) isbeginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Self.A := New_A;end Set_A;Generating get and set subprograms for attribute propertiesThe following example shows how the code generator converts the attributes of a class into Ada 95 code.TERM1="Attributes of a class" TERM2="converted into Ada code" The value of an attribute's Read/Write Access property determines in which section of the package body and specification file the code generator produces the get and set subprograms.Standard TypeTERM1="Standard types" TERM2="get and set subprograms"TERM1="Class attributes" TERM2="Ada code example":FILENAME="00354.tif" ORIGSEQ="26" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Note: ConstructorsTERM1="Constructors" are not generated in Ada code. However, if you want to define a class with one attribute and no operations, you may add the $create() operation to denote that the class is not a typedef (subtype) class.TERM1="$create() operation"TERM1="Operations" TERM2="$create()" The code generator produces the Ada files but not a subtype statement. The $create() operation does not generate any code.Ada 95 SpecificationTERM1="Standard data types" TERM2="Ada specification"TERM1="Ada specification file" TERM2="get and set subprograms":package DataAttribEx isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Age: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Age (Self : Instance) return Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Set_Age (Self : Instance; New_Age: Integer);end DataAttribEx;ID="31gQn2d7nsem"Mapping OperationsIntroductionOperations of a an ObjectTeam class map to primitive subprograms of an Ada record type.TERM1="Operations" TERM2="Ada code mapping"Specifying operation syntaxUse the following syntax to specify the operations of a class. The optional dollar sign specifies a class-based operation.TERM1="Class-based operations" TERM2="representing in OMT" That is, it applies to the entire class rather than an instance of the class.FILENAME="00355.unk" ORIGFILE="pics/oprsytx.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Ada 95 constructs generated in specification and body filesTERM1="Ada constructs" TERM2="for operations":COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Ada 95 packageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Ada 95 constructCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"package specificationCOLNAME="2" VALIGN="TOP" MOREROWS="0"subprogram specificationCOLNAME="3" VALIGN="TOP" MOREROWS="0"private or public (based on access property setting)COLNAME="1" VALIGN="TOP" MOREROWS="0"package bodyCOLNAME="2" VALIGN="TOP" MOREROWS="0"empty bodyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Operations you can specify for a classListed below are examples of operations that you can specify for a classTERM1="Classes" TERM2="specifying operations for"TERM1="Operations" TERM2="in a class". The subprogram declarationsTERM1="Subprogram declarations" TERM2="for operations" the system generates for the operation (or method) are based on whether the operation property is public or private.TERM1="Properties" TERM2="setting for operations"Oper1(), simple operationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper1 (Self : Instance);Oper2():Integer, with standard return typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Oper2 (Self : Instance) return Integer;Oper3(I: Integer): Date, with one parameter and another class as the return typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Oper3 (Self : Instance; I : in Integer) return Date.Link;$Oper4():Integer, class-based operation with no parametersname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Oper4 return Integer;$Oper5(J:Integer):Integer, class-based operation with one parametername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Oper5 (J : in Integer) return Integer;Oper6(m:Integer), with one parameter type and no return typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper6 (Self : Instance; M : in Integer);Oper7(d:Date), with another class as the parametername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper7 (Self : Instance; D : in Date.Link);$Oper8(), class-based operation with no parametersname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper8;$Oper9(J:Integer), class-based operation with one parameter name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper9 (J : in Integer);$create(), indicates the class is not a typedef (subtype) class. name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'No code is generated.Editing operation propertiesUse theTERM1="Operation properties" TERM2="editing" Edit Properties dialog box to specify properties of operations. The Method Access property determines in which section of the package specification, visible or private, the code generator produces the subprogram. The values are TERM1="Methods" TERM2="operation properties"public (the default) or private. There are also properties that allow you to specify whether or not an operation is classwide, and to specify a Tcl procedure to automatically generate the subprogram body.FILENAME="00356.unk" ORIGFILE="pics/prop2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Classwide operationsIf an Ada 95 function returns a value that can be of any type derived directly or indirectly from a certain tagged type (i.e. any subclass of a given root class) it is called a classwide function. To support this, the Ada 95 code generator defines an operation property called Classwide, which can either be False (the default) or True. When the property is set to True, the return type for the function in the generated code will be a type defined as an access to the class of the tagged type. This access type is defined astype Class_Link is access all Instance'Classwhere the text "_Link" in the above type name is created from the M4 variable M4_Ada95_Class_Access_Type, and may be configured by the user. (See Chapter 8, Configuring the APDT Code Generators for infomation on M4 variables affecting code generation). For example, if in the Object_Class example at the start of this chapter, the Get_Object_Name() function's Classwide property is set to True (if for example, the String class had subclasses corresponding to valid types that the function could return), then the following declaration would be generated for Object_Class (assuming public visibility) :package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is new Ada.Finalization.Controlled withname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance; name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String.Class_Link;end Object_Class;package body Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String.Class_Link isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Get_Object_Name;end Object_Class;The Classwide property for an operation is only relevant if the operation defines a function, as opposed to a procedure, since it only affects the return type for the function.In addition, the property is only relevant if the type returned by the function maps to an Ada tagged type. See REFID="S1gQn1e4nsem" TYPE="XREF-TEXTCOPY"Mapping Inheritance for more information on the creation of Ada tagged types.Generating operation body contentsThe initial code generated for the body of an operation contains an empty subprogram body and the following comment:TERM1="Bodies of operations" TERM2="initial code generation"TERM1="Operations" TERM2="initial code for bodies"TERM1="Code generation" TERM2="initial body contents"- - !! Implement this subprogram !!You must fill the empty bodies with the appropriate Ada 95 declarations, statements, and commentsTERM1="Comment lines" TERM2="code bodies"TERM1="Ada code files" TERM2="editing operation bodies" between the User sections that appear throughout the generated code before compiling it. Otherwise, the compiler will report an error.Inserting code in the generated code filesYou can edit and insert your own code between the User sections of the specification file (indicated by the --OT Ignore and --OT Analyze comment lines) to fill in the bodies of operations. When you regenerate code, the code generator saves your code and inserts it in the appropriate section of the specification file.TERM1="Operations" TERM2="editing bodies"TERM1="Operation bodies" TERM2="editing specification files"TERM1="Specification files" TERM2="filling in user sections"TERM1="User sections" TERM2="editing specification files"Generate the body using a Tcl procedureTERM1="Code generation" TERM2="using Tcl to generate bodies"You can also create a Tool Command Language (Tcl) procedureTERM1="Tcl procedures" TERM2="for bodies of operations" to automatically generate the body of an operation.TERM1="Operation bodies" TERM2="generating automatically" This is often done when generating code for the first time. For example, you can specify a Tcl procedure for a general purpose function, such as printOn, to print all the data members of a class to standard output. You can use this type of function for any class. The contents of the function are the same for every class; only the class is different. Specify the procedure as a class attribute for an operation.Syntax for creating a Tcl procedureproc operation::<attrib value> { oper class sect } { }attrib valuename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure name and class attribute valueopername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'operation handleclassname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class handlesectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'section handleCreate the procedure in one of the following Tcl scripts:n u_genada95.tcl in the M4_home\modules\ada95\tcl directoryTERM1="Tcl scripts" TERM2="filling operation bodies"n Customize the file u_genada95.tcl at any level in the directory structureNote: You may need to create u_genada95.tcl by copying genada95.tcl. Editing properties for parametersIn Object Design, you can also define properties for parameters of operations. Choose Edit Properties from the Item menu on the Class Diagram menubar. Specify a value that must appear in the function declaration. Also set a Parameter ModeTERM1="Modes" TERM2="setting for operation parameters"TERM1="Parameter modes" TERM2="setting for operations" value of in, out, in out, or access. Classwide parametersIf an Ada 95 parameter represents a value that can be of any type derived directly or indirectly from a certain tagged type (i.e. any subclass of a given root class) it is called a classwide parameter. To support this, the Ada 95 code generator defines a parameter property called Classwide, which can either be False (the default) or True. When the Classwide property for a parameter is set to True, then the type for the parameter in the generated code will be a type defined as an access to the class of tagged type. This access type is defined astype Class_Link is access all Instance'Classwhere the text "_Link" in the above type name is created from the M4 variable M4_Ada95_Class_Access_Type, and may be configured by the user. (See Chapter 8, Configuring the APDT Code Generators for infomation on M4 variables affecting code generation). For example, suppose the following operation appears for a class on a CD diagram, and that parameter Shape is specified with the Classwide property set. The property might be set because the parameter can be a Triangle, Square, or Rectangle, all of which are subclasses of Polygon.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Fill(Shape: Polygon) In this case the corresponding Ada 95 code would be generated.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Fill (Self : Instance; Shape : in Polygon.Class_Link);The Classwide property for parameters is only relevant if the paramter type maps to an Ada tagged type. See REFID="S1gQn1e4nsem" TYPE="XREF-TEXTCOPY"Mapping Inheritance for more information on the creation of Ada tagged types.Specifying overloaded operationsYou can specify overloaded operators for operation names in classes in Class DiagramsTERM1="Operators" TERM2="overloading operations"TERM1="Class Association Diagrams" TERM2="overloading operations"TERM1="Classes" TERM2="overloaded operations". The following table lists the operators you can specify in a class and the corresponding Ada 95 operator generated in code.The following table shows the mapping of overloaded operators:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Operator specified in a classCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operator in Ada 95 codeCOLNAME="1" VALIGN="TOP" MOREROWS="0""and"COLNAME="2" VALIGN="TOP" MOREROWS="0""and"COLNAME="1" VALIGN="TOP" MOREROWS="0""or"COLNAME="2" VALIGN="TOP" MOREROWS="0""or"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""xor"COLNAME="2" VALIGN="TOP" MOREROWS="0""xor"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""abs"COLNAME="2" VALIGN="TOP" MOREROWS="0""abs"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""not"COLNAME="2" VALIGN="TOP" MOREROWS="0""not"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""mod"COLNAME="2" VALIGN="TOP" MOREROWS="0""mod"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""rem"COLNAME="2" VALIGN="TOP" MOREROWS="0""rem"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorEQCOLNAME="2" VALIGN="TOP" MOREROWS="0""="COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""< ", operator< COLNAME="2" VALIGN="TOP" MOREROWS="0""<"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorLECOLNAME="2" VALIGN="TOP" MOREROWS="0""<="COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""\>" , operator>COLNAME="2" VALIGN="TOP" MOREROWS="0""\>"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorGECOLNAME="2" VALIGN="TOP" MOREROWS="0""\>="COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""+" , operator+COLNAME="2" VALIGN="TOP" MOREROWS="0""+"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""-" , operator-COLNAME="2" VALIGN="TOP" MOREROWS="0""-"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""&"COLNAME="2" VALIGN="TOP" MOREROWS="0""&"ID="S1gQn1e4nsem"Mapping InheritanceIntroductionThe Ada 95 code generator supports inheritance by recognizing the root class of an inheritance hierarchy and generating for it a tagged record type in its own Ada package. Because the Ada 95 language supports inheritance, the tagged record type provides complete support for single inheritance. Multiple inheritance is not supported by the Ada 95 code generator.The code generator does not distinguish between overlapping and non-overlapping generalizations.Mapping single inheritanceThe diagram below shows how single inheritance is represented in ObjectTeam. The attribute Weight_Type in this example is not a standard Ada type. It was added to the customization file object's stand_types.stand_types file for this example.TERM1="Single inheritance" TERM2="representing in OMT"TERM1="Inheritance" TERM2="single"The following figure shows an example of single inheritance:FILENAME="00357.unk" ORIGFILE="pics/gener1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Ada code for single inheritanceTERM1=""In addition to the "Link" access type generated for all classes mapped to records, an additional access type "Class_Link" is generated that is declared as an access to the tagged record's class.Note that the names "Link" and "Class_Link" here are only defaults and may be customized by modifying the M4 variable M4_Ada95_Class_Access_Type_Name. See Chapter 8, Configuring the APDT Code Generators, for more information on M4 variables affecting code generation. The above diagram example produces the following Ada 95 code:TERM1="Single inheritance" TERM2="representing in OMT"TERM1="Inheritance" TERM2="single"with Sys_Types;package Component is type Instance is tagged record Weight : Weight_Type; end record; type Link is access all Instance; type Class_Link is access all Instance'Class; function My_Weight (Self : Instance) return Weight_Type;end Component;with Sys_Types;package Component.Receiver is type Instance is new Component.Instance with record Receiver_Attr : Integer; end record; type Link is access all Instance; type Class_Link is access all Instance'Class; procedure Initiate (Self : in out Instance);end Component.Receiver;with Sys_Types;package Component.Transmitter is type Instance is new Component.Instance with record Transmitter_Attr : Integer; end record; type Link is access all Instance; type Class_Link is access all Instance'Class; procedure Initiate (Self : in out Instance);end Component.Transmitter;package body Component is function My_Weight (Self : Instance) return Weight_Type is begin -- !! Implement this subprogram !! end My_Weight;end Component;package body Component.Receiver is procedure Initiate (Self : in out Instance) is begin -- !! Implement this subprogram !! end Initiate;end Component.Receiver;package body Component.Transmitter is procedure Initiate (Self : in out Instance) is begin -- !! Implement this subprogram !! end Initiate;end Component.Transmitter;Translating polymorphismAda 95 supports dynamic dispatching. Therefore, the Ada 95 code generator supports polymorphism by default. Unlike the Ada 83 code generator, the Ada 95 code generator does not have a Polymorphic M4 variable setting and, as a result, does not generate any additional Ada packages.ID="q1gQn144nsem"Mapping AssociationsIntroductionAn association in ObjectTeam maps to Ada 95 components in the record types for some or all of the related classes.TERM1="Access components" TERM2="when generated for classes"TERM1="Record types" TERM2="classes in associations"TERM1="Classes" TERM2="association mappings" The code generator creates a component for a given class involved in an association if a rolename is specified at the far end of the association.TERM1="Rolenames" TERM2="classes in associations"Association typesTERM1="Associations" TERM2="types that generate Ada code"The Ada 95 code generator generates code for the following types of associations:n Binary and qualified associations, including those specified with multiplicity and optionality.n Associations modeled as classes.If an association is modeled as a class, the system generates an additional Ada 95 package to implement the association.TERM1="Ada packages" TERM2="associations as classes"TERM1="Associations" TERM2="modeled as a class"Generic package specificationsTERM1="Ada packages" TERM2="generic"TERM1="Package specifications" TERM2="generic"The following generic packages generate code for associations. These packages can be found in the directory M4_home/modules/ada95/config/src and must be compiled and linked with the generated Ada95 code..TERM1="Ada environment" TERM2="generic packages, configuring"TERM1="Configuration" TERM2="generic packages"TERM1="Generic packages" TERM2="configuring for Ada" The first two packages are used in one-to-many and many-to-many associationsTERM1="one-to-many associations" TERM2="generic packages"TERM1="many-to-many associations" TERM2="generic packages". KeywordsTERM1="Generic packages" TERM2="keywords in"TERM1="Keywords" TERM2="in generic packages" are shown in italics. TheTERM1="type names" TERM2="in generic packages" type names Ordered_Set, Unordered_Set, and Dictionary must be unique to avoid possible conflicts.genericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Element is private;package Generic_Ordered_Set isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Ordered_Set is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Add (. . .);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Remove (. . .);end Generic_Ordered_Set;genericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Element is private;package Generic_Unordered_Set isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Unordered_Set is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Add (. . .);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Remove (. . .);end Generic_Unordered_Set;The package below is used in qualified associations.TERM1="Qualified associations" TERM2="generic package for" The keywords, shown in italic type, can be customized.TERM1="Keywords" TERM2="customizing"genericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Key is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Value is private;package Generic_Dictionary isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Dictionary is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Add (. . .);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Remove (. . .);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Find_Value (. . .) return Value;end Generic_Dictionary;Package specification conditionsThe following conditions apply to most of the package specifications in this section:TERM1="Package specifications" TERM2="conditions"n Only the code for the source class is shown because the destination class is not affected by a unidirectional association and because bidirectional associations are implemented as two unidirectional associations.TERM1="Source classes" TERM2="binary associations"TERM1="Destination classes" TERM2="binary associations"TERM1="Bidirectional associations" TERM2="how implemented"TERM1="Unidirectional associations" TERM2="in package specifications"n Text within brackets [ ] appears in either the specification or body file, depending on the class visibility property setting.TERM1="Text in brackets" TERM2="class visibility property setting" This includes with statements, which always appear in the specification files, and body in the first line of a package definition, which appears only in the body file.TERM1="with statements" TERM2="in package specifications"TERM1="Class visibility" TERM2="bracketed text in package specifications"TERM1="Body" TERM2="package body definition"n Association names are not used in code generation; role names are used as the name of the source class's record component for the association reference.TERM1="Association names" TERM2="in code generation"TERM1="Rolenames" TERM2="referencing associations"n In some cases, an association may generate one or two additional package specifications which serve as an intermediate package between the class and the generic package.TERM1="Package specifications" TERM2="intermediate"TERM1="Associations" TERM2="additional package specifications"The sections that follow describe the types of associations you can represent in ObjectTeam and the Ada code that is generated for each type. The example omits the Get and Set subprograms for simplicity.Below are examples of unidirectional and bidirectional associations as they are represented in ObjectTeam's Class Diagram Editor.Unidirectional associationTERM1="Unidirectional association" TERM2="representing in OMT"If an association has a role name at only one end, it is unidirectional.FILENAME="00358.unk" ORIGFILE="pics/assoc1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Below is the Ada 95 code generated for Source_Class in the unidirectional association. The code for Destination_Class is not affected.[with Destination_Class;]package [body] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'role1: Destination_Class.Link;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;Note that the source end of a unidirectional assoication uses the optional indicator (0..1). Bidirectional associationTERM1="Bidirectional associations" TERM2="example of circular dependency"A bidirectional association has role names on both ends of the association.The Ada code resulting from this bidirectional association example will not compile because Class1 and Class2 reference each other, causing a circular dependency.TERM1="Circular dependency" TERM2="correcting" You can correct this association by constructing a link class on the association. TERM1="Link attribute box" TERM2="associations"TERM1="Link class" TERM2="in associations"This technique is described in REFID="x3gQn310nsem" TYPE="XREF-TEXTCOPY"Mapping Associations as Classes.FILENAME="00359.unk" ORIGFILE="pics/assoc2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"FILENAME="00360.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Implementing optional associationsAn optional association is represented with the notation "0..1", as shown below for a unidirectional association..TERM1="Associations" TERM2="optional"TERM1="Optional associations" TERM2="defined" The Adaname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'95 code generated for this type of association is identical to the code for a normal association, except that it contains a comment above the association reference indicating the optionality of the association.FILENAME="00361.unk" ORIGFILE="pics/assoc3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Implementing multiplicity associationsTERM1="Associations" TERM2="multiplicity"TERM1="Multiplicity" TERM2="representing in OMT"Multiplicity is represented with a "*" at the end of the assoiciation. The diagram below represents a unidirectional multiple association.FILENAME="00362.unk" ORIGFILE="pics/assoc4.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"The code for Destination_Class is not affected.with Generic_Unordered_Set;with Destination_Class;package Destination_Class_Unordered_Set is newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Generic_Unordered_Set (Destination_Class.Link);[with Destination_Class_Unordered_Set;]package [ body ] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'rolename: Destination_Class_Unordered_Set.Unordered_Set;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;Implementing ordered associationsTERM1="Associations" TERM2="ordered"You can specify any multiplicity associationTERM1="Ordered associations" TERM2="representing in OMT"TERM1="Multiplicity" TERM2="and ordered association" as an ordered association in ObjectTeam by adding the text {ordered} to the the constraint field of the association. The example below specifies the multiplicity association, shown previously, as an ordered association.FILENAME="00363.unk" ORIGFILE="pics/assoc5.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"This example will generate the same Ada code for Source_Class as shown in the previous, non-ordered example, except that every instance of Unordered_SetTERM1="Unordered_Set" TERM2="Ada code results" is replaced with Ordered_Set.TERM1="Ordered_Set" TERM2="Ada code results"Implementing qualified associationsUse the qualified association symbol in the ObjectTeam Class Diagram editor to represent qualified associations.TERM1="Qualified associations" TERM2="representing in OMT"TERM1="Associations" TERM2="qualified"The source end of a qualified association must be optional ("0..1") with no rolename. The destination end must have a role name, and may be optional ("0..1"), mandatory ("1") , or many ("*").The property "Data Type" for the association must be set to a standard type or to a class type.Mandatoryl/optional qualified associationsTERM1="Associations" TERM2="normal/optional"The diagram below shows how to represent a mandatory source-end qualified association.For an optional association, the "1" on the destination end of the association would be "0..1". The same code would be generated, but a comment indicating that the association is optional would be added..FILENAME="00364.unk" ORIGFILE="pics/assoc6.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Ada code generated for Source_ClassTERM1=""The code example below assumes that the value of the "Data Type" property for the association is Data_Type.TERM1="Normal/Optional qualified associations" TERM2="example of"with Generic_Dictionary;with Destination_Class;package Destination_Class_Dictionary_By_Data_Type is new Generic_Dictionaryname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(Data_Type, Destination_Class.Link);with Destination_Class_Dictionary_By_Data_Type;package [ body ] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Role:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Destination_Class_Dictionary_By_Data_Type.Dictionary;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;Multiplicity qualified associationsThe diagram below shows how to represent a multiplicity qualified association.TERM1="Multiplicity" TERM2="qualified associations"TERM1="Qualified associations" TERM2="with multiplicity"FILENAME="00365.unk" ORIGFILE="pics/assoc7.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"with Generic_Unordered_Set;with Destination_Class;package Destination_Class_Unordered_Set is new Generic_Unordered_Set (Destination_Class.Link);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Generic_Dictionary (Data_Type, Destination_Class_Unordered_Set.Unordered_Set);[with Destination_Class_Unordered_Set_Dictionary_By_Data_Type;]package [body] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Role:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Destination_Class_Unordered_Set_Dictionary_By_Data_Type.Dictionary;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;If you had defined the multiplicity qualified association as an ordered association, the generated Ada 95 code would be similar to the normal qualified association, except that every instance of Unordered_Set would be replaced with Ordered_Set.ID="x3gQn310nsem"Mapping Associations as ClassesIntroductionThe Ada 95 code generator will translate and generate code for associations modeled as classes.TERM1="Associations as classes" TERM2="representing in OMT"TERM1="Classes" TERM2="association classes" The diagram below shows how an association modeled as a class is represented in ObjectTeam. The code generator ignores any association label,TERM1="Association labels" TERM2="associations as classes" if one exists, and instead, uses the name of the class itself to reference the association in code.FILENAME="00366.unk" ORIGFILE="pics/assoc8.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"Resulting Ada 95 codeThe Ada 95 code generated for an association as class includes an additional Ada Package for the association itself that captures the association class.TERM1="Ada packages" TERM2="link attribute associations"TERM1="Link attributes" TERM2="in Ada code" To avoid circular compilation dependencies between this class and the source and/or destination classes,TERM1="Source classes" TERM2="code for link attribute assocations"TERM1="Destination classes" TERM2="code for link attribute associations" the system generates an alternate package that only declares a link type.TERM1="Alternate packages" TERM2="link attribute associations"TERM1="Link type" TERM2="link attribute associations"The source and/or destination classes with this alternate package refer to the association class. The Ada 95 code for this class is automatically generated within its own file as shown in the next example, with the name Assoc_Class_Alt. The Alt string is user-customizable.Specification for Assoc_Classwith Sys_Types;with Assoc_Class_Alt;with Destination_Class;package Assoc_Class is type Instance is record Assoc_Attr : Integer; rolename : Destination_Class.Link; end record; type Link is access all Instance; function Conv (From : Assoc_Class_Alt.Link) return Link; function Conv (From : Link) return Assoc_Class_Alt.Link;end Assoc_Class;Specification for Assoc_Class_Altpackage Assoc_Class_Alt is type Link is private;private type Instance; type Link is access Instance; for Link'storage_size use 0;end Assoc_Class_Alt;Body for Assoc_Class_Altwith Assoc_Class;package body Assoc_Class_Alt is type Instance is new Assoc_Class.Instance;end Assoc_Class_Alt;Specification for Source_Classwith Sys_Types;with Assoc_Class_Alt;package Source_Class is type Instance is record rolename : Assoc_Class_Alt.Link; end record; type Link is access all Instance;end Source_Class;Mapping AggregationsID="ThJUm389rlb"IntroductionAn Aggregation is a relationship that exists when one object contains or is part of another object.TERM1="Aggregations" TERM2="defined" ObjectTeam represents aggregation with a diamond-shaped symbol at the source end of the aggregation, as shown below.TERM1="Aggregations" TERM2="representing in OMT"FILENAME="00367.unk" ORIGFILE="pics/aggre1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada95.fm5.mif"The Ada 95 code generated for an aggregation is the same as that generated for binary associations, except that it generates a comment above the reference to distinguish the aggregation from a binary association, Source_Class in this example.Ada code generated for aggregation relationsTERM1=""TERM1=""[with Destination_Class;]package [ body ] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- rolename is an aggregationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'rolename: Destination_Class.Link;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;Chapter 5 Mapping ID="39994"Modeling Data to Ada 83 CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitIntroductionThis chapter explains how particular parts of classes and class specifications result in particular parts of Ada 83 source code.The first section of the chapter explains some principles of the code generation process. The next six sections describe the relationship between class specifications and the generated code. The final section describes generating code for special classes, which follows a different pattern.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25925" TYPE="XREF-TEXTCOPY"Mapping Attributes 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37186" TYPE="XREF-TEXTCOPY"Mapping Operations 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41603" TYPE="XREF-TEXTCOPY"Mapping Inheritance 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19454" TYPE="XREF-TEXTCOPY"Mapping Associations 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37770" TYPE="XREF-TEXTCOPY"Mapping Associations as Classes 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14110" TYPE="XREF-TEXTCOPY"Mapping Aggregations 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'28TYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitIntroductionTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation and Reverse-Engineering Guide for Ada 83/95TERM1="class" TERM2="in non-persistent code generation"Mapping Non-Persistent Classes into Ada 83 CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitWhile in TERM1=""Object Design,TERM1="" you prepare the Class Diagrams for code generation by adding details that define how classes and their characteristics will be implemented in code. The Ada 83 code generator produces code only from Class Diagrams.Some implementation detailsTERM1="" may reside in other diagrams such as the TERM1=""Collaboration Diagram and TERM1=""State Transition Diagram. Refer to these diagrams to uncover any additional classes that you may need to add to the Class Diagrams for implementation purposes. Also look for additional attributes, operations, and associations and add these to the Class Diagrams. You might also look for ways to simplify complex associations. The code generator interprets the implementation details in Class Diagrams and translates them into Ada 83 constructs in the resulting code files.Note: Ada 83 code is generated only for non-persistent classes.TERM1="" Translating classes into Ada codeAn ObjectTeam classTERM1="" maps to an Ada record type declared in its own Ada package. A class must have at least one attribute or one operation to generate code. TERM1=""You create classes in Class Diagrams using the Class Diagram editor. You specify attributes and operations for a class by entering themTERM1="" inside the class symbol on the diagram.TERM1=""Example of a class with one attribute and one operation:FILENAME="00368.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Class characteristics generate equivalent Ada 83 constructsObjectTeam produces the equivalent Ada 95 constructs for each of the following characteristics of a class:TERM1=""TERM1=""n Attributes of a classn Operations of a classn Relationships with other classesn Inheritance of the classEditing class propertiesYou can edit the properties of a class, its attributes, operations, parameters, and data types in the Object Design phase. You do this by selecting the class symbol then by choosing Edit PropertiesTERM1=""TERM1="" from the Item menu on the Class Diagram editor's menubar.The TERM1=""properties you establish for a class and its characteristics determine the code that is generated for the class. Some properties may generate something other than a class in the resulting code, such as a new type.Class visibility controls read/write access The Class visibilityTERM1=""TERM1="" property establishes read/write accessTERM1="" to the record type of the class.TERM1="". The record types are Public (the default), Private, Limited, or Opaque. Record and access type namesBy default, the Ada83 code generator produces a record type named "Instance" and an access type named "Link" for each ObjectTeam Class.You can customize the name used for the record type by modifying the M4 variable M4_Ada83_Class_Record_Type_Name. Simularly, you can customize the name used for the access type by modifying the variable M4_Ada83_Class_Access_Type_Name. You must do so, however, before generating code.TERM1=""TERM1=""TERM1=""TERM1=""TERM1=""See Chapter 8, Configuring the APDT Code Generators for information on M4 variables affecting code generation. See the ObjectTeam Customization Guide for information on how to modify M4 variables.Note: If a class does not require an access typeTERM1=""TERM1="", you can include the following length clause in the appropriate user section of the package specification so that it does not reserve storage for the collection associated with the access type:TERM1="" for Link'storage_size use 0;Below are examples of the Ada code that is generated for each record type:TERM1=""Code generated for classes with public record typesTERM1=""TERM1=""package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance; name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;end Object_Class;package body Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Get_Object_Name;end Object_Class;Code generated for classes with private record typesTERM1=""TERM1=""package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance; name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Object_Class;Note: (Package body is the same as Public's)Code generated for classes with limited record typesTERM1=""TERM1=""package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is limited private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance; name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Object_Class;Note: (Package body is same as Public's)Code generated for classes with opaque record typesTERM1=""TERM1=""package Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is limited private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Link is access Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String;privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Data;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is access Data;end Object_Class;package body Object_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Data is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Object_Id: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Object_Name (Self: Instance) return String isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Get_Object_Name;end Object_Class;ID="25925"Mapping AttributesTranslating data attribute syntaxThe TERM1=""attributes of a class map to components of the record type.TERM1="" Class based attributes (those prefixed by a $) map to objects declared in the same package as the type.Use the following syntax to specify the TERM1=""data type of an attribute of a class.TERM1=""TERM1="" FILENAME="00369.unk" ORIGFILE="pics/attsytx" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Specify a standard data type such as integer or the name of another class. The optional dollar sign specifies a class-based attribute.TERM1=""TERM1="" That is, it applies to the entire class, not an instance of a class.Tip: [$] means the attribute may optionally be prefixed by a $, indicating the attribute is class-based.Ada 83 constructsThe code generator produces the following Ada 83 constructs for an TERM1=""attribute TERM1=""based TERM1=""on the value of its read/write access property.COLS="2"COLNAME="1" COLWIDTH="175p"COLNAME="2" COLWIDTH="271p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AdaCOLNAME="2" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1=""class record componentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Private or public, depending on the Class Visibility property setting. COLNAME="1" VALIGN="TOP" MOREROWS="0"get member functionTERM1=""COLNAME="2" VALIGN="TOP" MOREROWS="0"Private or public depending on the Read/Write Access attribute setting. No function is generated if Read/Write is set to None.COLNAME="1" VALIGN="TOP" MOREROWS="0"set member functionTERM1=""COLNAME="2" VALIGN="TOP" MOREROWS="0"Private or public depending on the Read/Write Access attribute setting. No function is generated if Read/Write is set to None.Representing user-defined subtypesTo represent a user-defined subtypeTERM1=""TERM1="" in the Class Diagram, create a class with a single attribute whose data type is a standard Ada 83 type. The class must not contain: n Associations that generate code for the classn Operationsn Super classesThe attribute name is not important. However, you may want to insert additional text after the standard type. Select the class name in the left window of the Edit Properties dialog box, then add the additional text in the Subtype Text field.Defining non-standard typesTo have the Ada code generator include non-standard types and subtypes in a system's specification file, you must first define them. Do this in the system's user-define types specification file named system_name_Types.ads. Once defined, you can include these non-standard types and subtypes in all other system specification files that reference them.System specification file format:-- Specification file for Sample_Types--OT User+--OT User-package Sample_Type is--OT User+--OT User-<non-standard types and subtype definitions of the system>--OT User---OT User+end Sample_Types;--OT User+--OT User-Representing a subtype in a class symbolThe example below shows how to represent a subtype in a Class Diagram using the following class symbol:FILENAME="00370.tif" ORIGSEQ="4" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Edit the properties for this class and add the following entry in the Subtype Text field:TERM1=""TERM1=""Subtype text = (1..20)This generates the following Ada 83 code in the user section (after an --OT User - comment) of the user-defined typesTERM1="" file:subtype String20 is Character (1 . . 20);Defining enum typesTo define an enum type class,TERM1="" you must specify class-based attributesTERM1=""TERM1="" (those specified with a $) of the type enum. Do not specify any associations that generate code for the typedef class,TERM1="" operations, subclasses, or superclasses.The following is an example of an enum class definitionTERM1="enum class" TERM2="example"FILENAME="00371.tif" ORIGSEQ="12" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada83.fm5.mif"The resulting code is generated in the system types specification:type EnumEx1 is (X,Y,Z);TERM1=""Editing attribute propertiesThe value of an attribute's Read/Write Access property determines in which section of the specification file, private or public, the code TERM1=""generator TERM1=""produces the TERM1=""get TERM1=""and TERM1=""set subprograms.COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute access properties:COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"public accessCOLNAME="2" VALIGN="TOP" MOREROWS="0"private accessCOLNAME="1" VALIGN="TOP" MOREROWS="0"set setCOLNAME="2" VALIGN="TOP" MOREROWS="0"get setCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Public - Public (default)COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Private - PrivateCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Public - PrivateCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Private - NoneCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Public - NoneCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"None - NoneGet and set subprograms in Ada 83 packagesFor each attribute A of type T, the code generator creates these additional subprograms based on the attribute's read/write access. If set to None then no Get/Set sub-programs are generated.In the package specification file:TERM1=""TERM1=""TERM1=""function Get_A(Self: Instance) return T;procedure Set_A(Self: in out Instance; New_A: T);In the package body file:TERM1=""function Get_A(Self: Instance) return T isbeginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return Self.A;end Get_A;procedure Set_A(Self: in out Instance; New_A: T) isbeginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Self.A := New_A;end Set_A;Generating get and set subprograms for attribute propertiesThe following example shows how the code generator converts the attributes of a class into Ada 83 code.TERM1="" The value of an attribute's Read/Write Access property determines in which section of the package body and specification file the code generator produces the get and set subprograms.Standard TypeTERM1=""TERM1=""FILENAME="00372.tif" ORIGSEQ="14" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Note: ConstructorsTERM1="" are not generated in Ada code. However, if you want to define a class with one attribute and no operations, you may add the $create() operation to denote that the class is not a typedef (subtype) class.TERM1=""TERM1="" The code generator produces the Ada files but not a subtype statement. The $create() operation does not generate any code.Ada 95 SpecificationTERM1="Standard data types" TERM2="Ada specification"TERM1="Ada specification file" TERM2="get and set subprograms":package DataAttribEx isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Age: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Get_Age (Self : Instance) return Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Set_Age (Self : Instance; New_Age: Integer);end DataAttribEx;ID="37186"Mapping OperationsIntroductionOperations of an ObjectTeam class map to primitive subprograms of an Ada record type.TERM1=""Specifying operation syntaxTERM1=""Use TERM1=""the following syntax to specify the operations of a class. The optional dollar sign specifies a class-based operation.TERM1="" That is, it applies to the entire class rather than an instance of the class.FILENAME="00373.unk" ORIGFILE="pics/oprsytx.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Ada 83 constructs generated in specification and body filesTERM1="Ada constructs" TERM2="for operations":COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Ada 95 packageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Ada 95 constructCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"package specificationCOLNAME="2" VALIGN="TOP" MOREROWS="0"subprogram specificationCOLNAME="3" VALIGN="TOP" MOREROWS="0"private or public (based on access property setting)COLNAME="1" VALIGN="TOP" MOREROWS="0"package bodyCOLNAME="2" VALIGN="TOP" MOREROWS="0"empty bodyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Operations you can specify for a classListed below are examples of operations that you can specify for a classTERM1=""TERM1="". The subprogram declarationsTERM1="" the system generates for the operation (or method) are based on whether the operation property is public or private.TERM1=""Oper1(), simple operationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper1 (Self : in out Instance);Oper2():Integer, with standard return typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Oper2 (Self : Instance) return Integer;Oper3(I: Integer):Date, with one parameter and another class as the return typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Oper3 (Self : Instance; I : in Integer) return Date.Link;$Oper4():Integer, class-based operation with no parametersname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Oper4 return Integer;$Oper5(J:Integer):Integer, class-based operation with one parametername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Oper5 (J : in Integer) return Integer;Oper6(m:Integer), with one parameter type and no return typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper6 (Self : in out Instance; M : in Integer);Oper7(d:Date), with another class as the parametername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper7 (Self : in out Instance; D : in Date.Link);$Oper8(), class-based operation with no parametersname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper8;$Oper9(J:Integer), class-based operation with one parameter name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Oper9 (J : in Integer);$create(), indicates the class is not a typedef (subtype) class. name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'No code is generated.Editing operation propertiesUse theTERM1="" Edit Properties dialog box to specify properties of operations. The Method Access property determines in which section of the package specification, visible or private, the code generator produces the subprogram. The values are TERM1=""public (the default) or private, or none. You can also specify a Tcl procedure to automatically generate the subprogram body.FILENAME="00374.unk" ORIGFILE="pics/prop1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Generating operation body contentsThe initial code generated for the body of an operation contains an empty subprogram body and the following comment:TERM1=""TERM1=""TERM1=""- - !! Implement this subprogram !!You must fill the empty bodies with the appropriate Ada declarations, statements, and commentsTERM1=""TERM1="" between the User sections that appear throughout the generated code before compiling it. Otherwise, the compiler will report an error.Manually fill in the user sections of the codeYou can manually edit the code files and insert comments and additional code between the User sections (represented as --OT User+ and --OT User-). When you regenerate, the code generator saves and inserts your text in the appropriate section of the specification file.TERM1=""TERM1=""TERM1=""TERM1=""Generate the body using a Tcl procedureTERM1=""You can also create a Tool Command Language (Tcl) procedureTERM1="" to automatically generate the body of an operation.TERM1="" This is often done when generating code for the first time. For example, you can specify a Tcl procedure for a general purpose function, such as printOn, to print all the data members of a class to standard output. You can use this type of function for any class. The contents of the function are the same for every class; only the class is different. Specify the procedure as a class attribute for an operation.Syntax for creating a Tcl procedureproc operation::<attrib value> { oper class sect } { }attrib valuename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure name and class attribute valueopername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'operation handleclassname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class handlesectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'section handleCreate the procedure in one of the following Tcl scripts:n u_genada83.tcl in the M4_home\modules\ada83\tcl directoryTERM1=""n Customize the file u_genada83.tcl at any level in the directory structureNote: You may need to create u_genada83.tcl by copying genada83.tcl. Editing properties for parametersIn Object Design, you can also set properties for parameters of operations. Choose Edit Properties from the Item menu on the Class Diagram menubar. Specify a value that must appear in the function declaration. Also, set a Parameter ModeTERM1=""TERM1="" value of in, out, or in out. Specifying overloaded operationsYou can specify overloaded operators for operation names in classes in Class Diagrams.TERM1=""TERM1=""TERM1="" The following table lists the operators you can specify in a class and the corresponding Ada 83 operator generated in code.The following table shoes the mapping of overloaded operators:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Operator Specified In A ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operator In Ada 95 CodeCOLNAME="1" VALIGN="TOP" MOREROWS="0""and"COLNAME="2" VALIGN="TOP" MOREROWS="0""and"COLNAME="1" VALIGN="TOP" MOREROWS="0""or"COLNAME="2" VALIGN="TOP" MOREROWS="0""or"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""xor"COLNAME="2" VALIGN="TOP" MOREROWS="0""xor"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""abs"COLNAME="2" VALIGN="TOP" MOREROWS="0""abs"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""not"COLNAME="2" VALIGN="TOP" MOREROWS="0""not"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""mod"COLNAME="2" VALIGN="TOP" MOREROWS="0""mod"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""rem"COLNAME="2" VALIGN="TOP" MOREROWS="0""rem"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorEQCOLNAME="2" VALIGN="TOP" MOREROWS="0""="COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""< ", operator< COLNAME="2" VALIGN="TOP" MOREROWS="0""<"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorLECOLNAME="2" VALIGN="TOP" MOREROWS="0""<="COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""\>" , operator>COLNAME="2" VALIGN="TOP" MOREROWS="0""\>"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorGECOLNAME="2" VALIGN="TOP" MOREROWS="0""\>="COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""+" , operator+COLNAME="2" VALIGN="TOP" MOREROWS="0""+"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""-" , operator-COLNAME="2" VALIGN="TOP" MOREROWS="0""-"COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0""&"COLNAME="2" VALIGN="TOP" MOREROWS="0""&"ID="41603"Mapping InheritanceIntroductionThe Ada83 code generator supports inheritance by mapping a child class to a record which has the parent as a component.Multiple inheritance is supported in the same manner.The code generator does not distinguish between overlapping and non-overlapping generalizations.Editing inheritance access propertiesYou can set the inheritance accessTERM1="" property of a subclass TERM1=""to control access to the attribute record and operationsTERM1=""TERM1="" of the base class.TERM1=""TERM1="" Select the triangle portion of the inheritance notation symbol and choose Edit Properties from the Item menu on the Class Diagram menubar.Note: TERM1=""Superclasses are also referred to as TERM1=""base classes, and subclasses are referred to as TERM1=""derived classes.Mapping single inheritanceThe diagram below shows how ObjectTeam represents single inheritance. Because the attribute type Weight_Type is not a standard Ada type, it was added to the customization file object's stand_types.stand_types file for this example.TERM1=""TERM1=""FILENAME="00375.unk" ORIGFILE="pics/gener1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"As a result of setting the Attribute Access property of the base class (Component) to Public, the Ada body and specification files include its attribute record and the operations for the subclass definitions Receiver and Transmitter. This example omits the Get and Set subprograms for simplicity.Ada code for single inheritanceTERM1=""package Component isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Weight: Weight_Type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type;end Component;with Component;package Receiver isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Component_Inh: Component.Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Receiver_Attr: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Initiate (Self: Instance);end Receiver;with Component;package Transmitter isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Component_Inh: Component.Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Transmitter_Attr: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Initiate (Self: Instance);end Transmitter;package body Component isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end My_Weight;end Component;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'package body Receiver isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return Component.My_Weight (Self.Component_Inh);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end My_Weight;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Initiate (Self: Instance) isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Initiate;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Receiver;package body Transmitter isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return Component.My_Weight (Self.Component_Inh);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end My_Weight;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Initiate (Self: Instance) isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Initiate;end Transmitter;Mapping multiple inheritanceMultiple inheritanceTERM1="" occurs when a class inherits propertiesTERM1="" from two or more superclasses.TERM1=""TERM1="" The diagram below shows an example of how multiple inheritance is represented in ObjectTeam. FILENAME="00376.unk" ORIGFILE="pics/gener2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"The Ada code generated from the Receiver and Transmitter classes in this example is identical to that shown in the previous single inheritance example, with the following exception.The Ada code generator cannot automatically determine from which superclass to generate the My_Weight() functionTERM1="" and initiateTERM1="" procedures for the inheriting class, Receiver_Transmitter. Therefore, it generates these procedures from both the Receiver and Transmitter superclasses in the resulting code file. You choose which function and initiate procedure you want by editing the file and removing the comment delimiters from those entries.TERM1=""Ada code for multiple inheritanceTERM1=""with Receiver;with Transmitter;package Receiver_Transmitter isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Receiver_Inh: Receiver.Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Transmitter_Inh: Transmitter.Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Receive_Trans_Attr: Integer;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Initiate (Self: Instance);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Select_Function (Self: Instance) return Integer;end Receiver_Transmitter;package body Receiver_Transmitter isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- return Receiver.My_Weight (Self.Receiver_Inh);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- return Transmitter.My_Weight (Self.Transmitter_Inh);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end My_Weight;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Initiate (Self: Instance) isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Receiver.Initiate (Self.Receiver_Inh);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Transmitter.Initiate (Self.Transmitter_Inh);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end initiate;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Select_Function (Self: Instance) return Integer isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'- - !! Implement this subprogram !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Select_Function;end Receiver_Transmitter;Mapping polymorphismThe code generator produces the following additional Ada package for polymorphicTERM1=""TERM1="" classes when you enable the polymorphism M4 configuration variable. Enabling the polymorphism M4 variable would generate the package for the single inheritance diagram shown previously. See Chapter 2, Preparing ObjectTeam for use with the APDT, for information about modifying the M4 variables.Ada code for polymorphic classesTERM1=""with Component;with Receiver;with Transmitter;package Any_Component isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Kind is (A_Component, A_Receiver, A_Transmitter);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance (Component_Kind: Kind := A_Component) is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'case Component_Kind isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Component =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Component_Obj: Component.Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Receiver =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Receiver_Obj: Receiver.Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Transmitter =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Transmitter_Obj: Transmitter.Instance;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end case;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Initiate (Self: Instance);end Any_Component;package body Any_Component isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function My_Weight (Self: Instance) return Weight_Type isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'case Self.Component_Kind isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Component =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return Component.My_Weight (Self.Component_Obj);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Receiver =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return Receiver.My_Weight (Self.Receiver_Obj);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Transmitter =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return Transmitter.My_Weight (Self.Transmitter_Obj);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end case;end My_Weight;procedure Initiate (Self: Instance) isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'case Self.Component_Kind isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Component =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'raise Constraint_Error;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Receiver =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Receiver.Initiate (Self.Receiver_Obj);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'when A_Transmitter =>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Transmitter.Initiate (Self.Transmitter_Obj);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end case;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end Initiate;end Any_Component;ID="19454"Mapping AssociationsIntroductionAn association in ObjectTeam maps to Ada access components in the record types for some or all of the related classes.TERM1=""TERM1=""TERM1="" The code generator creates an access component for a class in an association if a rolename is specified at the far end of the associationTERM1=""Association typesTERM1=""The Ada 83 code generator produces code for the following types of associations:n Binary and qualified associations, including those specified with multiplicity and optionalityn Associations with link attributesn Associations modeled as classesIf an association link attribute is modeled as a class, the system generates an additional Ada 83 package to implement the association.TERM1=""TERM1=""Generic package specificationsTERM1=""TERM1=""The following generic packages generate code for associations. These packages can be found in the directory M4_home/modules/ada83/config/src and must be compiled and linked with the generated Ada83 code..TERM1=""TERM1=""TERM1="" The first two packages are used in one-to-many and many-to-many associations. KeywordsTERM1=""TERM1="" are shown in italics. TheTERM1="" type names Ordered_Set, Unordered_Set, and Dictionary must be unique to avoid possible conflicts.genericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Element is private;package Generic_Ordered_Set isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Ordered_Set is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Add (. . .);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Remove (. . .);end Generic_Ordered_Set;genericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Element is private;package Generic_Unordered_Set isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Unordered_Set is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Add (. . .);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Remove (. . .);end Generic_Unordered_Set;The package below is used in qualified associations.TERM1="" The keywords, shown in italic type, can be customized.TERM1=""genericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Key is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Value is private;package Generic_Dictionary isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Dictionary is private;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Add (. . .);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure Remove (. . .);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'function Find_Value (. . .) return Value;end Generic_Dictionary;Package specification conditionsThe following conditions apply to most of the package specifications in this section:TERM1=""n Only the code for the source class is shown because the destination class is not affected by a unidirectional association and because bidirectional associations are implemented as two unidirectional associations.TERM1=""TERM1=""TERM1=""TERM1=""n Text within brackets [ ] appears in either the specification or body file, depending on the class visibility property setting.TERM1="" This includes with statements, which always appear in the specification files, and body in the first line of a package definition, which appears only in the body file.TERM1=""TERM1=""TERM1=""n Association names are not used in code generation; role names are used as the name of the source class's record component for the association reference.TERM1=""TERM1=""n In some cases, an association may generate one or two additional package specifications which serve as an intermediate package between the class and the generic package.TERM1=""TERM1=""The sections that follow describe the types of associations you can represent in ObjectTeam and the Ada code that is generated for each type. The examples omit the Get and Set subprograms for simplicity.Below are examples of unidirectional and bidirectional associations as they are represented in ObjectTeam's Class Diagram Editor.Unidirectional associationTERM1=""If an association has a role name at only one end, it is unidirectional.FILENAME="00377.unk" ORIGFILE="pics/assoc1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Below is the Ada 83 code generated for Source_Class in the unidirectional association. The code for Destination_Class is not affected.[with Destination_Class;]package [body] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'role1: Destination_Class.Link;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;Bidirectional associationTERM1=""A bidirectional association has role names on both ends of the association.The Ada code resulting from this bidirectional association example will not compile because Class1 and Class2 reference each other, causing a circular dependency.TERM1="Circular dependency" TERM2="correcting" You can correct this association by constructing a link attribute box or a link class on the association. TERM1="Link attribute box" TERM2="associations"TERM1="Link class" TERM2="in associations"This technique is described in REFID="37770" TYPE="XREF-TEXTCOPY"Mapping Associations as Classes.FILENAME="00378.unk" ORIGFILE="pics/assoc2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"FILENAME="00379.tif" ORIGSEQ="21" ORIGTYPE="I" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Implementing optional associationsAn optional association is represented with the notaion "0..1", as shown below for a unidirectional association.TERM1=""TERM1="" The Adaname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'83 code generated for this type of association is identical to the code for a normal association, except that it contains a comment above the association reference indicating the optionality of the association.FILENAME="00380.unk" ORIGFILE="pics/assoc3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Implementing multiplicity associationsTERM1=""TERM1=""Multiplicity is represented with a "*" at the end of the association. The diagram below represents a unidirectional association.FILENAME="00381.unk" ORIGFILE="pics/assoc4.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"The code for Destination_Class is not affected.Ada code generated for Source_ClassTERM1="" with Generic_Unordered_Set;with Destination_Class;package Destination_Class_Unordered_Set is newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Generic_Unordered_Set (Destination_Class.Link);[with Destination_Class_Unordered_Set;]package [ body ] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'rolename: Destination_Class_Unordered_Set.Unordered_Set;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;Implementing ordered associationsTERM1=""You can specify any multiplicity associationTERM1=""TERM1="" as an ordered association in ObjectTeam by adding the text {ordered} to the the constraint field of the association. The example below specifies the multiplicity association, shown previously, as an ordered association.FILENAME="00382.unk" ORIGFILE="pics/assoc5.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"This example will generate the same Ada code for Source_Class as shown in the previous, non-ordered example, except that every instance of Unordered_SetTERM1="" is replaced with Ordered_Set.TERM1=""Implementing qualified associationsUse the qualified association symbol in the ObjectTeam Class Diagram editor to represent qualified associations.TERM1=""TERM1=""The source end of a qualified association must be optional ("0..1") with no rolename. The destination end must have a role name, and may be optional ("0..1"), mandatory ("1"), or many ("*").The property "Data Type" for the association must be set to a standard type or to a class type.Normal/optional qualified associationsTERM1=""The diagram below shows how to represent a normal/optional source-end qualified association.FILENAME="00383.unk" ORIGFILE="pics/assoc6.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Ada code generated for Source_ClassTERM1=""The code example below assumes that the value of the "Data Type" property for the association is Data_Type.TERM1=""with Generic_Dictionary;with Destination_Class;package Destination_Class_Dictionary_By_Data_Type is new name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Generic_Dictionary (Data_Type, Destination_Class.Link);with Destination_Class_Dictionary_By_Data_Type;package [ body ] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Role:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Destination_Class_Dictionary_By_Data_Type.Dictionary;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;Multiplicity qualified associationsThe diagram below shows how to represent a multiplicity qualified association.TERM1=""TERM1="" FILENAME="00384.unk" ORIGFILE="pics/assoc7.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Ada code generated for a qualified associationwith Generic_Unordered_Set;with Destination_Class;package Destination_Class_Unordered_Set is new Generic_Unordered_Set (Destination_Class.Link);with Generic_Dictionary;with Destination_Class_Unordered_Set;package Destination_Class_Unordered_Set_Dictionary_By_Data_Type is newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Generic_Dictionary (Data_Type, Destination_Class_Unordered_Set.Unordered_Set);[with Destination_Class_Unordered_Set_Dictionary_By_Data_Type;]package [body] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'rolename:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Destination_Class_Unordered_Set_Dictionary_By_Data_Type.Dictionary;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;If you had defined the multiplicity qualified association as an ordered association, the generated Ada 83 code would be similar to the normal qualified association, except that every instance of Unordered_Set would be replaced with Ordered_Set.REFID="37770" TYPE="XREF-TEXTCOPY"Mapping Associations as Classes).ID="37770"Mapping Associations as ClassesIntroductionThe Ada 83 code generator will translate and generate code for associations modeled as classes.TERM1=""TERM1="" The diagram below shows how an association modeled as a class is represented in ObjectTeam. The code generator ignores any association label,TERM1="" if one exists, and instead, uses the name of the class itself to reference the association in code.FILENAME="00385.unk" ORIGFILE="pics/assoc8.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"Resulting Ada 83 codeThe Ada 83 code generated for an association as class includes an additional Ada Package for the association itself that captures the association class. To avoid circular compilation dependencies between this class and the source and/or destination classes, the system generates an alternate package that only declares a link type.The source and/or destination classes with this alternate package refer to the association class. The Ada 83 code for this class is automatically generated within its own file as show in the next example, with the name Assoc_Class_Alt. The Alt string is customizable.Specification for Assoc_Classwith Sys_Types;with Assoc_Class_Alt;with Destination_Class;package Assoc_Class is type Instance is record Assoc_Attr : Integer; rolename : Destination_Class.Link; end record; type Link is access all Instance; function Conv (From : Assoc_Class_Alt.Link) return Link; function Conv (From : Link) return Assoc_Class_Alt.Link;end Assoc_Class;Specifiation for Assoc_Class_Altpackage Assoc_Class_Alt is type Link is private;private type Instance; type Link is access Instance; for Link'storage_size use 0;end Assoc_Class_Alt;Body for Assoc_Class_Altwith Assoc_Class;package body Assoc_Class_Alt is type Instance is new Assoc_Class.Instance;end Assoc_Class_Alt;Specification for Source_Classwith Sys_Types;with Assoc_Class_Alt;package Source_Class is type Instance is record rolename : Assoc_Class_Alt.Link; end record; type Link is access all Instance;end Source_Class;ID="14110"Mapping AggregationsIntroductionAn Aggregation is a relationship that exists when one object contains or is part of another object.TERM1="" ObjectTeam represents aggregation with a diamond-shaped symbol at the source end of the aggregation, as shown below.TERM1=""FILENAME="00386.unk" ORIGFILE="pics/aggre1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/mapada83.fm5.mif"The Ada 83 code generated for an aggregation is the same as that generated for binary associations, except that it generates a comment above the reference to distinguish the aggregation from a binary association, Source_Class in this example.Ada code generated for aggregation relationsTERM1=""TERM1=""[with Destination_Class;]package [ body ] Source_Class isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'type Instance is recordname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- rolename is an aggregationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'rolename: Destination_Class.Link;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'end record;end Source_Class;Chapter 6 Synchronized ID="28849"EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitIntroductionThis chapter explains how to use the APDT for incremental development and synchronized engineering.Incremental development refers to the ability to make constant improvement or adaptation of design or code.Synchronized Engineering is the process of keeping code and design consistent, without losing information added while in one portion or the other.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33533" TYPE="XREF-TEXTCOPY"Introduction 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22789" TYPE="XREF-TEXTCOPY"Editing Code or Design 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17793" TYPE="XREF-TEXTCOPY"Synchronizing Design to Code Changes 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31942" TYPE="XREF-TEXTCOPY"Synchronizing Code to Design Changes (Code Regeneration) 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="33533"TYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitIntroductionPurpose of Synchronized EngineeringThe purpose of Synchronized Engineering is to keep your implementation and your design in synch with one another. As design changes are made, they can be rippled down through the implementation - without breaking the implementation, or if some code is made obsolete then it is identified and stored in a safe place. Simiarly, as code changes, areas mapping back to design are captured back into the appropriate CD or CDM in the ObjectTeam repository.Quick Start - Adapting Code Changes into the ObjectTeam modelIf you just wish to try Synchronized Engineering, but not pore over the manual here are the steps for synchronizing changes made to code into the ObjectTeam model:Note: Only perform this function with source code that ObjectTeam generated originally.1 In the Browser Navigation area, open a System in the Implementation phase.2 Select Edit | Select All.3 Select Utilities | Round Trip Selected.An Execution window appears.4 Answer any questions that are diaplyed in the Execution window. No changes are committed unless you specify them explicitly.This maps code back into your design. You may now continue on with further design or coding changes.Quick Start - Regenerating Code to match the ObjectTeam modelTERM1="code re-generation" TERM2="quick start"Code Regeneration refers to synchronizing the implementation source code with changes made in the ObjectTeam design model. Here are the "quick" steps for doing this:Note: Only perform this function with source code that ObjectTeam generated originally.1 In the Browser Navigation area, open the Implementation phase and select the System you wish to regenerate.2 In the Information area, select the source files you wish to update, or leave none selected if you expect to do all.3 Select Utilities | Generate Ada* | New to regenerate all changes made in the object design, or select Utilities | Generate Ada* | Selected to update only the files you chose in Step 2.An Execution window appears. 4 Monitor the process for success or errors. Answer questions as appropriate.This maps design changes into your code. You may now continue with further design or code modifications.Caveatsn Synchronized Engineering only works with code originally generated by an APDT code generator.n Associations may only be added, modified or deleted in ObjectTeam. You may not delete or add new associations in code and synchronize those changes to the ObjectTeam model. Use ObjectTeam to make design association changes.n Do not switch between Ada 83 and Ada 95. The system is not a code conversion tool; the results are unpredictable.n Chapter 8, Configuring the APDT Code Generators, describes how to customize ObjectTeam with your projects standard data types, as well as how to configure the code generator to use them. This involves customization of the lang_types.lang_types and stand_types.stand_types customization files. When mapping changes in Ada source code back into ObjectTeam, the APDT doesn't use these types, but instead creates new classes as appropriate to represent what it finds in the source files.What's really going on here?TERM1="synchronous engineering" TERM2="explained"Synchronous engineering is the process of updating code to match design and vice versa.In practice this means mapping the ObjectTeam model into areas of the source code that are marked as "affecting the design", and in mapping changes in those areas back into the ObjectTeam model.Areas affecting design are preceded with a --OT Analyze comment. The section is ended with an --OT Ignore comment. These comments tell the system that the following is a special area in the source that is to be synchronized with the ObjectTeam model.What You Can ChangeTERM1="source" TERM2="what you can change"The code generators generate a variety of comments telling you what they did, and where you may edit at will, or where you should edit with the understanding that the design may change as a result of the edits.The APDT parses your code completely, performing both syntactic and semantic parsing. It uses comments placed there when code was generated to let it know:n What to ignoren What areas should be analyzed to see if design has changed and should be mapped back into ObjectTeamn What kind of ObjectTeam representation caused a block of code to be generated (useful for understanding what it should sycnchronize with)The APDT ignores code placed after the --OT Ignore comment. No changes made between those comments will be brought back into ObjectTeam.Code following a --OT Analyze comment will be entirely regenerated during a synchronous engineering update. This section is also the only area that the ADPT will analyze to map changes back into the ObjectTeam model.The APDT also ignores code placed after --OT OBSOLETE comments. This code has been obsoleted by design changes made in the originating ObjectTeam design. Rather than deleting it, it is left in the source file but marked with --OT OBSOLETE so the APDT will ignore it next time the design and code are synched. You may remove this code, or perhaps re-use it elsewhere (which is why it isn't deleted).What you SHOULDN'T ChangeTERM1="source" TERM2="what you shouldnd5 t change"The APDT is quite liberal about what code changes you may make in your code. However, it can get confused if you alter the comments it has placed strategically throughout the code. n The --OT OBSOLETE comment and the code it marks may be removed.n All other comments beginning with --OT should be left alone, or the syncrhonization effort will be hampered or erroneous.Note: This doesn't mean you can't change code! Just don't change the comment itself. The APDT Ada parser looks for these, and their form and structure is how it distinguishes them from comments you may place in the code.Version ControlTERM1="version control"One of the most powerful features of ObjectTeam is its configuration and version management system. Any change can be backed out of.All changes the APDT makes either in Implementation or in Object Design are made through this versioning system. You can back out if you so desire.Confirmation of All ChangesIn addition, when synchronizing Ada code to object design, the APDT asks you whenever it proposes a change to an object. It queues the answers prior to one final question as to commit the entire changes into the ObjectTeam repository.You can decline, but save the questions to a log file for perusal offline. After further thought you may then go back and re-do the synchronization process, answering yes and no as you see fit from your further analysis.M4 Variables Controlling Synchronized EngineeringSome options in Ada synchronized engineering are controlled by M4 environment variables.Normally, these variables can be set in a variety of ways, either at the operating system level, or within ObjectTeam (as described in earlier sections). However, with the current version of APDT, the M4 environment variables controlling synchronized engineering must be set at the operating system level.The M4 environment variables controlling Ada synchronized engineering are M4_Ada83_Class_Record_Type_name, M4_Ada95_Class_Record_Type_Name, and M4_ada_tmpdir.M4_Ada83_Class_Record_Type_Name and M4_Ada95_Class_Record_Type_Name control the name of the primary type around which a class implementing package is built. The default value is "instance".M4_ada_tmpdir defines where temporary files are placed during synchronized engineering. The default for Unix is /var/tmp. ID="22789"Editing Code or DesignIntroductionYou can make design changes within the ObjectTeam Design Editor, or in the source code (after TERM1="comments" TERM2="--OT Analyze"--OT Analyze comments).Although the way you make design changes may differ, the results are still the same. The APDT Synchronous Engineering system will generate new code reflecting design changes made in ObjectTeam, and it will make CD and CDM changes to reflect design changes it finds in the code.Changes to AttributesTERM1="attributes" TERM2="changing"Attributes may be deleted, added, re-ordered, or renamed. Renaming an attribute has the effect of deleting and adding it. However, if you rename an attribute it's likely that it's properties will be lost.If you add an attribute without adding an accessor method, the APDT will set that attributes Access property to Private.Changes to OperationsTERM1="operations" TERM2="changing"As with attributes, operations may be deleted, added, re-ordered, or renamed. Renaming also causes the properties to be lost.You may also change method signatures by adding, removing, or re-ordering parameters, changing default values, or changing the method's return type.APDT CommentsTERM1="comments" TERM2="listing of APDT comments"The APDT inserts comments in code it generates. These comments are used to help it keep track of what it has done when the design and code are next synchronized.TERM1="comments" TERM2="Ada 95 code generator"These comments are used by the APDT for Ada 95:--OT Association components--OT Association accessor methods--OT Attribute accessor methods--OT User-defined methods--OT Package for association only--OT Link conversion functions--OT Ignore--OT Analyze--OT OBSOLETETERM1="comments" TERM2="Ada 83 code generator"These are used by the Ada 83 code generator:--OT Association components--OT Association accessor methods--OT Attribute accessor methods--OT User-defined methods--OT Package for association only--OT Inherited component--OT Inherited methods--OT Link conversion functions--OT Ignore--OT Analyze--OT OBSOLETETERM1="object design" TERM2="synching to code changes"ID="17793"Synchronizing Design to Code ChangesGeneral Steps1 Make your design changes in the code (use the editor of your choice).2 Select the implementation files containing design changes you wish to update into the ObjectTeam model. All files of a System must be selected.3 APDT compares the classes it finds in the source files with classes in the Object Design phase. For each difference it finds, APDT proposes an action and prompts you for confirmation. For example:In class "Customer": delete attribute "Street".Delete attribute?4 APDT queues the answers to your questions, and after one final confirming question commits the changes.Customizing synchronous engineeringThe roundtrip.roundtrip customization file specifies what actions the synchronous engineering system proposes, as well as the default answers to the questions it asks.Modifying the roundtrip.roundtrip customization file is similar to modifying the lang_types.lang_types and stand_types.stand_types customization files. For more information about modifying customization files, see REFID="39536" TYPE="XREF-TEXTCOPY"Customized Data Types, which describes how to modify the stand_types.stand_types customization file.ID="35835"Example of synchronizing design to code changes1 In the Browser Navigation area, select the Implementation you wish to synchronize with Object Design:FILENAME="00387.unk" ORIGFILE="pics/sync1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adartrip.fm5.mif"2 Select Edit | Select All.3 Select Utilities | Round Trip Selected.4 An ObjectTeam Execution window will appear with the synchronous engineering process running within it. In the following figure, the text asking if the new attribute "Country" should be added is highlighted:FILENAME="00388.unk" ORIGFILE="pics/sync2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adartrip.fm5.mif"5 Answer the questions, commit the results.The following figure shows the updated CD, with the new attribute Country shown in the class Address.FILENAME="00389.unk" ORIGFILE="pics/syncattr.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adartrip.fm5.mif"TERM1="object design" TERM2="updating source code to represent"ID="31942"Synchronizing Code to Design Changes (Code Regeneration)TERM1="code re-generation" TERM2="How to"General Steps1 Make your design changes using ObjectTeam.2 Choose the implementation files you wish to have updated (or none if you want all design changes to be synchronized).3 The ADPT will then process the design to identify changes that need to be reflected in the source implementation.4 Each change will be update in the appropriate source file, or new source files created and added to the implementation directory.ExampleBelow is the source code representing the implementation created by the previous example:FILENAME="00390.unk" ORIGFILE="pics/codereg1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adartrip.fm5.mif"Using the ObjectTeam CD editor we add two new attributes for the class "Address": Phone and Fax numbers.FILENAME="00391.unk" ORIGFILE="pics/codereg2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adartrip.fm5.mif"After modifying the CD, we save it and verify its correctness using Check | Local Model. It's always a good idea to verify a model before attempting to generate or re-generate code.FILENAME="00392.unk" ORIGFILE="pics/codereg3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adartrip.fm5.mif"With the check successfully passed, it's time to choose the implementation that we will synchronize with these design modifications. To do this, select the Implementation phase System in the Navigation area of the ObjectTeam Browser, then select Utilities | Generate Ada | New:The design changes are then analyzed, with the process monitored from an ObjectTeam Execution window:FILENAME="00393.unk" ORIGFILE="pics/codereg6.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adartrip.fm5.mif"Inspection of the new source file shows a successful update of the Fax and Phone number attributes in the corresponding Ada record type:FILENAME="00394.unk" ORIGFILE="pics/codereg7.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adartrip.fm5.mif"Chapter 7 ID="10180"Reverse EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++IntroductionTERM1="Reverse Engineering"Reverse Engineering parses Ada 83 or Ada 95 source code and builds CDs and CDMs that show the class hierarchy found in the source code.Reverse Engineering makes class libraries available in ObjectTeam, helps you understand the structure and function of your software, and provides information that the ObjectTeam documentation tools can use to build "As Built" software documentation.Reverse Engineering in the APDT does not capture all the information needed to successfully forward engineer again. Do not expect to reverse engineer and then proceed with synchronous engineering (as you can with code originally generated from with ObjectTeam.The APDT reverse-engineers Ada 83 and Ada 95 code. It offers two basic approaches, one assuming an object-oriented "style" of development was used, the other assuming the style is unknown or inconsistent.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33533" TYPE="XREF-TEXTCOPY"Introduction 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42144" TYPE="XREF-TEXTCOPY"Controlling Ada Reverse Engineering 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32299" TYPE="XREF-TEXTCOPY"Reverse Engineering Ada 95 - Default Mapping 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29910" TYPE="XREF-TEXTCOPY"Class Mapping Object Oriented Ada 95 Code 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23324" TYPE="XREF-TEXTCOPY"Reverse Engineering Ada 83 - Default Mappings 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32896" TYPE="XREF-TEXTCOPY"Class Mapping Object Oriented Ada 83 Code 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36917" TYPE="XREF-TEXTCOPY"Reverse Engineering Associations and Accessor Methods 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18125" TYPE="XREF-TEXTCOPY"Properties Set by Reverse Engineering 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21253" TYPE="XREF-TEXTCOPY"Example: Reverse Engineering Ada 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19TYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitID="33533"IntroductionWhat is Reverse Engineering?Reverse Engineering is the process of mapping Ada source code into ObjectTeam classes and class hierarchies. During reverse engineering the APDT analyzes your source code much like a compiler does, but instead of generating object code it generates CDs and CDMs in the ObjectTeam repository.Quick StartShould you wish to try reverse engineering without spending a great deal of time reading the manual, here are the basic steps:n In the Object Design phase of your project, create or choose a System that you wish to reverse engineer into.n Select Utilities | Reverse engineer Ada. Browse and choose the files you wish to reverse-engineer. Any number of files may be chosen, and they need not be provided in compilation order (the APDT will determine it).n The rest is automatic.Tip: Reverse Engineering options can be controlled through M4 variables. See later in this chapter for details.CaveatThe APDT will reverse engineer code that has syntax errors in it. However, you should look at the syntax and semantic errors being reported to determine if they are of the kind that would materially alter the design being represented.Reverse Engineering TechniquesThe APDT uses two basic algorithms for mapping Ada to ObjectTeam. The default algorithm assumes that the code being reverse engineered wasn't done in an object-oriented fashion, or that it's method of development is unknown. The second algorithm, called "Class Mappings" assumes the code is structured in an object-oriented form and makes decisions accordingly.ID="42144"Controlling Ada Reverse EngineeringM4 Variables Various options on the Ada reverse engineering process are controlled by M4 environment variables.Normally, these variables can be set in a variety of ways, either at the operating system level, or within ObjectTeam (as described in earlier sections). However, with the current version of the APDT, the M4 environment variables controlling reverse engineering of Ada must be set at the operating system level.The M4 environment variables controlling Ada reverse engineering are M4_ada_reveng, M4_ada_classpackages, and M4_ada_tmpdir. The M4_ada_reveng variable may contain multiple commands, separated by spaces.Comment AssociationThe reverse engineering tool can extract comments from your source code and populate appropriate properties in the CDs and CDMs it creates. This information is useful for understanding and also can be used in documentation creation.The M4_ada_reveng variable passes options to the reverse engineering tool More than one option may be placed in the M4 variable.-associate_comments on | offControls whether comments found in the source code are extracted to appropriate properties in the created ObjectTeam class definition matrices The default is "on". Example: M4_ada_reveng="-associate_comments off"-libunit_defs before | after | both | noneIndicates where to extract associated comments for Ada top level library units. Before means before the definition of the unit, after means after, both means grab comments before and after, and none means don't grab any of these comments. The default is "after".Example: M4_ada_reveng="-libunits_defs none"-nestedunit_defs before | after | both | noneSimilar to libunit_defs, but controls this comment extraction for nested units. Rules for before, after, both, and none are same. The default is "after".-typeobject_defs before | after | both | noneControls comment extraction for types and objects. Default is "after".Setting the Reverse Engineering MethodThe Ada reverse engineering tool uses two methods of reverse engineering. The default requires no option. If you wish to use the class mapping method (see REFID="29910" TYPE="XREF-TEXTCOPY"Class Mapping Object Oriented Ada 95 Code and REFID="32896" TYPE="XREF-TEXTCOPY"Class Mapping Object Oriented Ada 83 Code) then set the M4_ada_classpackages variable to "On". The default is "Off"". Example: M4_ada_classpackages="On"Controlling Placement of Temporary FilesRunning the Ada reverse engineering tool causes the creation of a large database containing the semantic information from the processed source files. A minimum of 10MB of free disk space is needed for Ada95, 5Mb for Ada83. Processing large amounts of source requires additional space. By default, the temporary file is placed in the /var/tmp directory. If this directory is not on a filesystem with sufficient available disk space, the user may set the M4_ada_tmpdir variable to another directory name.Example: M4_ada_tmpdir="/usr2/tmp"ID="32299"Reverse Engineering Ada 95 - Default MappingPackages To ClassesThe default mapping maps each package specification to an ObjectTeam class. The name of the ObjectTeam class is the full name of the package.Variables declared in the package specification either become class based attributes (prefixed by a $), or associations to other classes, depending on the type of the variable.Subprograms declared in the package specification that do not operate on any record type or operate on more than one record type become methods of the class. These methods may be class based methods (their names prefixed by a $), or accessor methods. Accessor methods are not added to the CDM for the class and so do not appear on CDs.Note: If a subprogram operates on a single record type, it appears as a method for the class created for the record type.Note: The heuristics used to classify variables as attributes or associations, and subprograms as normal methods or accessor methods are discussed in REFID="36917" TYPE="XREF-TEXTCOPY"Reverse Engineering Associations and Accessor Methods.Record Types to ClassesAn ObjectTeam class is created for each record type in a package specification. The name of the ObjectTeam class is the full name of the Ada type from which it was generated.Components of the record become either attributes of the class. or associations to other classes, depending on the type of the component.Subprograms declared in the same package specification as the record type and which operate on the record type become normal or accessor methods of the class. Accessor methods are not added to the CDM for the class and so do not appear on CDs.Note: The heuristics used to classify components as attributes or associations, and subprograms as normal methods or accessor methods are discussed in Reverse Engineering Associations and Accessor Methods on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15.Enumeration Types to ClassesAn ObjectTeam class is created for each enumeration type in a package specification. The name of the ObjectTeam class is the full name of the Ada type from which it was generated. Enumeration literals become class based attributes of the class. No methods are placed in the class.This mapping is consistent with the mapping used for creating enumeration type declarations with the Ada95 code generator.Subtypes to ClassesAn ObjectTeam class is created for each subtype in a package specification. The name of the class is the full name of the Ada type from which it was generated. A single attribute, "x", is created for the class.The type text for the attribute is the parent type name. The "Subtype Text" property is set to the subtype constraint.The mapping is consistent with the mapping used for creating subtype declarations with the Ada95 code generator.Library level subprogramsFor each library level subprogram, a single ObjectTeam class is created. Any nested subprogram becomes a class-based method (prefixed by a "$"). Any variables become class-based attributes. The name of the class is the name of the library level subprogram.TasksA single ObjectTeam class is created for each task, using the name of the task for the name of the class. The class has no attributes. Any task entries become class based methods (prefixed by a "$").Class HierarchyAda 95 supports inheritance via its tagged type feature. Each type derivation where the parent type is a tagged type yields an ObjectTeam generalization.ExampleSample codeHere is a simple Ada 95 source file:package shapes_package is type rectangle is tagged -- Gives characteristics of a rectangle. record length : float; -- Length of rectangle width : float; -- Width of rectangle end record; function size (r : rectangle -- A rectangle for which size is to be determined ) return float; -- Returns size of a given rectangle. type cuboid is new rectangle with -- Adds height to a rectangle to make a cube. record height : float; -- Height of cube. end record; type objects is record -- Holds a rectangle and a cube. rec : rectangle; cube : cuboid; end record; global_rectangle : rectangle; global_cuboid : cuboid; procedure initialize_shapes;end;Generated diagramsAPDT's Ada 95 reverse engineering system yields these diagrams:FILENAME="00395.unk" ORIGFILE="pics/reveng11.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"FILENAME="00396.unk" ORIGFILE="pics/reveng12.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"FILENAME="00397.unk" ORIGFILE="pics/reveng13.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"ID="29910"Class Mapping Object Oriented Ada 95 CodeIntroductionIn some situations your Ada 95 code may be structured in a way quite suitable for representation in ObjectTeam. Setting the M4_ada_classpackages variable to "On" sets in place a second algorithm that takes advantage of object oriented structured code.In this algorithm, the code is expected to be object-oriented Ada code in which each "class" is a separate package and the package name is meant to be the name of the class.When "Class Mapping" is used, each package that has a single tagged type in it is mapped to an ObjectTeam class. The class name is the name of the package. As with the default mapping (REFID="32299" TYPE="XREF-TEXTCOPY"Reverse Engineering Ada 95 - Default Mapping), components of the tagged type and variables declared in the package specification become either attributes of the class or associations to other classes. Subprograms in the package become normal methods or accessor methods of the class. Methods that do not operate on the record type become class-based methods (prefixed by "$").All other library units (packages with more than one tagged type, packages with no tagged types, tasks, and library level subprograms), are mapped as in the default algorithm.The class hierarchy is built in the same way as the default mapping, with each tagged type extension becoming a generalization.Note: The heuristics used to classify variables as attributes or associations and subprograms as normal methods or accessor methods are discussed in REFID="36917" TYPE="XREF-TEXTCOPY"Reverse Engineering Associations and Accessor Methods.Example Ada 95 Code structured appropriate for Class Mappingpackage Alert is type Device is (Teletype, Console, Big_Screen); type Instance is tagged record Time_Of_Arrival : integer; Message : integer; end record; procedure display (a : instance; on : in device); procedure handle (a : in out instance); procedure log (a : in instance);end;with alert;package low_alert is type instance is new alert.instance with null record;end;with alert;package medium_alert is type instance is new alert.instance with record action_officer : integer; end record; -- now override inherited operation procedure handle(ma : in out instance);end;with medium_alert;package high_alert is type instance is new medium_alert.instance with record ring_alarm_at : integer; end record; procedure handle (ha: in out instance); procedure set_alarm (ha : in instance);end;Resulting MappingFILENAME="00398.unk" ORIGFILE="pics/reveng21.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"FILENAME="00399.unk" ORIGFILE="pics/reveng22.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"ID="23324"Reverse Engineering Ada 83 - Default MappingsIntroductionThe Ada 83 reverse-engineering tool creates Class Diagrams with classes, their attributes, their methods, and their associations to other classes. It does not presently create class hierarchies. Packages to ClassesThe default mapping maps each package specification to an ObjectTeam class. The name of the class is the full name of the package.Variables declared in the package specification either become class based attributes (prefixed by a $), or associations to other classes, depending on the type of the variable.Subprograms declared in the package specification that do not operate on any record type or operate on more than one record type become methods of the class. These methods may be class based methods (their names prefixed by a $), or accessor methods. Accessor methods are not added to the CDM for the class and so do not appear on CDs.Note: If a subprogram operates on a single record type, it appears as a method for the class created for the record type (see below).Note: The heuristics used to classify variables as attributes or associations, and subprograms as normal methods or accessor methods are discussed in Reverse Engineering Associations and Accessor Methods on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15.Record Types to ClassesAn ObjectTeam class is created for each record type in a package specification. The name of the class is the full name of the Ada type from which it was generated.Components of the record become either attributes of the class. or associations to other classes, depending on the type of the component.Subprograms declared in the same package specification as the record type and which operate on the record type become normal or accessor methods of the class. Accessor methods are not added to the CDM for the class and so do not appear on CDs.Note: The heuristics used to classify components as attributes or associations, and subprograms as normal methods or accessor methods are discussed in Reverse Engineering Associations and Accessor Methods on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15.Enumeration Types to ClassesAn ObjectTeam class is created for each enumeration type in a package specification. The name of the class is the full name of the Ada type from which it was generated. Enumeration literals become class based attributes of the class. No methods are placed in the class.This mapping is consistent with the mapping used for creating enumeration type declarations with the Ada code generator.Subtypes to ClassesAn ObjectTeam class is created for each subtype in a package specification. The name of the class is the full name of the Ada type from which it was generated. A single attribute, "x", is created for the class.The type text for the attribute is the parent type name. The "Subtype Text" property is set to the subtype constraint.The mapping is consistent with the mapping used for creating subtype declarations with the Ada code generator.Library level Sub-ProgramsFor each library level subprogram, a single ObjectTeam class is created. Any nested subprogram becomes a class-based method (prefixed by a "$"). Any variables become class-based attributes. The name of the class is the name of the library level subprogram.TasksA single ObjectTeam class is created for each task, using the name of the task for the name of the class. The class has no attributes. Any task entries become class-based methods (prefixed by a "$").ID="32896"Class Mapping Object Oriented Ada 83 CodeIntroductionIn some situations your Ada 83 code may be structured in a way quite suitable for representation in ObjectTeam. Setting the M4_ada_classpackages variable to "On" sets in place a second algorithm that takes advantage of object oriented structured code.In this algorithm, the code is expected to be object-oriented Ada code in which each "class" is a separate package and the package name is meant to be the name of the class.When "Class Mapping" is used, each package that has a single record type in it is mapped to an ObjectTeam class. The class name is the name of the package. As with the default mapping (REFID="32299" TYPE="XREF-TEXTCOPY"Reverse Engineering Ada 95 - Default Mapping), components of the record type and variables declared in the package specification become either attributes of the class or associations to other classes. Subprograms in the package become normal methods or accessor methods of the class. Methods that do not operate on the record type become class-based methods (prefixed by "$").All other library units (packages with more than one record type, packages with no tagged types, tasks, and library level subprograms), are mapped as in the default algorithm.Class hierarchies are not created for Ada83.Note: The heuristics used to classify variables as attributes or associations and subprograms as normal methods or accessor methods are discussed in REFID="36917" TYPE="XREF-TEXTCOPY"Reverse Engineering Associations and Accessor MethodsID="36917"Reverse Engineering Associations and Accessor MethodsIntroductionThe Ada reverse engineering tool uses some simple heuristics to determine which attributes are actually associations and which are true attributes, and to determine which methods are accessor methods and which are normal methods.Association RecognitionA record component or variable whose type is an enumeration, integer, or floating point type becomes an attribute.A component or variable whose type maps to a class, or accesses a class, or which is an array with a component type that maps to or accesses a class, becomes an association to the class.Other components and variables become attributes.Accessor Method RecognitionA method is identified as an accessor method if its name begins with "set", "get", "remove", or "add" and the rest of the name matches one of the attributes in the class. Accessor methods are not added to the CDM created for the class.Disabling Association and Accessor Method RecognitionReverse engineering of associations and the recognition of accessor methods may be disabled with the "Reverse Engineer Associations" toggle on the reverse engineering dialog box.When reverse engineering of associations and accessor methods is disabled, components and variables become attributes, regardless of their types, and all methods become normal methods.Customizing Association and Accessor Method RecognitionRecognition of associations and accessor methods is controlled by the Tcl file "rev_assoc.tcl" in the directory M4_home/modules/ada95/tcl, for Ada95 or M4_home/modules/ada83/tcl for Ada83.Users experienced with Tcl, and with the ObjectTeam Repository Interface may wish to rewrite this Tcl file to change the heuristics used.The new version of the rev_assoc.tcl file should be stored as a customization file in the ObjectTeam repository. The level in which you store the customization file determines the extent to which the Tcl file will be used in reverse engineering. A customization file stored on System level for instance, won't affect reverse engineering for another system in the same Configuration. However, a customization file stored on Phase level will.Σ To create a customized version of rev_assoc.tcl:1 Make the browser level of choice the current browser level.2 Check your access rights to see if you are allowed to create customization files on the current level.3 Open the <customization files> browser object.4 Select File | New | Customization File Version... from the menu bar.5 Enter the name "rev_assoc.tcl".6 Open the new customization file.7 Enter the required code. You might want to include the contents of the default "rev_assoc.tcl" file first and then make the desired changes.8 Save the customization file.The next time you run the reverse engineering tool, the new version of rev_assoc.tcl will be used.ID="18125"Properties Set by Reverse EngineeringIntroductionThe Ada 95 or Ada 83 reverse engineering process sets properties for each class, attribute, method, and parameter created.These properties can be useful for helping understand the code that has been reverse engineered. The properties can also be used by ObjectTeam documentation tools to build "As Built" documentation.Note: Unless otherwise noted, these properties are set by both Adaname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'83 and Ada 95 reverse engineering.Class PropertiesClass VisibilityThe Class Visibility property is set to "public" if the record type causing creation of a class is in the visible part of a package specification. It is set to "private" if the record is declared as "private" and to "limited" if the record is declared as "limited private". The Class Visibility property is set to "Opaque" if the record is declared in a package body with an access type referencing the record in the corresponding package specification. For library level subprograms the property is set to "public".External With ClauseThe External With Clause property is set to a comma separated list of names of program units withed by the package in which the record was declared.Free TextThe Free Text property is set in "--" comments found following the declaration of the record causing the creation of a class. Optionally, the M4_ada_reveng environment variable may be used to configure the reverse engineering tool to extract comments before, after, both, or not at all. See REFID="42144" TYPE="XREF-TEXTCOPY"Controlling Ada Reverse Engineering for details on the use of the M4 variable.ControlAda 95 only. The Control property is set to "Controlled" if the class was created from a tagged type with a base type of Ada.Finalization.Controlled. It is set to "Limited Controlled" if the base type is Ada.Finalization.Limited_Controlled. In all other cases it is set to "Not controlled".Child SyntaxAda 95 only. The Child Syntax property is set to "TRUE" if the program unit from which the class originated was a child package. It is set to "FALSE" otherwise.Attribute PropertiesFree TextThe Free Text Property is set to text in the"--" comments following the record component declaration. Optionally, the M4_ada_reveng environment variable may be used to configure the reverse engineering tool to extract comments before, after, both, or not at all. See REFID="42144" TYPE="XREF-TEXTCOPY"Controlling Ada Reverse Engineering for details on the use of the M4 variable.Method PropertiesMethod AccessThe Method Access property is set to "Private" for subprograms declared within the private part of a package specification and to "Public" for others.Classwide TypeAda 95 only. The Classwide Type property is set to TRUE for methods mapped from functions returning the class type. For all other methods it is set to "FALSE".Method Free TextThe Method Free Text property is set to the text in a "--" comments following the Ada subprogram or method declaration. Optionally, the M4_ada_reveng environment variable may be used to configure the reverse engineering tool to extract comments before, after, both, or not at all. See REFID="42144" TYPE="XREF-TEXTCOPY"Controlling Ada Reverse Engineering for details on the use of the M4 variable.Parameter PropertiesParameter Data Flow ModeThe Parameter Data Flow Mode property is set to "in" for Ada "in" parameters, "out" for Ada "out" parameters, and "in out" for Ada "in out" parameters.Parameter Default ValueThe Parameter Default Value property is set to the default value given in the parameter declaration. If no default value is given, the property is not set.Classwide PropertyAda 95 only. The Classwide property is set to TRUE if the parameter type is a "class" type and to FALSE for all other cases.Parameter Free TextThe Free Text Property is set to text in the "--" comments following the record component declaration. Optionally, the M4_ada_reveng environment variable may be used to configure the reverse engineering tool to extract comments before, after, both, or not at all. See REFID="42144" TYPE="XREF-TEXTCOPY"Controlling Ada Reverse Engineering for details on the use of the M4 variable.ID="21253"Example: Reverse Engineering AdaIntroductionAn entire session of reverse engineering an Ada file is shown below. Although this session just does one file (for simplicity), many files can be done at once if desired.Before you beginBefore you reverse engineer, make sure all the M4 variables controlling reverse engineering are set and in effect. See REFID="42144" TYPE="XREF-TEXTCOPY"Controlling Ada Reverse Engineering, REFID="29910" TYPE="XREF-TEXTCOPY"Class Mapping Object Oriented Ada 95 Code, and REFID="32896" TYPE="XREF-TEXTCOPY"Class Mapping Object Oriented Ada 83 Code for information on M4 variables that control the reverse engineering process.Step 1: Create an Object Design Phase and SystemReverse engineering populates a System in the Object Design phase of a Project. So, you will need to create an Object Design phase and System in the project you wish to store the reverse engineering into. Select a project version in the Navigation area of the ObjectTeam Browser, and then select File | New Phase Versions.FILENAME="00400.unk" ORIGFILE="pics/reveng1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"Next, create a system version in the Object Design Phase. Select the ObjectDesign phase in the Navigation area of the ObjectTeam Browser. Then, select File | New System Version and enter the name of the new system.FILENAME="00401.unk" ORIGFILE="pics/reveng3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"Step 2: Launch the Reverse Engineering ToolAfter creating the Object Design Phase and System, select the System on the left side of the Browser, and invoke the reverse engineering tool by selecting Utilities | Reverse Engineer AdaXX.A Reverse Engineer Ada Dialog box appears prompting you to select the files to be reverse engineered. FILENAME="00402.unk" ORIGFILE="pics/reveng4.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"Use the filter to limit the list of files displayed. Reverse engineering creates CDs and CDMs based on the files that you select. Therefore, you generally want to reverse engineer all files in a system at the same time. Select the desired files and click ok.A Reverse Engineer Ada dialog box for appears, prompting you to select the options that you want to use.FILENAME="00403.unk" ORIGFILE="pics/reveng8.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box):COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Prefix used to name each generated CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only class structure is generated)n Only CDMs (only class features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering creates a separate reference CD for each class that exceeds the maximum size. The class is folded in all diagrams other than the reference diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class. When a class exceeds this size, it is folded.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree. When a class hierarchy exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram. When a diagram exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Reverse Engineering Associations is selected, specifies the algorithm reverse engineering uses to create the CDs that show the associations:n Simple. Creates a CD for each class that has associations.n Grid. Creates a CD for each n classes, where n is the number specified in the Number of Classes per CD field.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of Classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Placement Algorithm is Grid, specifies the number of unfolded classes per CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"Reverse Engineer AssociationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering examines the attributes and accessor methods defined on each class to determine the associations among classes. It then creates CDs that show those associations.COLNAME="1" VALIGN="TOP" MOREROWS="0"Input Filter CommandCOLNAME="2" VALIGN="TOP" MOREROWS="0"Command used to preprocess the header files. Specify the command using the format:myfilter %1 %2 It is then executed asmyfilter input-file output-file If this option is not specified it will default to the settings of the M4_reveng_filter variable. If the M4_reveng_filter is not set, no input filter will be used.Note: Reverse engineering ignores all preprocessor directives, such as #ifdef and #define. Use this field to specify a preprocessor that can resolve these directives before ObjectTeam reverse engineers the file.COLNAME="1" VALIGN="TOP" MOREROWS="0"Skip Identifiers FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"File containing a list of identifiers to be ignored by reverse engineering. The file must be an ASCII file that contains the identifiers; separate the identifiers using white space.Note:If you want to retain the specification of this file for repeated use, set the M4_reveng_skipfile variable in your Meta4userenv file. For example:M4_reveng_skipfile=\user\bob\skip_file.txt;RWThis value will be displayed in this field. Note that if you change the value in this field, it is not written to the Meta4UserEnv file.Select the desired options, then select OK.An ObjectTeam execution window now appears with the reverse engineering process running within it:Step 3 Review the resultsThe reverse engineering process creates a variety of CDs and CDMs in the Object Design phase of your project.FILENAME="00404.unk" ORIGFILE="pics/reveng6.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"The results can then be inspected using the ObjectTeam Class Diagram Editor:FILENAME="00405.unk" ORIGFILE="pics/reveng7.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adarveng.fm5.mif"Chapter 8 Configuring ID="21577"the APDT Code GeneratorsTYPE="MIFmarker"TYPE="number"0TYPE="text"Object Team - Ada Professional Developers ToolkitIntroductionThis chapter explains the standard way to control various options of the APDT Code Generators. To control certain aspects of the working environment, ObjectTeam maintains a set of environment variables. They are referred to as M4 variables because they all begin with the string M4_.You can specify the values of the M4 variables in an m4env file. ObjectTeam maintains a copy of the m4env file at the Corporate level. By creating an m4env customization file at Project, Configuration, Phase, or System level (or a MetaUserEnv file in your home directory), you can override the Corporate-level values of M4 variables.System environment variables in (Unix or Windows NT) may also be used to specify target languages, however these settings will only take effect for ObjectTeam sessions begun after the variables are setFor more information: See the ObjectTeam Customization Guide for more information about M4 variables and m4env and Meta4UserEnv files.The APDT adapts its behavior based on the settings of several M4 variables. Most of these variables are common to Ada 83 and Ada 95, but some are language specific. Variables are used to configure code generation, synchronous engineering, and reverse-engineering. This section describes only those controlling code generation.After changing any of these variables you must exit and reopen the level (e.g. Corporate, Project, Version, Phase) that you set the variable. The new settings will then be used.This chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35911" TYPE="XREF-TEXTCOPY"Code Generation M4 Variables 8name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39536" TYPE="XREF-TEXTCOPY"Customized Data Types 8name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24556" TYPE="XREF-TEXTCOPY"Where Code Generator Files are Stored 8name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9ID="35911"Code Generation M4 VariablesIntroductionThe APDT code generator can be configured to control the types of Ada 83 or Ada 95 files being generated, including:n Sub-unit filesn Prefixes, extensions, and file namesCommon M4 Variables The following table lists M4 variables common to Ada 83 and Adaname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'95 Code Generation.COLS="2"COLNAME="1" COLWIDTH="297p"COLNAME="2" COLWIDTH="328p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada95_Generate_Subunit_FilesM4_Ada83_Generate_Subunit_FilesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Possible values are On or Off. The default is Off. When set to On the APDT code generator will generate separate files for each procedure generated from a class.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Class_Record_Type_NameM4_Ada95_Class_Record_Type_NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Used as the name of the primary type of which a class implementing package is built around. May be set to a text string building a valid Ada 83/95 type name. The default value is "Instance". Tip: Changing this variable (and other M4 variables controlling names in code generation) could break previously generated code (which used prior settings of the variable).COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Class_Access_Type_NameM4_Ada95_Class_Access_Type_Name COLNAME="2" VALIGN="TOP" MOREROWS="0"Used as the name of type created to provide an access type to a major class type. May be set to any valid Ada 83/95 type name. The default is "Link".COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Opaque_Record_Type_NameM4_Ada95_Opaque_Record_Type_Name COLNAME="2" VALIGN="TOP" MOREROWS="0"Used as the name of the type hidden in the private section of an Ada package when the class attributes are set to Private. May be set to any valid Ada 83/95 type name. The default is "Data".COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Class_Record_Inh_Attrib_ExtM4_Ada95_Class_Record_Inh_Attrib_ExtCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the postfix of the component name used to implement Inheritance. May be set to any value building a valid Ada 83/95 variable name. The default value is "_Inh".COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Unordered_Assoc_Generic_Package_NameM4_Ada95_Unordered_Assoc_Generic_Package_NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Holds the name of the generic Ada package that will be instantiated to provide Unordered access to a class record. May be set to any valid Ada package name. The default is "Generic_Unordered_Set". Used when the code generator is mapping Associations to Ada code.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Unordered_Assoc_Type_NameM4_Ada95_Unordered_Assoc_Type_NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Used as the name of the type implementing unordered sets. May be set to any valid Ada type name. The default is "Unordered_Set". Used when the code generator is mapping Associations to Ada code.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Ordered_Assoc_Generic_Package_NameM4_Ada95_Ordered_Assoc_Generic_Package_NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the name of the generic Ada package implementing ordered set access. May be set to any valid Ada package name. The default is "Generic_Ordered_Set". Used when the code generator is mapping Associations to Ada code.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Ordered_Assoc_Type_NameM4_Ada95_Ordered_Assoc_Type_Name COLNAME="2" VALIGN="TOP" MOREROWS="0"Used as the name of the type implementing ordered set access to a class record. May be set to any valid Ada type name. The default is "Ordered_Set". Used when the code generator is mapping Associations to Ada code.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Qualified_Assoc_Generic_Package_NameM4_Ada95_Qualified_Assoc_Generic_Package_NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the package used to provide qualfied assocation capabilities for the code generator. May be set to any valid Ada package name. The default is "Generic_Dictionary".COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Qualified_Assoc_Type_Name M4_Ada95_Qualified_Assoc_Type_Name COLNAME="2" VALIGN="TOP" MOREROWS="0"Holds the type name used by the code generator when creating code for qualified associations. May contain any valid Ada type name. The default name is "Dictionary".COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Alt_Link_Class_ExtM4_Ada95_Alt_Link_Class_ExtCOLNAME="2" VALIGN="TOP" MOREROWS="0"Used as the postfix to a class name when generating associations with link attributes. May be set to any text building a valid Ada package name. The default is "_Alt".COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_ada_tmpdirCOLNAME="2" VALIGN="TOP" MOREROWS="0"Defines where temporary files are placed during APDT operation. The default for Unix is /var/tmp. Ada 83 Only Code Generation VariablesThe following table lists M4 variables for Ada 83 only:COLS="2"COLNAME="1" COLWIDTH="304p"COLNAME="2" COLWIDTH="322p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Generate_PolymorphismCOLNAME="2" VALIGN="TOP" MOREROWS="0"Possible values are On or Off. The default is Off. When set to On the Ada 83 code generator will generate code providing polymorphism.COLNAME="1" VALIGN="TOP" MOREROWS="0"M4_Ada83_Polymorphism_PrefixCOLNAME="2" VALIGN="TOP" MOREROWS="0"Any text string building a valid Ada 83 package name may be set. This string is appended to generated package's name as a way to implement polymorphism in Ada 83. The default value is "Any_". Has no effect if M4_Ada83_Generate Polymorphism is set to "Off".ID="39536"Customized Data TypesIntroductionIt's quite common and desirable to customize your ObjectTeam design environment to reflect the kinds of types your application will be using, or that are used throughout your organization.To do this you create a stand_types.stand_types customization file. This file makes the new types available in the ObectTeam design model.The second step is to create a lang_types.lang_types customization file. This file tells the code generator how to map the standard types from the stand_types.stand_types file onto Ada83 or Ada95 types.The default stand_types.stand_types and lang_types.lang_types files are stored in the etc directory of the Ada83 or Ada95 module. You can add new standard types or override existing ones.All customization files of this type are read incrementally, which means that you only have to include the standard types that you want to add to the current set of standard types and the ones you want to override.You can store your stand_types.stand_types and lang_types.lang_types files in the following locations:n Repository: open the pseudo object <customization files> at the Browser level of your choice and store the files here.n Module: store them in the etc directory of a user-defined moduleSee ObjectTeam Customization Guide for details on user-defined modules.ID="13216"Format of the standard types fileHere is an example of the Ada 95 default stand_types.stand_types file as shipped with the APDT.The columns Min 1, Max 1, and Min 2, and Max 2 may be used to specify constraints on array size or format values of the standard types.########################################################################### Copyright (c) 1997 by Cayenne Software, Inc.#### This software is furnished under a license and may be used only in## accordance with the terms of such license and with the inclusion of## the above copyright notice. This software or any other copies thereof## may not be provided or otherwise made available to any other person.## No title to and ownership of the software is hereby transferred.#### The information in this software is subject to change without notice## and should not be construed as a commitment by Cayenne Software, Inc.##############################################################################--------------------------------------------------------------------------# StandardTypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Min 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Max 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Min 2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Max 2#--------------------------------------------------------------------------BOOLEANname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Booleanname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0booleanname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0CHARACTERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Charactername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0charactername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0FLOATname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0INSTANCEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0LINK name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Linkname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0linkname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0NATURALname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Naturalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0naturalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0POSITIVEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Positivename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0positivename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0STRINGname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0ENUMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Format of the language types fileThe lang_types.lang_types file is used to tell the code generator how to map your new type into its target language.Below is the standard lang_types file, as shipped with this version of the APDT. The Standard Type column maps to the name of the type in the stand_types file. The Ada Type column is the type name to use when generating Ada code. The Range column is an optional modifier you can place on the type definition. It follows the Ada range syntax.#--------------------------------------------------------------------------# Standard typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Ada typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| range#--------------------------------------------------------------------------BOOLEANname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| BOOLEANname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Booleanname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Booleanname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *booleanname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| booleanname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *CHARACTERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| CHARACTERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Charactername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Charactername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *charactername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| charactername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *FLOATname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| FLOAT name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Float name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| float name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *INSTANCEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| INSTANCEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| INTEGER name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Integer name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| integer name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *LINKname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| LINK name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Linkname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Link name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *linkname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| link name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *NATURALname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| NATURAL name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Naturalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Natural name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *naturalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| natural name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *POSITIVEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| POSITIVEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Positivename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Positivename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *positivename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| positivename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *STRINGname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| STRINGname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *Enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *ENUMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| ENUMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| *How to add a new standard typeIn this example, we will add a new standard type "Atomic_Time" and make it available first for ObjectTeam design use and and then for Ada code generation.Σ To add a new standard type:1 In the Browser, move to the level on which you wish to make this new type available. 2 In the Navigation area, select the Customization file on this level.FILENAME="00406.unk" ORIGFILE="pics/custtyp1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaconfg.fm5.mif"3 Select File | New | Customization File Version.The New Customization File dialog appears.4 Enter stand_types.stand_types in the entry field (it is not among the list of default customization files) and select Edit.FILENAME="00407.unk" ORIGFILE="pics/custtyp2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaconfg.fm5.mif"An empty file appears in the default text editor.5 Add the new type "Atomic_Time" using the format described in REFID="13216" TYPE="XREF-TEXTCOPY"Format of the standard types fileFILENAME="00408.unk" ORIGFILE="pics/custtyp3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaconfg.fm5.mif"After exiting, you should change Browser level and re-enter. If you created the new stand_types file on Corporate level, then restart your ObjectTeam Browser.Making the new type available for Code GenerationIn order to make this new "Atomic_Time" type available to the code generator you have to perform a similar procedure, but on the lang_types.lang_types file.All procedures are the same, except you specify a new lang_types.lang_types file when creating a new Customization File Version. In the file, insert this line:Atomic_Time | Atomic_Clock.Time_Field | *Save the file, and close and re-enter that level (or re-start the Browser).ID="24556"Where Code Generator Files are StoredIntroductionThe APDT code generators can create quite a few Ada source files. The names of the source files generated are based on the Class and Attribute names used in the Object Design. You can however control the file extensions used. You may also specify what directory the resulting files are stored in.Changing output file extensionsYou can change the default extensions of the specification, body, and subunit files by editing the objtype.objtype customization file. As with adding a new type, you do this at the level you wish this change to apply to.Note: Only change extensions immediately after selecting your Ada target language, or after deleting all generated files (in a System Implementation).Σ To change output file extensions:1 In the Navigation area of the Browser, select <customization files>.2 Select File | New | Customization File Version.The New Customization File dialog appears.3 Click on objtype.objtype and select Edit.FILENAME="00409.unk" ORIGFILE="pics/custext1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaconfg.fm5.mif"The ObjectTypes Customization Editor opens.4 Scroll to the ExternalFileVersion entries and select one of them.FILENAME="00410.unk" ORIGFILE="pics/custext2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaconfg.fm5.mif"5 Select Edit | Redefine.The Editor dialog appears.6 Select the Interface tab.FILENAME="00411.unk" ORIGFILE="pics/custext3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaconfg.fm5.mif"7 Enter the new file extension, e.g. adb and select OK.8 In the Customization editor, select File | Save to exit to the ObjectTeam Browser.9 To activate your customization, move up a level in the Browser and back to the level on which you created the customization file. If you edited the file at the Corporate level, restart the Browser.Setting the Output DirectoryThe default output directory is in your home directory under the corporate directory (by default repos; the corporate directory in your installation may be named differently). A tree is then generated under this:CorpRoot: ProjectName: ConfigName: Implementation: SystemNamewhere all but Implementation are the names you specified when creating the Project in the ObjectTeam Browser.You can change this however by editing the properties of the Implementation phase object.Σ To set the output directory:1 In the Navigation area, select the Implementation phase object. FILENAME="00412.unk" ORIGFILE="pics/custpth1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaconfg.fm5.mif"2 Select File | Properties | Edit. The Edit Properties dialog appears.3 Edit the path variable under the Misc tab.FILENAME="00413.unk" ORIGFILE="pics/custpth2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ada/adaconfg.fm5.mif"4 Click OK to save your changes, then change the level or restart the Browser.Future generated code will use a tree beginning in the path specified. For example, using the example in the figure above, generated Ada code would be output to a tree such as /usr/OrderFulfillment/main_system/CD.ads.C++ Code Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++About this manualObjectTeam provides code generation tools that enable you to generate object-oriented code for a range of object-oriented programming languages. This guide focuses on C++ as target language. This manual explains the following things:n Which steps to take to generate C++ coden How certain constructions in the Class Diagrams (CDs) are translated into C++ coden How you use reverse and round-trip engineeringn How you can customize the default code generation processPrerequisitesThis book assumes a basic knowledge of ObjectTeam, including familiarity with the information provided in the ObjectTeam Getting Started and ObjectTeam Modeling Guide. Furthermore, knowledge of C++ is necessary to understand the C++ constructions generated from the CD. You also need this knowledge to complete the generated source files.If you plan to customize the default code generation process, you should be familiar with Tcl and the object-oriented extensions to Tcl supplied with ObjectTeam. For details on Object Tcl, refer to the ObjectTeam Customization Guide.Chapter 1 Preparing ID="19089"Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++IntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.C++ module requiredThe ObjectTeam module C++ Code Generation provides the menu items, the properties and the Tcl code required to use the C++ Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Required modulesThe module C++ Code Generation requires one module of type DevelEnv, and one or more of type CppClasslib. You select these modules from a dialog box, after you select the module C++ Code Generation.These are the modules required to run C++ Code generation.FILENAME="00414.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppobjd.fm5.mif"The names in this picture refer to the following modules:COLS="3"COLNAME="1" COLWIDTH="100p"COLNAME="2" COLWIDTH="237p"COLNAME="3" COLWIDTH="109p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Module nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Long NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"cplusplusCOLNAME="2" VALIGN="TOP" MOREROWS="0"C++ Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CodeGenerationCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-aixCOLNAME="2" VALIGN="TOP" MOREROWS="0"IBM C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-decCOLNAME="2" VALIGN="TOP" MOREROWS="0"Digital C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-hpCOLNAME="2" VALIGN="TOP" MOREROWS="0"HP C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-sunCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sun C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-bc-45COLNAME="2" VALIGN="TOP" MOREROWS="0"Borland C++ 4.5 compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-vc-40COLNAME="2" VALIGN="TOP" MOREROWS="0"Visual C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-libcaynCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne class library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CppClasslibCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-librwCOLNAME="2" VALIGN="TOP" MOREROWS="0"Rogue Wave class library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CppClasslibCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-libstlCOLNAME="2" VALIGN="TOP" MOREROWS="0"STL class library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CppClasslibCompatibility with previous releasesThe current release of the C++ code generator is not compatible with previous releases. If you used a previous release of the C++ code generator, refer to REFID="15646" TYPE="XREF-TEXTCOPY"Appendix C, Compatibility With Previous Releases, for more information.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="16183" TYPE="XREF-TEXTCOPY"Chapter 2, Building a C++ Application, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.See REFID="11059" TYPE="XREF-TEXTCOPY"Appendix B, Example Application for a complete example application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23234" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11510" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00415.tif" ORIGSEQ="4" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppobjd.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods (such as pointers) for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. (See REFID="11407" TYPE="XREF-TEXTCOPY"Mapping Attributes for attribute syntax.) The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. Types are abstracted from the data types recognized by the database system and the OOPL environment. The code generator translates the standard types to the target types. Take care when customizing the files that define standard types. Any additions you make must conform to the target language or the generated code may not be usable.For details on customizing the standard types, see REFID="28522" TYPE="XREF-TEXTCOPY"Customizing Types.OperationsYou must specify each operation completely. (See REFID="29516" TYPE="XREF-TEXTCOPY"Mapping Methods for operation syntax.) This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="22643" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to C++ describes how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own., as described in REFID="36160" TYPE="XREF-TEXTCOPY"Chapter 5, Customizing Code Generation. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 Building ID="16183"a C++ ApplicationIntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details not specified in the model.Prerequisitesn The ObjectTeam module C++ Code generation must be active from Object Design phase and Implementation phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="19089" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Steps in code generationThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Configure the C++ environment, ensuring proper installation of the C++ environment (makefile template and class library source files, if applicable).COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate code for your systems in the Implementation phase. During this step, ObjectTeam runs the Tcl scripts that generate the application source code files.Note: System level in the Implementation phase is fundamentally different than System level in other phases. The System files in the Implementation phase are source files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Edit the source files. ObjectTeam generates a large portion of your application code, but not all of it. In this stage, you finish writing the application code.Changes you make to the source files are not lost. When you regenerate the source files, the code generator recognizes your changes and transfers them to the newly generated files.TERM1="code regeneration"TERM1="regeneration" TERM2="code" TERM1="otsh" TERM2="code regeneration"COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate a makefile. The makefile compiles and links the target object (an executable or library).COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Build the executable or library. Execute the makefile to compile and link the target object. If you built an executable, you can now run it.COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Test the executable or library. If necessary: correct the source files, the model, or both; regenerate the files; and return to step 6.Illustration of code generationThe following illustration shows how ObjectTeam generates code. The CDs and CDMs shown at the top are in the Object Design phase.FILENAME="00416.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppcodg.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16880" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your C++ Environment 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34047" TYPE="XREF-TEXTCOPY"Generating C++ Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26759" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15358" TYPE="XREF-TEXTCOPY"Generating a Makefile 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13254" TYPE="XREF-TEXTCOPY"Building the Executable or Library 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18109" TYPE="XREF-TEXTCOPY"Regenerating Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="16880"Components of Code GenerationTcl scripts for code generationThe scripts written for code generation retrieve information from the code generation models, format this information and write the results to source code files. Code generation models are built from the CDs in the Object Design phase.The default TERM1="Tcl" TERM2="script files used for code generation"Tcl scripts used by otsh to generate C++ source code can be found under the M4_home\modules\cplusplus\tcl directory tree. For more information, see REFID="21823" TYPE="XREF-TEXTCOPY"How C++ Code is Generated.TERM1="code regeneration"TERM1="regeneration" TERM2="code"Code TERM1="otsh" TERM2="code regeneration"regenerationCode generation is an automated process that generates H++ and C++ files. ObjectTeam ensures that n You can regenerate these files when you change your model.n Changes that you make to the generated files are preserved when you regenerate the files.For more information, see REFID="18109" TYPE="XREF-TEXTCOPY"Regenerating Code.TERM1="class library" TERM2="including in code generation"ID="35964"Class library integrationYou can include external class libraries in your design. Such an external class library is automatically included during the code generation. In addition, ObjectTeam helps you to understand and reuse existing class libraries through reverse engineering.For more information, see REFID="26044" TYPE="XREF-TEXTCOPY"Reverse Engineering.TERM1="makefile" TERM2="generating"TERM1="otsh" TERM2="code (re)generation"TERM1="otsh" TERM2="makefile generation"Makefile generationYou can have ObjectTeam create a makefile automatically for the C++ compiler that you are using.For more information, see REFID="15358" TYPE="XREF-TEXTCOPY"Generating a Makefile.ConfigurationThe code that ObjectTeam generates could be any object-oriented programming language, but this guide focuses on C++. Before generating C++ code, you must configure your C++ environment. For more information, see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your C++ Environment.ID="40480"Configuring Your C++ EnvironmentWhat is the C++ environmentTERM1="C++" TERM2="configuring - environment"Two elements make up the C++ environment:n The TERM1="compiler" TERM2="specifying - for code generation"C++ compiler you are usingn The TERM1="class library"class libraries used for compiling and linking code generated from associations.Which compiler and which class library will be used is determined by the modules that have been selected.What happens when you configure your C++ environmentWhen you configure your C++ environment, ObjectTeam carries out the following tasks:n The customization file maketmpl.maketmpl is created in the repository on Configuration level. This template file is expanded when you generate a makefile using Target | Generate MakefileCayenne class libraryIf you are using the Cayenne class library (if cpp-libcayn is part of your set of current modules), the following tasks are also carried out:n The required source files are copied from the M4_home directory to the user_environment\src directory,.user_environment is the file path for generated files, as described in the ObjectTeam Project Management Guide.n The required header files are copied from the M4_home directory to the user_environment\include directory. These source and include files must be compiled into a library file before the Cayenne class library can be used (see REFID="24041" TYPE="XREF-TEXTCOPY"How to compile the Cayenne class library).How to configure the C++ environmentΣ To configure the C++ environment:1 Move to Implementation Phase level, or System level in the Implementation phase.2 Select Utilities | Configure C++ Environment.A Monitoring window similar to the following appears.FILENAME="00417.unk" ORIGFILE="pics/cfgcpp.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcodg.fm5.mif"The customization file maketmpl.maketmpl is inserted on Configuration level, and, if applicable, class library source files are copied to your user environment.ID="24041"How to compile the Cayenne class libraryIf you are using the Cayenne class library (see REFID="19089" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation) you must compile the source files that were copied during the configuration of your C++ environment.Σ To compile the Cayenne class library:1 Move to Implementation Phase or Implementation System level.2 Make sure the environment variables required to run your compiler are set properly.3 Select Utilities | Compile libcayn.The Cayenne class library is now compiled. If your environment has been set up properly, the compiled class library is stored in the directory user_environment\lib.Adding new optionsIntegrations of class libraries with ObjectTeam are entirely written in Object Tcl, which allows you to customize them to a large extent. You can add new configuration options, for example, by creating a new module with certain customization files, as described in REFID="32178" TYPE="XREF-TEXTCOPY"Customizing Class Libraries.ID="34047"Generating C++ CodeResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create C++ source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are C++ files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate source files on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate C++.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet. - Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files.ID="10881"How to generate code on System levelΣ To generate (selected) source files for a system from System level of the Implementation phase:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate C++.A cascading menu appears.3 Select one of the following:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then generates the files. The following illustration shows the Monitor window after generating code for a system.FILENAME="00418.unk" ORIGFILE="pics/imp_impl.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcodg.fm5.mif"Location of the source filesSource files are stored in the repository as external files. They are also written to the user_environment\system-name directory, where user_environment is the file path for your generated files. For more information on the user environment, see the ObjectTeam Project Management Guide. The following illustrations show how the source files appear in the Browser. FILENAME="00419.unk" ORIGFILE="pics/sf_oopl.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcodg.fm5.mif"When code is not generatedThe code generator generates code for all classes defined in the current system. It does not generate code in the following situations:n If a CD in the current system contains a class that is defined in another system, the code generator does not generate code for that class.n If a CD in the current system contains a class component (a graphical element) that does not have an associated item (a semantic element), the code generator does not generate code for that class.Note: For more information about components and items, see REFID="29698" TYPE="XREF-TEXTCOPY"Working With Items on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31 in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams, of the ObjectTeam Modeling Guide.ID="17211"The OOPL ModelOOPL ModelThe OOPL Model, which is generated from the CDs in the Object Design phase, contains information used to generate code. The objects in this model are organized in such a way that code can be generated easily.For more informationThe ObjectTeam Programming Interface Guide provides a detailed description of the classes in the OOPL Model. REFID="21823" TYPE="XREF-TEXTCOPY"How C++ Code is Generated discusses the OOPL model in the code generation process.Generated codeThe C++ code generator generates the following files for every class in the CDs of the Object Design phase:TERM1="C++ header file" TERM2="generating"TERM1="generating" TERM2="C++ header file"COLS="3"COLNAME="1" COLWIDTH="102p"COLNAME="2" COLWIDTH="100p"COLNAME="3" COLWIDTH="246p"COLNAME="1" VALIGN="TOP" MOREROWS="0"File (Windows)COLNAME="2" VALIGN="TOP" MOREROWS="0"File (UNIX)COLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"class_name.hCOLNAME="2" VALIGN="TOP" MOREROWS="0"class_name.hxxCOLNAME="3" VALIGN="TOP" MOREROWS="0"TERM1="H++"TERM1="header file"H++ (header) file containing the class definitionCOLNAME="1" VALIGN="TOP" MOREROWS="0"class_name.cppCOLNAME="2" VALIGN="TOP" MOREROWS="0"class_name.cxxCOLNAME="3" VALIGN="TOP" MOREROWS="0"C++ file containing internal details of a classFor more informationSee REFID="22643" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to C++, for more details.ExampleThe following example shows a class from the CD and the matching C++ and H++ files that would be generated. Notice that the function PrintAmount still needs to be implemented.FILENAME="00420.unk" ORIGFILE="pics/acct.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcodg.fm5.mif"Account.h (generated file)...// File : Account.h...#ifndef ACCOUNT_HXX#define ACCOUNT_HXXclass Account {public: // Default constructor/destructor Account(); ~Account(); // User-defined methods void PrintAmount(); // Attribute accessor methods int getAmount() const; void setAmount(int newAmount); // Association accessor methodsprotected: // User-defined methods // Attribute accessor methods // Association accessor methodsprivate: // User-defined methods // Attribute accessor methods // Association accessor methods // User-defined attributes int amount; // Association attribute storage};inline int Account::getAmount() const{ return amount;}inline void Account::setAmount(int newAmount){ amount = newAmount;}#endif /* ACCOUNT_HXX */Account.cpp (generated file):// Start user added include file section// End user added include file section#ifndef ACCOUNT_HXX#include "Account.hxx"#endifAccount::Account(){// Start constructor user section// End constructor user section}Account::~Account(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// End destructor user section}void Account::PrintAmount(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// !! Implement this function !!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int PrintAmount_is_not_yet_implemented;*}// Do not delete this line -- regeneration end markerID="26759"Editing (Generated) Source FilesIntroductionAfter the code has been generated, you can relate each generated H++ and C++ file to a specific class in a CD of the Object Design phase.H++ header filesThe generated header files contain all the necessary include statements and do not need editing.If, however, you choose to edit an H++ file, you can use the round-trip engineering task to move your changes back into your model so that they are not lost when you regenerate code. See REFID="29914" TYPE="XREF-TEXTCOPY"Round-Trip Engineering for more information.C++ source filesThe generated C++ files serve as framework files. They contain a signature for each method (generated from the methods of the classes in the CDs), but the method bodies are empty. You need to fill in the following:n TERM1="C++" TERM2="function"TERM1="C++" TERM2="code from method"TERM1="method" TERM2="body"The bodies of the methods that are defined in the classes. No function is generated for the method. Instead, the following line is generated:// !! Implement this function !!int methodName_is_not_yet_implementedwhere methodName is the name of the method. Until you specify the function, this line results in a warning from the compiler, such as the following (from SUN C++ 2.1):test.cxx, line 5: warning: test_is_not_yet_implemented not usedn The sections that are marked by comments similar to the following://Start ... user ... section//End ... user ... sectionSample C++ source fileThe following is a sample source C++ file. User edits are highlighted.// Start user added include file section#include <iostream.h> // End user added include file section#ifndef ACCOUNT_HXX#include "Account.hxx"#endifAccount::Account(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// End constructor user section}Account::~Account(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// End destructor user section}void Account::PrintAmount(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cout << "The amount is: " << amount << endl; }// Do not delete this line -- regeneration end markerTERM1="source files" TERM2="editing generated -"TERM1="generated source file" TERM2="editing"How to edit source filesΣ To edit source files:1 Move to System level in the Implementation phase.2 In the Information area, double-click on the source file that you want to edit, or select the source file and then select File | Edit.The default Text Editor starts up with the corresponding file in the user environment.Update diagramsDepending on the type of additions you have made to the source files, you may need to edit the CDs to reflect your changes. If you do so, be sure to use Check | Global Model to check the updated diagrams before regenerating the source files.TERM1="makefile" TERM2="generating"ID="15358"Generating a MakefileIntroductionThe compiling and linking of an application or library is based on the specifications in the makefile. A makefile, based on the makefile template, can be created automatically by ObjectTeam.Input for makefile generationThe makefile generation process takes the following elements as input:n The makefile template file (maketmpl.maketmpl)This is a (C++ compiler-specific) customization file that is inserted by ObjectTeam during the configuration of your C++ environment (see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your C++ Environment)n The (generated) source and include files in the current system and their dependency n The name of the target object (executable or library object)Implicit makefile generationObjectTeam automatically creates a makefile if you generate code for entire systems (on Phase level) or new files (on System level) from the Object Design Phase. However, as long as there is no target object present in a system, this automatically generated makefile is not usable for compilation. Therefore, this automatic makefile creation is only useful in the following situation:n A target object (executable or library) exists on Implementation System level.n Utilities | Generate C++ | New is selected on Implementation System levelThe ObjectTeam code generator is now able to determine the name of the target object, the source files (including their dependency), and is therefore able to generate a complete makefile.Explicit makefile generationYou can always explicitly generate (or update) the makefile on Implementation System level using Target | Generate Makefile.Tip: If you have generated code for a system, ObjectTeam automatically generates a makefile. However, since the name of the target object is not known when code is generated for a system, the makefile has to be (re)generated after you have created a target object.How to create a target objectΣ To create a target object:1 Move to System level in the Implementation phase.2 Select File | New | Executable or File | New | Library.3 Enter the name of the new target and click OK.TERM1="generating" TERM2="makefiles"How to generate a makefileΣ To generate a makefile:1 Move to System level in the Implementation phase.2 Select Target | Generate Makefile.The Tcl script makemake.tcl is executed by the ObjectTeam Shell (otsh) and a makefile is generated in the user environment.TERM1="compile"ID="13254"Building the Executable or LibraryPrerequisitesTo successfully compile and run an executable or library, you must have the following:n A makefile; see REFID="15358" TYPE="XREF-TEXTCOPY"Generating a Makefile.n The required source code files (language-specific source files and header files); see REFID="17211" TYPE="XREF-TEXTCOPY"The OOPL Model.n All procedural code in the source files must be completely defined for the implementation of methods resulting from messages sent to a class (such as those that change attribute values, perform computations, or send messages to other classes); see REFID="26759" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files.n The environment properly configured for your chosen language; see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your C++ Environment.n Environment variables set for your compiler (if you have a unique setup).n The selected target object (executable or library) must be the current, writable version; that is, its status must be working.TERM1="compiling" TERM2="source code"TERM1="running" TERM2="executable"ID="14987"How to compile a library or an executableΣ To compile and run the procedure:1 Move to the System level in Implementation model.2 In the Information area, select the library or executable.3 Select one of the following:- Target | Compile- Target | Compile With Options, then specify the compiler options in the dialog boxObjectTeam executes the makefile with the command make -f makefile, reporting progress in a Monitor window.How to run an executableAfter the target object is compiled successfully, it is ready to be used. If your target object is an executable, you can run it.Σ To run an executable:1 Select the executable in the Information area.2 Select Target | Run from the menu bar.Conduct a final check for errorsAs always, before you distribute anything, conduct a quality check of your work. If necessary, fix the source files, fix the ObjectTeam model, regenerate the code, and retest the executable.ID="18109"Regenerating CodeTERM1="code regeneration" TERM2="edited C++ source file"Design changes and code changesObjectTeam supports incremental development. You can generate code from your models, edit that code, and regenerate the code without losing your changes. You can work with models during design and with code during implementation, shifting your focus between the two as necessary.It is, however, important that you make changes where appropriate.n Change the code when you are adding code that is not generated by ObjectTeam (for example, adding method bodies), or when you are making local changes to the code (for example, adding a missing attribute or operation to a class).n Change the model when you are changing the structure of the model (for example, if you are changing the class hierarchy or class associations), or when you are making global changes to the code (for example, if you are changing the name of a class, attribute, or operation).Editing generated filesThe generated C++ files are framework files that need some additions before they can be turned into an executable or library. Comments in the file indicate where you should add code, as described in REFID="26759" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files. When you regenerate a C++ file, the code generator transfers the user-edited sections from the old file to the newly generated file. Warning: The code generator preserves only the comment-delimited areas of the generated C++ file. Changes you make to other areas of the generated C++ file are lost when you regenerate the file.Note: Header files are also regenerated.Editing the ObjectTeam modelIf you modify the ObjectTeam model, you typically regenerate the H++ and C++ source files. As described above, regenerating the H++ file and regenerating the C++ file preserve your changes to the original files.If, in the model, you rename, delete, or change the signature of an operation, the matching function in the generated C++ file is no longer correct. ObjectTeam preserves the original function, however, you must edit the generated file to correct the code. n When you rename or delete an operation, the function in the generated C++ file is marked as OBSOLETE_CODE. In this way, the code generator preserves the function in case you want to rename it or move it to another class.FILENAME="00421.tif" ORIGSEQ="29" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppcodg.fm5.mif"n When you change the signature of an operation, the function in the generated C++ file is marked as OLD_CODE. This allows you to easily find and edit the affected functions.FILENAME="00422.tif" ORIGSEQ="35" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppcodg.fm5.mif"Warning: You must remove OLD_CODE and OBSOLETE_CODE sections before you can regenerate the C++ file.Definition of function signatureA function signature is the heading of the function. For example:void ReturnedRental::getOverview(long int begin, long int end, RentProductSet &result)How to regenerate source code filesΣ To regenerate one or more H++ or C++ source files:1 Move to the System level of the Implementation phase.2 Select the files that you want to regenerate.3 Select Utilities | Generate C++ | Selected.ObjectTeam opens a Monitor window for displaying log messages, then generates the files.For more informationSee REFID="34047" TYPE="XREF-TEXTCOPY"Generating C++ Code for more information about the Utilities | Generate C++ menu item.Chapter 3 Mapping ID="22643"Modeling Data TYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++to C++IntroductionThis chapter explains how particular parts of classes and class specifications are generated into C++ code. It provides short examples of CDs and the results produced when you generate C++ code.Tip: For a complete example application modeled, generated and completed in ObjectTeam see REFID="11059" TYPE="XREF-TEXTCOPY"Example Application.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26569" TYPE="XREF-TEXTCOPY"Mapping ObjectTeam Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11407" TYPE="XREF-TEXTCOPY"Mapping Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29516" TYPE="XREF-TEXTCOPY"Mapping Methods 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24200" TYPE="XREF-TEXTCOPY"Mapping Parameters 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'32COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22663" TYPE="XREF-TEXTCOPY"Constructors 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'37COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22715" TYPE="XREF-TEXTCOPY"Destructors 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'46COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25351" TYPE="XREF-TEXTCOPY"Mapping Inheritance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'49COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34926" TYPE="XREF-TEXTCOPY"Mapping Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'55COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32807" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'86COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29909" TYPE="XREF-TEXTCOPY"Handling External Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'107COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40407" TYPE="XREF-TEXTCOPY"Handling Special ObjectTeam Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'113COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23714" TYPE="XREF-TEXTCOPY"What is Not Supported by the C++ Code Generator 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'122ID="26569"Mapping ObjectTeam ClassesIntroductionIn ObjectTeam, a class in a Class Diagram is generated into a header file and a source file, unless the ObjectTeam class is used to model a special C++ construction. The interface of a class is stored in the header file (className.h), the source code in a C++ source code file (className.cpp).Note: In this chapter, the extensions .h and .cpp are used. These are the extensions for generated C++ files on Windows platforms. On UNIX-based platforms, the extensions are .hxx and .cxx respectively.Special C++ constructionsBesides for modeling C++ classes, you can use ObjectTeam classes for modeling the special C++ constructions (generic) typedef and enum:COLS="2"COLNAME="1" COLWIDTH="145p"COLNAME="2" COLWIDTH="303p"COLNAME="1" VALIGN="TOP" MOREROWS="0"C++ elementCOLNAME="2" VALIGN="TOP" MOREROWS="0"for More detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypedefCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="24618" TYPE="XREF-TEXTCOPY"Mapping Typedef ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Generic TypedefCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="12612" TYPE="XREF-TEXTCOPY"Mapping Generic Typedef ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"EnumCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="13941" TYPE="XREF-TEXTCOPY"Mapping Enum ClassesNote: ObjectTeam does not generate code for classes that have the class property External Class Source specified (see REFID="41268" TYPE="XREF-TEXTCOPY"Editing Class Properties).ID="41268"Editing Class PropertiesIn the Object Design phase, you can define class properties that control the class's implementation and access level within C++. The code generated for a class is, among other things, based on its property values. Σ To edit properties of a class:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select the class name.The class properties appear on the right side of the dialog box.FILENAME="00423.unk" ORIGFILE="pics/dbedprcl.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: Properties can be distributed over multiple property pages. You can select a property page by clicking its tab (Misc, Text).4 The following class properties are available:COLS="4"COLNAME="1" COLWIDTH="133p"COLNAME="2" COLWIDTH="37p"COLNAME="3" COLWIDTH="156p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"External Include ListCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"(in external classes): the header file(s) that must be included if the external class is usedCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="39660" TYPE="XREF-TEXTCOPY"Specifying External Header FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Dynamic DestructorCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"whether virtual must always or never be generatedCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="39716" TYPE="XREF-TEXTCOPY"Specifying a Virtual DestructorCOLNAME="1" VALIGN="TOP" MOREROWS="0"External Class SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"the file(s) whose contents will be copied over to the class's header file. COLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="20009" TYPE="XREF-TEXTCOPY"Specifying an External SourceCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional attribute notes, which do appear in the generated code as C++ commentsCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="14417" TYPE="XREF-TEXTCOPY"Specifying Free Text for a Class5 Change the property values of your choice and click OK.ExampleIn this example CD the class Author is associated with another class, Book.FILENAME="00424.unk" ORIGFILE="pics/authbook.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Author.hThis is a sample of the header file generated for the class Author. Note: Specific elements of generated header files are further discussed in this chapter.//// File : Author.h//...#ifndef AUTHOR_H#define AUTHOR_H 1#include <string.h>// Start user added include file section// End user added include file sectionclass Author {public: // Default constructor/destructor Author(); ~Author(); // User-defined methods static const char* makeNewName(); // Attribute accessor methods const char* getName() const; void setName(const char* newName); // Association accessor methodsprotected: // User-defined methods // Attribute accessor methods // Association accessor methodsprivate: // User-defined methods // Attribute accessor methods // Association accessor methods // User-defined attributes char name[41]; // Association attribute storage};// Do not delete this line -- regeneration end markerinline const char* Author::getName() const{ return name;}inline void Author::setName(const char* newName){ strcpy (name, newName);}#endif // AUTHOR_HAuthor.cppThis is a sample of the source file generated for the class Author. Note: Specific elements of generated source files are further discussed in this chapter.//// File : Author.cpp//...#ifndef AUTHOR_H#include "Author.h"#endif// Start user added include file section// End user added include file sectionAuthor::Author(){ // Start constructor user section // End constructor user section}Author::~Author(){ // Start destructor user section // End destructor user section}const char* Author::makeNewName(){ // !! Implement this function !! int makeNewName_is_not_yet_implemented;}TERM1="free text" TERM2="property"TERM1="property" TERM2="free text"Specifying ID="14417"Free Text for a ClassFree TextYou can attach notes to your classes using the class property Free Text. What you specify as free text appears as comment lines in the generated header file.ExampleIn the following example, free text has been specified for the class Person:Generated header file:...// File : Person.h...// Start user added include file section// End user added include file section// This is Free Text as it was entered for the class Personclass Person {...};...How to enter free textYou enter free text for a class through the following property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextFor more informationSee REFID="41268" TYPE="XREF-TEXTCOPY"Editing Class PropertiesID="11407"Mapping AttributesIntroductionTERM1="attribute" TERM2="mapping of"TERM1="mapping" TERM2="attribute"TERM1="Java, generated" TERM2="attribute"ObjectTeam maps data attributes of normal ObjectTeam classes to C++ attributes.Attribute syntaxIn ObjectTeam, the following syntax is used to specify data attributes for a class:[ / | $ | *] name : type = initial-valuewhereCOLS="3"COLNAME="1" COLWIDTH="61p"COLNAME="2" COLWIDTH="123p"COLNAME="3" COLWIDTH="262p"COLNAME="1" VALIGN="TOP" MOREROWS="0"special CHARCOLNAME="2" VALIGN="TOP" MOREROWS="0"indicatesCOLNAME="3" VALIGN="TOP" MOREROWS="0"detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"/COLNAME="2" VALIGN="TOP" MOREROWS="0" a derived attributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ignored by the C++ code generatorCOLNAME="1" VALIGN="TOP" MOREROWS="0"$COLNAME="2" VALIGN="TOP" MOREROWS="0" a class attribute (static)COLNAME="3" VALIGN="TOP" MOREROWS="0"See REFID="39515" TYPE="XREF-TEXTCOPY"Specifying Static AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"*COLNAME="2" VALIGN="TOP" MOREROWS="0" a key attributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"See REFID="35790" TYPE="XREF-TEXTCOPY"Specifying Mandatory AttributesData typesYou must specify the data type of each attribute.See REFID="19914" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types for more information. TERM1="attribute" TERM2="default value"TERM1="default value, for attribute"TERM1="initial value, for attribute"You can also specify a default value for attributes.ID="29362"Editing Attribute PropertiesIn the Object Design phase, you define properties of data attributes. These properties define the access level of the attribute, as well as whether or not the attribute is mandatory (non-nullable).The code generated for a data attribute is based on its properties.To edit attribute properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an attribute name from the list in the left-hand pane of the dialog box.The attribute properties appear on the right side of the dialog box.FILENAME="00425.unk" ORIGFILE="pics/dbedprat.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: Properties can be distributed over multiple property pages. You can select a property page by clicking its tab (Misc, Text).The following attribute properties are available:COLS="4"COLNAME="1" COLWIDTH="133p"COLNAME="2" COLWIDTH="39p"COLNAME="3" COLWIDTH="156p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PageCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"NullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"if an attribute is included in the parameter list of the constructorCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="35790" TYPE="XREF-TEXTCOPY"Specifying Mandatory AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The section in which the attribute's generated accessor methods must be stored: Public, Protected or PrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="29557" TYPE="XREF-TEXTCOPY"Specifying Attribute Accessor Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional attribute notes, which do appear in the generated code as C++ commentsCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="12435" TYPE="XREF-TEXTCOPY"Specifying Attribute Free TextIn the remainder of this section, these properties are discussed further.4 Change the property values of your choice and click OK.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19914" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35790" TYPE="XREF-TEXTCOPY"Specifying Mandatory Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29557" TYPE="XREF-TEXTCOPY"Specifying Attribute Accessor Method Access 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39515" TYPE="XREF-TEXTCOPY"Specifying Static Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12435" TYPE="XREF-TEXTCOPY"Specifying Attribute Free Text 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18ID="19914"Specifying Attribute Data TypesData typesEvery data attribute must have a type. TERM1="data type" TERM2="for attribute"TERM1="attribute" TERM2="data type"Specify either a standard data type, such as int or char, or the name of another (user-defined) class. For example:COLS="2"COLNAME="1" COLWIDTH="150p"COLNAME="2" COLWIDTH="298p"COLNAME="1" VALIGN="TOP" MOREROWS="0"attr:shortCOLNAME="2" VALIGN="TOP" MOREROWS="0"(C++ standard type)COLNAME="1" VALIGN="TOP" MOREROWS="0"attr:TimeCOLNAME="2" VALIGN="TOP" MOREROWS="0"(class type)Standard data typesThe standard data types are defined in the customization file TERM1="stand_types customization file"stand_types.stand_types. These are the data types that are valid in the Object Design phase.The translation between standard data types and C++ data types is defined by the TERM1="lang_types customization file"lang_types.TERM1="lang_types customization file"lang_types customization file. These are the translations used by the C++ code generator.Example Class:FILENAME="00426.unk" ORIGFILE="pics/daex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Person.h (generated file):...class Person {public: ... // Attribute accessor methodsint getAge() const; void setAge(int newAge); ...private:... // User-defined attributesint age;...};...Customizing the standard data typesYou can add additional data types to the list of standard types by editing the stand_types customization file. If you add additional standard types, you must also provide translations for those data types by editing the lang_types customization file.For more informationThe ObjectTeam Customization Guide describes how to create and edit customization files. The stand_types and lang_types customization files are ASCII files that can be edited using any text editor.A class as data typeThe indicated type of the attribute /totalPlayTime is the class Time. This class is defined in the same system.Note: The class Time could also have been an external class, a class that is defined in another system in the same phase. For more details on external classes, see REFID="29909" TYPE="XREF-TEXTCOPY"Handling External Classes.FILENAME="00427.unk" ORIGFILE="pics/cltype2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Example code (generated)The header file Time.h is added to the include section of the generated file AudioMedia.h. ...// File : AudioMedia.h...#ifndef TIME_H#include "Time.h"#endif...class AudioMedia { ...public: ...// Attribute accessor methods ... Time getTotalPlayTime() const; void setTotalPlayTime(Time newTotalPlayTime);...private: ... // User-defined attributes ... Time totalPlayTime;...ID="35790"Specifying Mandatory AttributesIntroductionMandatory attributes in Cayenne can be:n non-nullable attributesn Key attributesID="20503"Non-nullable attributesA non-nullable attribute is an attribute that must have a value. In C++, attributes are added to the TERM1="constructor" TERM2="not nullable attribute"parameter list of the constructor if they are non-nullable. Note: Non-key attributes are nullable by default.ID="37907"Key attributesAlternatively, you could make an attribute a key attribute if you want it to be non-nullable. Key attributes are data attributes in an ObjectTeam class with a leading asterisk (*). The generated code for non-nullable attributes and key attributes is identical but key attributes are immediately visible in a CD, whereas an attribute's state of being non-nullable is "hidden" behind a property.Note: Key attributes are non-nullable by default.ExampleHere you can see the difference between code generated for nullable and non-nullable attributes:COLS="3"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="84p"COLNAME="3" COLWIDTH="309p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"NullableCOLNAME="3" VALIGN="TOP" MOREROWS="0" constructor (generated header file)COLNAME="1" VALIGN="TOP" MOREROWS="0"age: intCOLNAME="2" VALIGN="TOP" MOREROWS="0"default or yesCOLNAME="3" VALIGN="TOP" MOREROWS="0"...public: // Default constructor/destructor Person(); ~Person();...COLNAME="1" VALIGN="TOP" MOREROWS="0"age: intCOLNAME="2" VALIGN="TOP" MOREROWS="0"noCOLNAME="3" VALIGN="TOP" MOREROWS="0"...public: // Default constructor/destructor Person(int i_age); ~Person();...Note: The code generated for the attribute *age: int with a default nullability is identical to the code generated for the attribute age: int (with a nullability of No).How to specify the nullabilityYou specify an attribute's nullability through the following property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"NullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscFor more informationSee REFID="29362" TYPE="XREF-TEXTCOPY"Editing Attribute PropertiesID="29557"Specifying Attribute Accessor Method AccessAttribute accessor methodsTERM1="attribute" TERM2="access method"TERM1="attribute property" TERM2="access method"TERM1="access property" TERM2="for attribute access method"TERM1=""TERM1="Java, generated" TERM2="attribute access method"TERM1="attribute access method"TERM1="method" TERM2="attribute access"An attribute accessor method is a special type of method that gets (reads) and sets (writes) an attribute's value. By default, the access level of these accessor methods is Public.Read and Write accessor methodsThe setting specified in the Read field affects the access level of the attribute accessor method getattributeName; the setting specified in the Write field the attribute accessor method setattributeName.Note: The access level of the user-defined attribute itself is always private.Access level typesThe following levels of access can be selected for accessor methods (Read and Write):n Public (default). A public method is accessible anywhere within the program.n Protected. A protected method behaves as a public method to a derived class but as a private method to the rest of the program.n Private. A private method can only be accessed by the other methods of its class and by friends of its class.n None. No accessor methods are generated.How to specify the access levelYou specify an attribute accessor method's access level through the following properties:COLS="3"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="127p"COLNAME="3" COLWIDTH="192p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Property GroupCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"ReadCOLNAME="3" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"WriteCOLNAME="3" VALIGN="TOP" MOREROWS="0"For more informationSee REFID="29362" TYPE="XREF-TEXTCOPY"Editing Attribute PropertiesID="39515"Specifying Static AttributesIntroductionIn C++, the need for unsafe global variables can be minimized by declaring a shared member static. In ObjectTeam, you indicate a data attribute as being static by using a leading dollar sign ($). The attribute itself and its accessor methods will then be made static.How to specify a static attributeYou specify a static (class) attribute by adding a leading dollar sign ($) to the attribute name.ExampleIn the example class depicted below, the data attribute totalCounters is a static attribute. The default value of this attribute is 42.FILENAME="00428.unk" ORIGFILE="pics/sticatt.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Counter.h (generated file):...class Counter {public: ... // Attribute accessor methods ...static int getTotalCounters();static void setTotalCounters(int newTotalCounters);...private: ... // User-defined attributes ...static int totalCounters /* = 42 */;...Counter.cpp (generated file):...int Counter::totalCounters = (42);...Note: This line is only generated if the static attribute has a default value.ID="12435"Specifying Attribute Free TextFree TextFree text entered for attributes are inserted as C++ comments in the generated header file.ExampleIn the following example, free text has been specified for the attribute age:Generated header file:...class myClass {private: ... // Free Text entered for the attribute 'age' int age; ...};...How to enter free textYou enter an attribute's free text through the following property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextFor more informationSee REFID="29362" TYPE="XREF-TEXTCOPY"Editing Attribute PropertiesID="29516"Mapping MethodsID="31495"IntroductionIn C++, methods consist of a method definition in the header file and the C++ source code that is executed when the method is called in the source file. The ObjectTeam C++ code generator generates the method definition and everything else that can be determined from the ObjectTeam model. You have to provide the method implementation code yourself. The following generated lines in the source file remind you of this:// !! Implement this method !!methodType methodName_is_not_yet_implemented;Method parametersMost methods include parameters, which allow the caller to pass information to and from the object that the method is manipulating.For more information on method parametersSee REFID="24200" TYPE="XREF-TEXTCOPY"Mapping Parameters.Automatically generated methodsA user-defined method defined for an ObjectTeam class is generated in a C++ method. Additionally, the C++ code generator generates the following special methods automatically. You do not have to specify them in an ObjectTeam class:n Attribute accessor methods, as described in REFID="11407" TYPE="XREF-TEXTCOPY"Mapping Attributes.n Association access methods, as described in REFID="10004" TYPE="XREF-TEXTCOPY"Mapping Unidirectional and Bidirectional Associations.Method syntaxIn ObjectTeam, you use the following syntax to specify user-defined methods in a class:[ $ ] name ( [ parameter-list ] ) [ : return_type ] [ {abstract} ]where:COLS="3"COLNAME="1" COLWIDTH="132p"COLNAME="2" COLWIDTH="163p"COLNAME="3" COLWIDTH="153p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special CharacterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="3" VALIGN="TOP" MOREROWS="0"DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"$COLNAME="2" VALIGN="TOP" MOREROWS="0"a static functionCOLNAME="3" VALIGN="TOP" MOREROWS="0"See REFID="18829" TYPE="XREF-TEXTCOPY"Specifying Static MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"the name of the methodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Some special characters are not allowed in operator names. See REFID="35965" TYPE="XREF-TEXTCOPY"Overloading Operators for alternatives.COLNAME="1" VALIGN="TOP" MOREROWS="0"parameter-listCOLNAME="2" VALIGN="TOP" MOREROWS="0"an (optional) list of parameters, separated by commasCOLNAME="3" VALIGN="TOP" MOREROWS="0"See REFID="24200" TYPE="XREF-TEXTCOPY"Mapping ParametersCOLNAME="1" VALIGN="TOP" MOREROWS="0"return_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"the (optional) return type of the method: a standard type or a classCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"{abstract}COLNAME="2" VALIGN="TOP" MOREROWS="0"a pure virtual functionCOLNAME="3" VALIGN="TOP" MOREROWS="0"See REFID="29156" TYPE="XREF-TEXTCOPY"Specifying Pure Virtual MethodsID="34259"Editing method propertiesYou use method properties to provide input to the code generator, such as the access level of method and whether it must be generated as a constant function, a virtual function or an inline function. The code generated for a method is partly based on its properties.Σ To edit method properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a method name from the list in the left-hand pane of the dialog box.The method properties appear on the right side of the dialog box.FILENAME="00429.unk" ORIGFILE="pics/dbedprmt.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: Properties can be distributed over multiple property pages. You can select a property page by clicking its tab (Misc, Text).The following method properties are available:COLS="4"COLNAME="1" COLWIDTH="133p"COLNAME="2" COLWIDTH="39p"COLNAME="3" COLWIDTH="156p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PageCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The type modifier of the method COLNAME="4" VALIGN="TOP" MOREROWS="0"This works similar to parameter type modifiers (see REFID="40884" TYPE="XREF-TEXTCOPY"Modifying Parameter Types)COLNAME="1" VALIGN="TOP" MOREROWS="0"Constant FunctionCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"a constant functionCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="31580" TYPE="XREF-TEXTCOPY"Specifying Constant FunctionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Dynamically BoundCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"a virtual functionCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="32742" TYPE="XREF-TEXTCOPY"Specifying Virtual MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Inline MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"an inline method (function)COLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="30308" TYPE="XREF-TEXTCOPY"Specifying Inline MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The access level of the generated methodCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="22538" TYPE="XREF-TEXTCOPY"Specifying Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional method comments, which do appear in the generated code as commentsCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="38516" TYPE="XREF-TEXTCOPY"Specifying Method Free TextIn the remainder of this section, these properties are discussed further.4 Change the property values of your choice and click OK.ID="22538"Specifying Method AccessAccess level typesThe following levels of access can be selected for methods:n Public (default). A public method is accessible anywhere within the program.n Protected. A protected method behaves as a public method to a derived class but as a private method to the rest of the program.n Private. A private method can only be accessed by the other methods of its class and by friends of its class.ID="31329"VisibilityYou can display the access level of methods in your diagram by checking Options | Show Visibility in the Class Diagram Editor. Method names will then be displayed with the following leading characters indicating the method's access level:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="318p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special characterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"+COLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"#COLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"-COLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateThese special characters can also be used to set the access level of methods. Typing a hatch sign (#) before a method name will set the access level of the method to Protected, for example. Warning: The special characters only work if the menu entry Options | Show Visibility in the Class Diagram Editor has been checked. Otherwise, the special characters will just be regarded as part of the method name.How to specify the access levelThere are two ways of specifying a method's access level type:n Using the method property Method Access.This property can be found on the property page Misc in the Edit Properties dialog box.n Typing a special character before the method name (see REFID="31329" TYPE="XREF-TEXTCOPY"Visibility)For more informationSee REFID="34259" TYPE="XREF-TEXTCOPY"Editing method propertiesExampleThe following example methods have different access level specifications:COLS="2"COLNAME="1" COLWIDTH="205p"COLNAME="2" COLWIDTH="243p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod1 (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod2 (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod3 (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateGenerated header file:...class myClass {public: ... // User-defined methods String myMethod1(); ...protected: // User-defined methods String myMethod2(); ...private: // User-defined methods String myMethod3(): ...};...ID="31580"Specifying Constant FunctionsHow to specify a constant functionYou specify a constant method (function) through the following property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Constant FunctionCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscFor more informationSee REFID="34259" TYPE="XREF-TEXTCOPY"Editing method propertiesExampleThe first method is a constant function, the second not:COLS="3"COLNAME="1" COLWIDTH="141p"COLNAME="2" COLWIDTH="79p"COLNAME="3" COLWIDTH="226p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Constant FunctionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generated Method (header file)COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"YesCOLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod () const;COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoCOLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod ();ID="32742"Specifying Virtual MethodsHow to specify a virtual functionYou specify a virtual method (function) through the following property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Dynamically BoundCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscFor more informationSee REFID="34259" TYPE="XREF-TEXTCOPY"Editing method propertiesExample The first method is virtual, the second not.COLS="3"COLNAME="1" COLWIDTH="141p"COLNAME="2" COLWIDTH="79p"COLNAME="3" COLWIDTH="226p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Dynamically BoundCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generated Method (header file)COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"YesCOLNAME="3" VALIGN="TOP" MOREROWS="0"virtual String myMethod ();COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoCOLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod ();Note: This property specifies virtual functions. To specify pure virtual functions, use the keyword {abstract} (see REFID="29156" TYPE="XREF-TEXTCOPY"Specifying Pure Virtual Methods).ID="29156"Specifying Pure Virtual MethodsAbstract classAn abstract class is a class that can be used only as a base class of some other class. A class is abstract if it has at least one pure virtual function. A pure virtual function must not be implemented in the abstract class but in a subclass derived from the abstract class. Therefore, no method body is generated for a pure virtual function.How to specify a pure virtual methodYou specify a pure virtual method (function) by adding the following trailing keyword to the method name:{abstract}ExampleThe first method is abstract, the second is not.COLS="2"COLNAME="1" COLWIDTH="189p"COLNAME="2" COLWIDTH="261p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Method SpecificationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Generated Method(Header File)COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): String {abstract}COLNAME="2" VALIGN="TOP" MOREROWS="0"virtual String myMethod() = 0;COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"String myMethod();ID="30308"Specifying Inline MethodsHow to specify an inline methodYou specify an inline method (function) through the following method property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Inline MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscFor more informationSee REFID="34259" TYPE="XREF-TEXTCOPY"Editing method propertiesLocation of the implementationUnlike other methods, the implementation of inline methods is stored in the generated header file.ExampleThe first method is inline, the second not.COLS="3"COLNAME="1" COLWIDTH="141p"COLNAME="2" COLWIDTH="79p"COLNAME="3" COLWIDTH="333p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Inline MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generated Method ImplementationCOLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): intCOLNAME="2" VALIGN="TOP" MOREROWS="0"YesCOLNAME="3" VALIGN="TOP" MOREROWS="0"(header file):inline int myClass::myMethod(){ // !! Implement this function !! int myMethod_is_not_yet_implemented;}COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): intCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoCOLNAME="3" VALIGN="TOP" MOREROWS="0"(source file):int myClass::myMethod(){ // !! Implement this function !! int myMethod_is_not_yet_implemented;}ID="18829"Specifying Static MethodsStatic methodUse a leading dollar sign ($) if you want a method to be generated as static method.How to specify a static methodYou specify a static method (function) by adding a leading dollar sign ($) to the method name.ExampleThe first method is static, the second not.COLS="2"COLNAME="1" COLWIDTH="136p"COLNAME="2" COLWIDTH="312p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Generated Method(Header File)COLNAME="1" VALIGN="TOP" MOREROWS="0"$myMethod (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"static String myMethod();COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod (): StringCOLNAME="2" VALIGN="TOP" MOREROWS="0"String myMethod();ID="35965"Overloading TERM1="operator" TERM2="overloaded"OperatorsIntroductionYou can overload operators in ObjectTeam by specifying the operator's name as method. In some cases, you can use the C++ operators' syntax; in other cases, you must use specific ObjectTeam operator syntax. The ObjectTeam operator syntax is translated into C++ operators by the code generator.Operator typesThe following table lists the operators that you can use:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"C++ OperatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Method in ObjectTeamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator deleteCOLNAME="2" VALIGN="TOP" MOREROWS="0"operatordeleteCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator newCOLNAME="2" VALIGN="TOP" MOREROWS="0"operatornewCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator!COLNAME="2" VALIGN="TOP" MOREROWS="0"operator!COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator!=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorNEQCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator%COLNAME="2" VALIGN="TOP" MOREROWS="0"operator%COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator%=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_MODCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator&COLNAME="2" VALIGN="TOP" MOREROWS="0"operator&COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator&&COLNAME="2" VALIGN="TOP" MOREROWS="0"operator&&COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator&=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_AMPERCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator()COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorFUNCCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator*COLNAME="2" VALIGN="TOP" MOREROWS="0"operator*COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator*=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_STARCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator+COLNAME="2" VALIGN="TOP" MOREROWS="0"operator+COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator++COLNAME="2" VALIGN="TOP" MOREROWS="0"operator++COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator+=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_PLUSCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator,COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorCOMMACOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator-COLNAME="2" VALIGN="TOP" MOREROWS="0"operator-COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator--COLNAME="2" VALIGN="TOP" MOREROWS="0"operator--COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator-=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_MINCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator->COLNAME="2" VALIGN="TOP" MOREROWS="0"operator->COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator->*COLNAME="2" VALIGN="TOP" MOREROWS="0"operator->*COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator/COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorDIVCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator/=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_DIVCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator<COLNAME="2" VALIGN="TOP" MOREROWS="0"operator<COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator<<COLNAME="2" VALIGN="TOP" MOREROWS="0"operator<<COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator<<=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_LSHIFTCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator<=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorLECOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASSIGNCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator==COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorEQCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator>COLNAME="2" VALIGN="TOP" MOREROWS="0"operator>COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator>=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorGECOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator>>COLNAME="2" VALIGN="TOP" MOREROWS="0"operator>>COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator>>=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_RSHIFTCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator[]COLNAME="2" VALIGN="TOP" MOREROWS="0"operator[]COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator^COLNAME="2" VALIGN="TOP" MOREROWS="0"operator^COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator^=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_CIRCUMCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator|COLNAME="2" VALIGN="TOP" MOREROWS="0"operator|COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator|=COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorASS_PIPECOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator||COLNAME="2" VALIGN="TOP" MOREROWS="0"operator||COLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator~COLNAME="2" VALIGN="TOP" MOREROWS="0"operator~Conversion OperatorsConversion operators specify a conversion from a class to the type specified by the name of the conversion type.You can specify ObjectTeam methods following a certain syntax to force conversion operator generation. The syntax is:type_conv(): conversionTypeNameYou can specify the conversionTypeName further through the method type property Type Modifier (see REFID="34259" TYPE="XREF-TEXTCOPY"Editing method properties).The following table lists some examples of conversion operators:COLS="3"COLNAME="1" COLWIDTH="202p"COLNAME="2" COLWIDTH="147p"COLNAME="3" COLWIDTH="106p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Conversion OperatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Method in ObjectTeamCOLNAME="3" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="1" VALIGN="TOP" MOREROWS="0"operator int ();COLNAME="2" VALIGN="TOP" MOREROWS="0"type_conv() : integerCOLNAME="3" VALIGN="TOP" MOREROWS="0"--COLNAME="1" VALIGN="TOP" MOREROWS="0"operator char &();COLNAME="2" VALIGN="TOP" MOREROWS="0"type_conv() : charCOLNAME="3" VALIGN="TOP" MOREROWS="0"ReferenceCOLNAME="1" VALIGN="TOP" MOREROWS="0"operator const char *();COLNAME="2" VALIGN="TOP" MOREROWS="0"type_conv() : charCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pointer to ConstID="38516"Specifying Method Free TextFree textFree text entered for methods are inserted as C++ comments in the generated header file.How to enter free textYou enter a method's free text through the following property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextFor more informationSee REFID="34259" TYPE="XREF-TEXTCOPY"Editing method propertiesExampleIn the following example, free text has been specified for the method myMethod:Generated header file:...class myClass {public: ... // Free Text entered for the method myMethod int myMethod(); ...};...Generated source file:...// Free Text for method myMethodint myClass::myMethod(){ // !! Implement this function !! int myMethod_is_not_yet_implemented;}...ID="24200"Mapping ParametersIntroductionParameters can optionally be added to methods. Method parameters are used by the caller of the method to provide input values to the method, to hold output values from the method or both. Parameter SyntaxThe parameters in the parameter list are separated by commas. Every parameter needs to have a type, which can either be a standard type or a (user-defined) class:(par_name:par_type, par_name:par_type, ...)ID="15651"Editing parameter propertiesΣ To edit parameter properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a parameter name from the list in the left-hand pane of the dialog box.The parameter properties appear on the right side of the dialog box.FILENAME="00430.unk" ORIGFILE="pics/dbedprpm.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: Properties can be distributed over multiple property pages. You can select a property page by clicking its tab (Misc, Text).The following parameter properties are available:COLS="4"COLNAME="1" COLWIDTH="94p"COLNAME="2" COLWIDTH="39p"COLNAME="3" COLWIDTH="126p"COLNAME="4" COLWIDTH="166p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PageCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The modifier for the parameter typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="40884" TYPE="XREF-TEXTCOPY"Modifying Parameter TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The default value of a parameterCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="15392" TYPE="XREF-TEXTCOPY"Specifying a Parameter's Default ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional method commentsCOLNAME="4" VALIGN="TOP" MOREROWS="0"These comments are not added to the generated filesIn the remainder of this section, these properties are discussed further.4 Change the property values of your choice and click OK.ID="40884"Modifying Parameter TypesIntroductionYou can use the parameter property Type Modifier to specify in which form the parameter type must be used:COLS="3"COLNAME="1" COLWIDTH="121p"COLNAME="2" COLWIDTH="153p"COLNAME="3" COLWIDTH="252p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Example Method in CDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generated Method (header file)COLNAME="1" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="2" VALIGN="TOP" MOREROWS="0"myMethod (i: int)COLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod(int i);COLNAME="1" VALIGN="TOP" MOREROWS="0"ReferenceCOLNAME="2" VALIGN="TOP" MOREROWS="0"myMethod (i: int)COLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod(int& i);COLNAME="1" VALIGN="TOP" MOREROWS="0"Reference to ConstCOLNAME="2" VALIGN="TOP" MOREROWS="0"myMethod (i: int)COLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod(const int& i);COLNAME="1" VALIGN="TOP" MOREROWS="0"PointerCOLNAME="2" VALIGN="TOP" MOREROWS="0"myMethod (i: int)COLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod(int* i);COLNAME="1" VALIGN="TOP" MOREROWS="0"Pointer to ConstCOLNAME="2" VALIGN="TOP" MOREROWS="0"myMethod (i: int)COLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod(const int* i);COLNAME="1" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"myMethod (i: int)COLNAME="3" VALIGN="TOP" MOREROWS="0"String myMethod(int i);Note: If the type modifier Default is chosen, the code generator determines if a pointer or a type by value is generated.The property Type Modifier can also be used to modify the type of a method.Location of include statementThe include statement for a type is usually placed in the generated source file, and a forward declaration is placed in the generated header file. However, if the type modifier Value has been selected, the include statement is placed in the header file.User-defined Type ModifierInstead of selecting a type modifier from the list, you can also enter a user-defined one using the parameter property Type Modifier. You can enter any string in combination with the variable ~$name, which indicates the type's name:For the following user-defined type modifier, for example, the same code as for the type modifier Pointer will be generated:COLS="3"COLNAME="1" COLWIDTH="96p"COLNAME="2" COLWIDTH="156p"COLNAME="3" COLWIDTH="195p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Example Method in CDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generated Operation (header file)COLNAME="1" VALIGN="TOP" MOREROWS="0"~$name *COLNAME="2" VALIGN="TOP" MOREROWS="0"myMethod (i: int)COLNAME="3" VALIGN="TOP" MOREROWS="0"void myMethod(int * i);Note: If ~$name is not found in the string, the string is appended to the type name and used as C++ type.How to modify a parameter typeYou modify a parameter type through the following parameter property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscFor more information on editing parameter propertiesSee REFID="15651" TYPE="XREF-TEXTCOPY"Editing parameter propertiesID="15392"Specifying a Parameter's Default ValueDefault valueIn a call to a method, valid values for the method's parameters must be supplied, unless a default value has been specified. If a parameter has a default value, the parameter value can be specified in the call, overriding the default value. Parameters with a default value are usually referred to as optional parameters; parameters without a default value as required parameters.How to specify a default valueYou specify a parameter's default value through the following parameter property:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscFor more information on editing parameter propertiesSee REFID="15651" TYPE="XREF-TEXTCOPY"Editing parameter propertiesOrder of parametersIf you specify multiple parameters in a parameter list, make sure that you always specify parameters with a default value after parameters without a default value.ExampleIn the following example, the default value 42 has been specified for parameter my2ndParameter:COLS="2"COLNAME="1" COLWIDTH="261p"COLNAME="2" COLWIDTH="339p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Example MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"Generated Method (header file)COLNAME="1" VALIGN="TOP" MOREROWS="0"myMethod(my1stParameter:String, my2ndParameter:int)COLNAME="2" VALIGN="TOP" MOREROWS="0"void myMethod(String my1stParameter, int my2ndParameter= 42);ID="22663"ConstructorsIntroductionThe C++ code generator generates a constructor for:n Classes with a method $createn Classes with neither a $create nor a $create (parameterList) methodThe code generator does not generate a constructor for:n Classes with a method $create (parameterList) Note: The parameterList can be empty.You have to specify the implementation of the constructor yourself, just like user-defined methods.Elements of the constructorThe constructor consists of the following elements:COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="358p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ElementCOLNAME="2" VALIGN="TOP" MOREROWS="0"RemarkCOLNAME="1" VALIGN="TOP" MOREROWS="0"SignatureCOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the classList of parameters that are involved in the construction of the classCOLNAME="1" VALIGN="TOP" MOREROWS="0"BodyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains a section for user editsThe body of the TERM1="destructor"destructor also contains a section for user editsWhat does the constructor handleThe constructor handles the following:n TERM1="data attribute" TERM2="constructor"Attributes that must have a value (not nullable attributes)n TERM1="parameter" TERM2="base class"TERM1="class" TERM2="base"TERM1="base class" TERM2="parameter"Parameters of base classesn TERM1="mandatory association" TERM2="and constructor"Mandatory associationsConstructor Examples: Base Classes$createThe source code generated for the following two example classes is identical:Example class:FILENAME="00431.unk" ORIGFILE="pics/constr1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"FILENAME="00432.unk" ORIGFILE="pics/constr0.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Time.h (generated constructor)...class Time {public: // Default constructor/destructor Time(); ~Time(); ...};...Time.cpp (generated constructor)...Time::Time(){ // Start constructor user section // End constructor user section}...Note: You must add the $create method for classes with only one attribute, otherwise the C++ code generator will generate a typedef construction for these classes (see REFID="24618" TYPE="XREF-TEXTCOPY"Mapping Typedef Classes).The C++ code generator regards classes without any attributes or methods as external classes, unless a $create method is specified.$create with non-nullable attributesThe C++ code generator adds non-nullable attributes (see REFID="35790" TYPE="XREF-TEXTCOPY"Specifying Mandatory Attributes) to the parameter list of the constructor:If hour in the previous example was a non-nullable attribute, for example, the generated code would be:Time.cpp (generated constructor)...class Time { public: // Default constructor/destructor Time(int i_hour); ~Time();...};...Note: The same effect could be achieved by making the hour attribute a key attribute (see REFID="35790" TYPE="XREF-TEXTCOPY"Specifying Mandatory Attributes).$create()The C++ code generator does not create a constructor for classes with a $create method for which an (empty) parameter list is specified. You must specify details such as inheritance and data attribute initialization. Note: All your edits are saved during regeneration.Example class:FILENAME="00433.unk" ORIGFILE="pics/constr2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Time.h (generated constructor)...class Time {public:...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// User-defined methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Time();...};...Time.cpp (generated constructor)...Time::Time(){ // !! Implement this function !! // int create_is_not_yet_implemented;}...$create (parameterList)The code generated for a create method for which parameters have been specified is similar to the code generated for a $create() method.Example class:FILENAME="00434.unk" ORIGFILE="pics/constr3.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Time.h (generated constructor)...class Time {public:...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// User-defined methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Time(int hour, int min, int sec);...};...Time.cpp (generated constructor)...Time::Time(int hour, int min, int sec){ // !! Implement this function !! // int create_is_not_yet_implemented;}...Constructor Examples: Sub ClassesIntroductionThe (first) $create method in a base class determines the constructor generated in the sub class.Base class having a $create methodEmployee is a sub class of Person:FILENAME="00435.unk" ORIGFILE="pics/ctrinh1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Employee.cpp (generated constructor)...Employee::Employee() :Person(){ // Start constructor user section // End constructor user section}...Base class having two $create (...) methodsExample class:FILENAME="00436.unk" ORIGFILE="pics/ctorex4.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Employee.cpp (generated file):...Employee::Employee(char c) :Person(c){ // Start constructor user section // End constructor user section}...Base class having a $create and a $create (...) methodExample class:FILENAME="00437.unk" ORIGFILE="pics/ctorex5.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Employee.cpp (generated file):...Employee::Employee() :Person(){ // Start constructor user section // End constructor user section}...Base class having a $create (...) and a $create methodExample class:FILENAME="00438.unk" ORIGFILE="pics/ctorex6.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Employee.cpp (generated file):...Employee::Employee(int i) :Person(i){ // Start constructor user section // End constructor user section}...Multiple InheritanceExample Class:FILENAME="00439.unk" ORIGFILE="pics/ctrminh.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"VestedHourlyEmployee.cpp (generated constructor):...VestedHourlyEmployee::VestedHourlyEmployee() :VestedEmployee(),HourlyEmployee(){ // Start constructor user section // End constructor user section}...ID="22715"DestructorsIntroductionA destructor destroys an object of a class. It is called when it goes out of scope or is no longer referenced.When a destructor is generatedThe C++ code generator generates a destructor for:n Classes with a method $createn Classes with no method $create method at allExampleThe following piece of code shows a destructor generated by ObjectTeam:Book.h (generated file)...class Book {public: // Default constructor/destructor ... ~Book();...};...When a destructor is not generatedThe code generator does not generate a destructor for:n Classes with a method $create for which a parameter list is specified. Note: This parameter list can be empty, e.g.: $create().You have to specify the implementation of the destructor yourself, just like user-defined methods.ID="39716"Specifying a Virtual DestructorIntroductionSpecifying the destructor of a base class as virtual guarantees that the destructors of all the sub classes in the class hierarchy will also be called if the base class's destructor is called.When a virtual destructor is generatedBy default, the C++ code generator generates a virtual destructor if the following is true:n the class has sub classesn the class has virtual methodsUsing the Dynamic Destructor propertyUse the class property Dynamic Destructor to indicate if you always or never want a virtual destructor to be generated for a class.The following values can be selected:n default: The code generator only generates a virtual destructor if the class has subclasses or virtual methods.n yes: The code generator always generates a virtual destructor. Note: This option can result in code that generates unnecessary overhead.n no: The code generator never generates a virtual destructor.Note: This option can result in code that doesn't destroy objects properly.ExampleIf the property Dynamic Destructor for the class Track is set to default, or yes, a virtual destructor is generated for this class:FILENAME="00440.unk" ORIGFILE="pics/virtdstr.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Track.h (generated file):...//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Track.h...classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Trackname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{public:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Defaultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructor/destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Track();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'virtualname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'~Track();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...};...ID="25351"Mapping InheritanceIntroductionThe C++ code generator supports single inheritance as well as multiple inheritance. Overlapping generalizationsThe code generator does not distinguish between overlapping and non-overlapping generalizations.Constructors and inheritanceSee REFID="22663" TYPE="XREF-TEXTCOPY"Constructors for details on how constructors are generated for sub classes.Example: single inheritanceExample class:FILENAME="00441.unk" ORIGFILE="pics/inhacc.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"HourlyEmployee.h (generated file):...// File : HourlyEmployee.h...#ifndef HOURLYEMPLOYEE_H#define HOURLYEMPLOYEE_H 1#ifndef EMPLOYEE_H#include "Employee.h"#endif...class HourlyEmployee: public Employee {...};...Example: Multiple InheritanceThe class VestedHourlyEmployee in this example is derived from two classes; it inherits data and functionality from multiple classes:FILENAME="00442.unk" ORIGFILE="pics/ctrminh.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: The generalization from Employee into HourlyEmployee and VestedEmployee must be overlapping (see REFID="29888" TYPE="XREF-TEXTCOPY"Specifying Virtual Inheritance).VestedHourlyEmployee.h (generated file):...// File : VestedHourlyEmployee.h...#ifndef VESTEDHOURLYEMPLOYEE_H#define VESTEDHOURLYEMPLOYEE_H 1#ifndef HOURLYEMPLOYEE_H#include "HourlyEmployee.h"#endif#ifndef VESTEDEMPLOYEE_H#include "VestedEmployee.h"#endif...class VestedHourlyEmployee: public VestedEmployee, public HourlyEmployee {...};#endif // VESTEDHOURLYEMPLOYEE_HEditing Generalization PropertiesΣ To edit generalization properties:1 Select the Generalization connector in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select the generalization of your choice from the list in the left-hand pane of the dialog box.The generalization properties appear on the right side of the dialog box.FILENAME="00443.unk" ORIGFILE="pics/dbedprgn.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: Properties can be distributed over multiple property pages. You can select a property page by clicking its tab (Misc, Text).The following inheritance properties are available:COLS="4"COLNAME="1" COLWIDTH="133p"COLNAME="2" COLWIDTH="43p"COLNAME="3" COLWIDTH="157p"COLNAME="4" COLWIDTH="112p"COLNAME="1" VALIGN="TOP" MOREROWS="0"propertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PageCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Inheritance Access COLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The access level of the methods inherited from the super classCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34256" TYPE="XREF-TEXTCOPY"Specifying Inheritance AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional generalization commentsCOLNAME="4" VALIGN="TOP" MOREROWS="0"These comments are not added to the generated files4 Change the property values of your choice and click OK.ID="29888"Specifying Virtual InheritanceVirtual inheritanceA class can have multiple base classes: multiple inheritance is allowed in C++. However, the same base class is allowed to occur only once in the class hierarchy, unless virtual inheritance is used.You can specify a particular inheritance to be virtual by using the Overlapping Generalization symbol.Example In the following example, the classes HourlyEmployee and VestedEmployee are both derived from the base class Employee.The class VestedHourlyEmployee is, in turn, derived from the class HourlyEmployee and VestedEmployee. This implies that in the class hierarchy of the class VestedHourlyEmployee, the class Employee occurs twice, which is not allowed in C++.Now if the generalization of Employee is made overlapping - the inheritance is specified as virtual - the classes HourlyEmployee and VestedEmployee only refer to the class Employee, which is allowed in C++.Example class:FILENAME="00444.unk" ORIGFILE="pics/ctrminh.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"HourlyEmployee.h (generated header file):...class HourlyEmployee: public virtual Employee {...};...VestedEmployee.h (generated file):...class VestedEmployee: public virtual Employee {...};...ID="34256"Specifying Inheritance AccessInheritance AccessTERM1="generalization" TERM2="inheritance access"TERM1="accessibility" TERM2="inheritance"TERM1="class" TERM2="subclass"TERM1="subclass"TERM1="class" TERM2="base"TERM1="base class"TERM1="class" TERM2="derived"TERM1="class" TERM2="super"TERM1="superclass"Set the Generalization property Inheritance Access to indicate whether the access level of the methods inherited from the base class must be Public (default), Protected or Private.Example In the following example, the Inheritance Access of the generalization has been set to Protected:FILENAME="00445.unk" ORIGFILE="pics/inhacc.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"HourlyEmployee.h (generated header file)...class HourlyEmployee: protected Employee {...};...ID="34926"Mapping AssociationsIntroductionThe C++ code generator does not distinguish between associations and aggregations; for both constructions identical code is generated. This section uses the term association to indicate associations and aggregations.TERM1="mapping" TERM2="association"TERM1="association" TERM2="mapping of"ObjectTeam supports the following types of associations between classes:n Binary association (association between two classes)n Association as class (class used to define the association)n Qualified association (association that include a qualifier)TERM1="n-ary association"TERM1="association" TERM2="n-ary"N-ary associationsN-ary associations are ignored by the C++ code generator. Code is generated for the classes involved, but not for the associations.Association attributesTERM1="association attribute"TERM1="attribute" TERM2="association attribute"TERM1="association attribute access method"TERM1="method" TERM2="association attribute access"The ObjectTeam documentation use the term association attribute to refer to attributes that are generated to support ObjectTeam associations (as opposed to data attributes generated from ObjectTeam attributes). The role name at the appropriate end of the association is used as a base for generating association attributes.Note: The access level of generated association attributes is always private. The type of the association attribute depends on the multiplicity at the other end of the association and the class library that is used to implement the association.Implementation strategiesThe implementation strategy that is used for a particular association end depends on the association's multiplicity. Which strategy is used is expressed in the association attribute's type. This type depends on the current class library.COLS="2"COLNAME="1" COLWIDTH="177p"COLNAME="2" COLWIDTH="271p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="2" VALIGN="TOP" MOREROWS="0"C++ storage structureCOLNAME="1" VALIGN="TOP" MOREROWS="0"oneCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointerCOLNAME="1" VALIGN="TOP" MOREROWS="0"manyCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer setCOLNAME="1" VALIGN="TOP" MOREROWS="0"many {ordered}COLNAME="2" VALIGN="TOP" MOREROWS="0"ordered pointer setCayenne class libraryIf you are using the Cayenne class library, the following association attribute types are used to implement these strategies:COLS="2"COLNAME="1" COLWIDTH="201p"COLNAME="2" COLWIDTH="247p"COLNAME="1" VALIGN="TOP" MOREROWS="0"C++ storage structureCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne class library classCOLNAME="1" VALIGN="TOP" MOREROWS="0"pointerCOLNAME="2" VALIGN="TOP" MOREROWS="0"--COLNAME="1" VALIGN="TOP" MOREROWS="0"pointer setCOLNAME="2" VALIGN="TOP" MOREROWS="0"PtrSetCOLNAME="1" VALIGN="TOP" MOREROWS="0"ordered pointer setCOLNAME="2" VALIGN="TOP" MOREROWS="0"OPtrSetNote: All the examples in this guide assume that the Cayenne class library is the default class library.Tip: In some class libraries, there is more than one implementation strategy available for a particular type of association. There is always a default strategy defined, but you can select another implementation strategy using the association attribute property Implementation Strategy (see REFID="19988" TYPE="XREF-TEXTCOPY"Specifying an Implementation Strategy).Association accessor methodsThe C++ code generator generates accessor methods for association attributes, similar to accessor methods generated for user-defined attributes. Association accessor methods maintain associations between classes.ExampleFor the following example association, an association attribute and corresponding accessor methods are generated.FILENAME="00446.unk" ORIGFILE="pics/assoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Customer.h (generated code):...class Customer { friend class Book;public: ... // Association accessor methods void setBook(Book* newBook); const Book* getBook() const;protected: ...private: ... // Association attribute storage Book* bookPtr;};...Note: By default, the access level of generated association accessor methods is public. Edit the role name's properties to change the access level of a get (=Read) or set (=Write) accessor method to protected or private. See REFID="34414" TYPE="XREF-TEXTCOPY"Specifying Association Accessor Method Access.ID="32778"Editing association attribute propertiesYou can effect the way association accessor methods are generated by editing the properties of the corresponding role name in ObjectTeam.Σ To edit role name properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a role name from the list in the left-hand pane of the dialog box.The association attribute properties appear on the right side of the dialog box.FILENAME="00447.unk" ORIGFILE="pics/dbedacpr.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: Properties can be distributed over multiple property pages. You can select a property page by clicking its tab (Misc, Text, ClassLib).4 The following association accessor method properties are available:COLS="4"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="61p"COLNAME="3" COLWIDTH="195p"COLNAME="4" COLWIDTH="108p"COLNAME="1" VALIGN="TOP" MOREROWS="0"propertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"tabCOLNAME="3" VALIGN="TOP" MOREROWS="0"specifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"see for detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association Access COLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The access level of the association accessor methods get (=read) and set (=write)COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34414" TYPE="XREF-TEXTCOPY"Specifying Association Accessor Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class libraryCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassLibCOLNAME="3" VALIGN="TOP" MOREROWS="0"The class library that must be used to implement the associationCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31321" TYPE="XREF-TEXTCOPY"Specifying a Class LibraryCOLNAME="1" VALIGN="TOP" MOREROWS="0"Implementation strategyCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassLibCOLNAME="3" VALIGN="TOP" MOREROWS="0"The implementation strategy from the selected class library that must be used to implement the associationCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31321" TYPE="XREF-TEXTCOPY"Specifying a Class LibraryCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional association attribute commentsCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="25709" TYPE="XREF-TEXTCOPY"Specifying Free Text for an Association AttributeNote: In the remainder of this section, these properties are discussed further.5 Change the property values of your choice and click OK.In this sectionIn the remaining part of this section examples of associations with different combinations of multiplicity are discussed, including the implied consequences for updating the association.These consequences are reflected in the get, set, add and remove method implementations generated for the classes in these associations. This section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10004" TYPE="XREF-TEXTCOPY"Mapping Unidirectional and Bidirectional Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'60COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17412" TYPE="XREF-TEXTCOPY"Mapping a Mandatory - Optional Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'62COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41997" TYPE="XREF-TEXTCOPY"Mapping a Mandatory - Mandatory Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'63COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17197" TYPE="XREF-TEXTCOPY"Mapping an Optional - Optional Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'64COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40782" TYPE="XREF-TEXTCOPY"Mapping an Optional - Many Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'66COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30073" TYPE="XREF-TEXTCOPY"Mapping a Mandatory - Many Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'68COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24577" TYPE="XREF-TEXTCOPY"Mapping Many - Many Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'69COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14505" TYPE="XREF-TEXTCOPY"Using an Association with a Multiplicity of Many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'71COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19223" TYPE="XREF-TEXTCOPY"Mapping Ordered Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'74COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38957" TYPE="XREF-TEXTCOPY"Mapping Association Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'76COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34414" TYPE="XREF-TEXTCOPY"Specifying Association Accessor Method Access 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'79COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31321" TYPE="XREF-TEXTCOPY"Specifying a Class Library 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'80COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19988" TYPE="XREF-TEXTCOPY"Specifying an Implementation Strategy 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'82COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25709" TYPE="XREF-TEXTCOPY"Specifying Free Text for an Association Attribute 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'85ID="10004"Mapping Unidirectional and Bidirectional AssociationsIntroductionThis section describes how the C++ code generator implements simple associations between two classes.Unidirectional and bidirectionalIf an association has a role name at only one end, it is a unidirectional association (implemented in one direction). If an association has role names at both ends, it is a bidirectional association (implemented in both directions).Unidirectional associationFILENAME="00448.unk" ORIGFILE="pics/assuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Bidirectional associationFILENAME="00449.unk" ORIGFILE="pics/assbid.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Mapping a unidirectional associationTERM1="Java, generated" TERM2="association attribute"TERM1="Java, generated" TERM2="association attribute access method"The C++ code generator implements a unidirectional association by adding an association attribute and a set of association accessor methods to the code generated for the class at the near end of the association. This allows the class at the near of the association (Customer) to access the class at the far end (Book). Since no association accessor methods are generated for the class at the far end, the class at the far end cannot access the class at the near end.ID="21654"Mapping a bidirectional associationThe C++ code generator implements a bidirectional association by adding an association attribute and a set of association accessor methods to the code generated for both classes. Moreover, both classes are specified as friend classes.This allows each class to access the other. To ensure integrity of a bidirectional association, the update method for a bidirectional association maintains the association in both directions.ExampleFollowing is an excerpt from the code generated for the Book class in the bidirectional association. Because this is a bidirectional association, the Book class and the Customer class contain similar code to implement the association in the other direction....// File : Book.h...#ifndef CUSTOMER_H#include "Customer.h"#endif...class Book { friend class Customer;public: ... // Association accessor methods void setCust(Customer* newCust); const Customer* getCust() const; ...protected: ...private: ... // Association attribute storage Customer* custPtr;};...ID="17412"Mapping a Mandatory - Optional AssociationIntroductionThis is an example of a mandatory - optional association.FILENAME="00450.unk" ORIGFILE="pics/assmd-o.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Each object A has a pointer to an object of the other class:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association Attribute TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointerCOLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer ConstructorWhen an object B is constructed, a pointer to an object A must be set, since the association is mandatory at A's end. This pointer is set in the constructor of class B.B.h (generated file)...class B {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'friend class A;public:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Default constructor/destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'B (A& a);...};Updating an associationIf an object A is associated with an object B in a mandatory - optional association, it cannot be associated with a different B because that would leave the old B unattached. The only way to update the association is to attach an object B to an object A that was previously unattached. This leaves the old object A unattached and the pointer to the object B must therefore be set to 0.ID="41997"Mapping a Mandatory - Mandatory AssociationIntroductionThis is an example of a mandatory - mandatory association.FILENAME="00451.unk" ORIGFILE="pics/assmd-md.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In a mandatory - mandatory association, each object must have a pointer to an object of the other class. Not supportedAn association having a mandatory multiplicity at both ends is not supported by the ObjectTeam C++ code generator. The reason is that it is logically impossible to construct objects of either class, since in a mandatory-mandatory association, both classes need a constructed object at the other end in order to construct objects.ID="17197"Mapping an Optional - Optional AssociationIntroductionThis is an example of an optional - optional association.FILENAME="00452.unk" ORIGFILE="pics/asso-o.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In an optional - optional association, each object has a pointer to an object of the other class. COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association Attribute TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointerCOLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer Updating an associationWhen an optional - optional association is updated, the old association must first be removed on both sides before the new association can be created.ExampleThe following picture shows a situation where an object A (Ax) is associated with an object B (Bx), and another object A (Ay) is associated with another object B (By). The arrows represent pointers.FILENAME="00453.tif" ORIGSEQ="55" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Suppose you now want to associate object Bx with object Ay. The following tasks then need to be carried out in the following order:1 Remove the Ax pointer to Bx2 Remove the By pointer to Ay3 Redirect the Ay pointer from By to Bx4 Redirect the Bx pointer from Ax to Ay.These steps are visualized in the following picture.FILENAME="00454.tif" ORIGSEQ="56" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The result of this update action is shown in the following picture.FILENAME="00455.tif" ORIGSEQ="63" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"ID="40782"Mapping an Optional - Many AssociationIntroductionThis is an example of an optional - many association.FILENAME="00456.unk" ORIGFILE="pics/asso-my.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In an optional - many association, objects at the optional end (A) have a set of pointers to objects at the many end (B). Objects at the many end (B) have a pointer to an object at the optional end (A).COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association AttributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer set (PtrSet)COLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer Updating an associationWhen a pointer to an object B is added to the pointer set of an object A, the pointer must first be removed from the pointer set of the old object A (if the object B was already associated).ExampleThe following picture shows two objects A: Ax and Ay. The pointer set of Ax contains, among other things, a pointer to Bz.The arrows represent pointers.FILENAME="00457.tif" ORIGSEQ="76" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Suppose you now want to associate object Bz with object Ay. Σ The following tasks then need to be carried out in the following order:1 Remove the pointer to Bz from Ax's pointer set2 Redirect Bz's pointer from Ax to Ay.3 Add a pointer to Bz to Ay's pointer setThese steps are visualized in the following picture.FILENAME="00458.tif" ORIGSEQ="98" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The result of this update action is shown in the following picture.FILENAME="00459.tif" ORIGSEQ="107" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"ID="30073"Mapping a Mandatory - Many AssociationIntroductionThis is an example of a mandatory - many association.FILENAME="00460.unk" ORIGFILE="pics/assmd-my.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In a mandatory - many association, objects at the mandatory end (A) have a set of pointers to objects at the many end (B). Objects at the many end (B) have a pointer to an object at the optional end (A).COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association AttributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer set (PtrSet)COLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer Updating an associationUpdating a mandatory - many association is similar to updating an optional - many association (see REFID="40782" TYPE="XREF-TEXTCOPY"Mapping an Optional - Many Association). However, in a mandatory association, unattached objects A are not allowed.Removing an associationIt is impossible to remove a pointer to an object B from an object A without adding it to another object A, since that would leave the object B unattached. Unattached B objects are not allowed because the multiplicity at the other end of B is mandatory.Therefore, no remove method is generated for mandatory - many associations. A warning message in the Monitoring Window will inform you about this when code is being generated.ID="24577"Mapping Many - Many AssociationIntroductionThis is an example of a many - many association.FILENAME="00461.unk" ORIGFILE="pics/assmy-my.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In a many - many association, objects at the first many end (A) have a set of pointers to objects at the second many end (B). Objects at the second many end (B) have a set of pointer to objects at the first many end (A) too.COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association AttributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer set (PtrSet)COLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer set (PtrSet)Updating the associationAll updates in a many - many association must be done at both ends of the association. An add method must add to the A object's pointer set a pointer to the B object and to the B object's pointer set a pointer to the A object.ExampleThe following picture shows three objects A and three objects B. These objects have several relations with one another.The arrows represent pointers.FILENAME="00462.tif" ORIGSEQ="94" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Suppose you now want to associate object Ay with object Bz (and keep the association between Ay and By).Σ The following tasks then need to be carried out in the following order:1 Add the pointer to Bz to Ay's pointer set2 Add the pointer to Ay to Bz's pointer setThese steps are visualized in the following picture.FILENAME="00463.tif" ORIGSEQ="112" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The result of this update action is shown in the following picture.FILENAME="00464.tif" ORIGSEQ="117" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Removing the associationWhen a pointer to an object B is removed from an object A's pointer set, (e.g. the pointer to Bx is removed from Ax's pointer set), the corresponding pointer to object A must also be removed from object B.ID="14505"Using an Association with a Multiplicity of ManyPrerequisiteThis section assumes that you are familiar with the information from the following sections:n REFID="40782" TYPE="XREF-TEXTCOPY"Mapping an Optional - Many Associationn REFID="30073" TYPE="XREF-TEXTCOPY"Mapping a Mandatory - Many Associationn REFID="24577" TYPE="XREF-TEXTCOPY"Mapping Many - Many AssociationExampleThe following picture shows an example of a mandatory - many association. The class at the mandatory end acts as master (classA), the class at the many end as detail (classB).FILENAME="00465.unk" ORIGFILE="pics/asscmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"ClassA.h (generated file):...// File : ClassA.h...#include <PtrSet.hxx>#include <assert.h>#ifndef CLASSB_H#include "ClassB.h"#endif...class ClassA { friend class ClassB;public: // Default constructor/destructor ClassA(); ~ClassA(); ... // Association accessor methods const PtrSet< ClassB >& getDetailSet() const; void addDetail(ClassB* newDetail); ......private: ... // Association attribute storage PtrSet< ClassB > detailSet;};...Generated method (Cayenne class library)For classes with a multiplicity of many at the other end, the following association accessor method is generated:TERM1="getSet"getroleNameSetIn our example, the name of this get method is: getDetailSet. The type of the method getDetailSet is TERM1="PtrSet"PtrSet. PtrSet is one of the storage structure classes that is included in the Cayenne class library (see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your C++ Environment on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7). It is used for TERM1="pointer set"pointer sets. Typical member functions of the class PtrSet are:n first()n next()These functions return the pointers to the detail objects that participate in the association.Before you are able to retrieve (get) objects from a PtrSet class, these objects first have to be added to the association. The master class contains methods which allow adding (and removing) detail objects. Note: Bear in mind that the class PtrSet only stores the pointers to the object.Adding an object to a pointer setThe following construction is a typical construction for adding an object to a pointer set. Here, it is used to add an object of class B to an object of class A.#ifndef CLASSA_H#include "ClassA.h"#endif#ifndef CLASSB_H#include "ClassB.h"#endif ClassA *a = new ClassA(); // Make a new class occurrence of aClassB *b = new ClassB(); // Make a new class occurrence of ba->addDetail(b); // Add class occurrence of b to aRetrieving objects from a pointer setThe following construction are typical constructions for retrieving objects from a pointer set. Here, they are used to retrieve objects B from an object A....PtrSet<ClassB>& Details = a->getDetailSet();ClassB *b1 = Details.first();ClassB *b2 = Details.next();Removing objects from a pointer setThe following construction is a typical construction for removing an object from a pointer set. Here it is used to remove an object B from an object A....a->removeDetail(b); // Remove class occurrence of b to aID="19223"Mapping Ordered AssociationsPrerequisiteThis section assumes that you are familiar with the section REFID="14505" TYPE="XREF-TEXTCOPY"Using an Association with a Multiplicity of Many.Ordered associationHere is an example of an ordered association. FILENAME="00466.unk" ORIGFILE="pics/ordacc.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Use an ordered association if the order of the objects in the pointer set matters.Ordered pointer setTERM1="Queue class" TERM2="and ordered association"The mapping of an ordered association is similar to that of an association with an unordered multiplicity of many; however, the implementation strategy that is used is slightly different.Cayenne class libraryIf you are using the Cayenne class library, the class OPtrSet is used to implement ordered associations, whereas PtrSet is used to implement unordered associations in an optional - many association. Example codeFollowing is an excerpt from the code generated for the Customer class shown above.Customer.h (generated file):...#include <OPtrSet.hxx>#include <assert.h>...class Customer {public: ... // Association accessor methods const OPtrSet< Book >& getBookSet() const; void addBook(Book* newBook); void removeBook(Book* oldBook);...private: ... // Association attribute storage OPtrSet< Book > bookSet;};...ID="38957"Mapping Association ClassesPrerequisiteThis section assumes that you are familiar with the mapping of various types of associations, as described in the previous sections.Association classObjectTeam allows you to specify information about an association by an association class. The class Purchase in the following diagram is an association class.FILENAME="00467.unk" ORIGFILE="pics/asscls.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Association mapped as two associationsThe C++ code generation converts a construction with an association class into a construction where the association class is associated with both the other classes by normal associations. The role names are converted into linkClassNameOfroleNameExampleThe code generated for the CD shown above is actually based on the following CD:FILENAME="00468.unk" ORIGFILE="pics/assclsnw.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Role names are requiredAs with all associations, role names are required. If a role name is omitted, the association attributes and corresponding accessor methods that would map to that role name are not generated.Qualified association classQualified associations with association classes are treated similarly by the C++ code generator; the association is converted into a construction where the association class is associated with the other classes by a normal associations.ExampleFollowing is the code generated for the classes from the CD shown above.Purchase.h (generated file)...class Purchase { friend class Customer3; friend class Book3;public: // Default constructor/destructor Purchase(Customer3& customer, Book3& book); ~Purchase(); ... // Association accessor methods void setCustomer(Customer3* newCustomer); const Customer3* getCustomer() const; void setBook(Book3* newBook); const Book3* getBook() const;protected: ...private: ... // Association attribute storage Customer3* customerPtr; Book3* bookPtr;};...Customer.h (generated file)...class Customer3 { friend class Purchase;public: ... // Association accessor methods const set< Purchase*, less< Purchase* > >& getBookSet() const; void addBook(Purchase* newBook);protected: ...private: ... // Association attribute storage set< Purchase*, less< Purchase* > > bookOfPurchaseSet;};...Book.h (generated file)...class Book3 { friend class Purchase;public: ... // Association accessor methods void setCustomer(Purchase* newCustomer); const Purchase* getCustomer() const;protected: ...private: ... // Association attribute storage Purchase* customerOfPurchasePtr;};...ID="34414"Specifying Association Accessor Method AccessIntroductionThe C++ code generator generates accessor methods for every class: in an association that has a role name specified at the other end of the association (see REFID="21654" TYPE="XREF-TEXTCOPY"Mapping a bidirectional association). Examples of accessor methods are:n setroleNamen getroleNamen removeroleNameYou can specify the access level of these methods, that is, you can instruct the code generator in which section (Public, Protected, Private) these methods must be generated.Read and Write accessor methodsThe setting specified in the Read field affects the attribute accessor method getroleName; the setting specified in the Write field the attribute accessor method setroleName.Access level typesThe following types of access level can be selected for association accessor methods (Read and Write):n Public (default). A public method is accessible anywhere within the program.n Protected. A protected method behaves as a public method to a derived class but as a private method to the rest of the program.n Private. A private method can only be accessed by the other methods of its class and by friends of its class.n None. No accessor methods are generated.How to specify the access levelYou specify an association attribute accessor method's access level through the following properties:COLS="3"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="127p"COLNAME="3" COLWIDTH="192p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Property GroupCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"ReadCOLNAME="3" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"WriteCOLNAME="3" VALIGN="TOP" MOREROWS="0"For more informationSee REFID="32778" TYPE="XREF-TEXTCOPY"Editing association attribute propertiesID="31321"Specifying a Class LibraryIntroductionThe C++ code generator uses the information from a class library to implement various types of (qualified) associations. Integrations of ObjectTeam with class libraries is controlled by modules. Which class library can be used for the implementation of an association therefore depends on the modules that are currently active.ExampleIf you are using the Cayenne class library, for example, the generated type for the association attribute at the Customer end in the following example will be a PtrSet. This information is retrieved from the Cayenne class library, just like the information needed to generate the implementations of the corresponding accessor methods.FILENAME="00469.unk" ORIGFILE="pics/assmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"If another class library is used, the type of the association attribute may be different, just like the implementation of the accessor methods may be different. The names of the accessor methods, however, remain the same across different class libraries. Their implementation may still vary.Available class librariesBesides the Cayenne class library, the C++ code generator is also integrated with other class libraries to implement associations:COLS="3"COLNAME="1" COLWIDTH="202p"COLNAME="2" COLWIDTH="121p"COLNAME="3" COLWIDTH="124p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClaSS lIBRARYCOLNAME="2" VALIGN="TOP" MOREROWS="0"aBBREVIATIONCOLNAME="3" VALIGN="TOP" MOREROWS="0"Module NAMECOLNAME="1" VALIGN="TOP" MOREROWS="0"Cayenne class libraryCOLNAME="2" VALIGN="TOP" MOREROWS="0"libcaynCOLNAME="3" VALIGN="TOP" MOREROWS="0"cpp-libcaynCOLNAME="1" VALIGN="TOP" MOREROWS="0"Rogue Wave class libraryCOLNAME="2" VALIGN="TOP" MOREROWS="0"librwCOLNAME="3" VALIGN="TOP" MOREROWS="0"cpp-librwCOLNAME="1" VALIGN="TOP" MOREROWS="0"STL class libraryCOLNAME="2" VALIGN="TOP" MOREROWS="0"libstlCOLNAME="3" VALIGN="TOP" MOREROWS="0"cpp-libstlCOLNAME="1" VALIGN="TOP" MOREROWS="0"user-defined class libraryCOLNAME="2" VALIGN="TOP" MOREROWS="0"user-definedCOLNAME="3" VALIGN="TOP" MOREROWS="0"user-definedYou can have multiple active class library modules in ObjectTeam, but there is only one default class library. Default class libraryIf you have multiple class library modules active, there is only one default class library: the last one in the list of active class library modules.Σ To see which library is the default:1 In the Browser, select Utilities | Show Active Modules...The dialog box Active Module appears.FILENAME="00470.unk" ORIGFILE="pics/dbactmd.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"2 Check which of the active class libraries is the last in line; this is the default class library.Tip: In this example, the Rogue Wave class library is the default.Overruling the default class libraryFor every individual end of an association with a role name you can instruct the C++ code generator to use an (active) class library other than the default.You can do that using the association attribute property Class Library, which can be found in the Edit Properties dialog box on the Class Lib page.FILENAME="00471.unk" ORIGFILE="pics/dbcllib.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"For more informationSee REFID="32778" TYPE="XREF-TEXTCOPY"Editing association attribute propertiesID="19988"Specifying an Implementation StrategyAvailable strategiesIn some class libraries (see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your C++ Environment), multiple implementation strategies or storage structures have been made available for a particular association with a certain multiplicity. In the Rogue Wave class library, for example, you have a choice between the following implementation strategies for associations ends having a multiplicity of many at the opposite side. (see the role name customer in the example CD):n defaultn hashn doubleLLn singleLLFILENAME="00472.unk" ORIGFILE="pics/assmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Default implementation strategyThe default implementation strategy for a particular association end is defined in the following file:cppclprop.tclThis file can be found in the tcl directory of every class library module. It contains a mapping of association type indications (Ptr, Set, Dict, etc.) to implementation strategy indications to Tcl class names. For Rogue Wave, for example, this mapping table looks like this:COLS="3"COLNAME="1" COLWIDTH="112p"COLNAME="2" COLWIDTH="126p"COLNAME="3" COLWIDTH="208p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Association Type IndicationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Implementation StrategyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Tcl ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"PtrCOLNAME="2" VALIGN="TOP" MOREROWS="0"defaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWPtrDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"SetCOLNAME="2" VALIGN="TOP" MOREROWS="0"defaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWSetDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"SetCOLNAME="2" VALIGN="TOP" MOREROWS="0"hashCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWSetDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"SetCOLNAME="2" VALIGN="TOP" MOREROWS="0"doubleLLCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWDoubleSetDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"SetCOLNAME="2" VALIGN="TOP" MOREROWS="0"singleLLCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWSingleSetDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"OSetCOLNAME="2" VALIGN="TOP" MOREROWS="0"defaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWOSetDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"OSetCOLNAME="2" VALIGN="TOP" MOREROWS="0"hashCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWOSetDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"DictCOLNAME="2" VALIGN="TOP" MOREROWS="0"defaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWDictDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"DictCOLNAME="2" VALIGN="TOP" MOREROWS="0"hashCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWDictDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"SetDictCOLNAME="2" VALIGN="TOP" MOREROWS="0"defaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWSetDictDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"SetDictCOLNAME="2" VALIGN="TOP" MOREROWS="0"hashCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWSetDictDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"OSetDictCOLNAME="2" VALIGN="TOP" MOREROWS="0"defaultCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWOSetDictDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"OSetDictCOLNAME="2" VALIGN="TOP" MOREROWS="0"hashCOLNAME="3" VALIGN="TOP" MOREROWS="0"RWOSetDictDefThe Tcl classes contain the information required by the C++ code generator to generate the type of the association attribute and the bodies of the corresponding accessor methods.The association type indications must be read as follows:COLS="3"COLNAME="1" COLWIDTH="96p"COLNAME="2" COLWIDTH="142p"COLNAME="3" COLWIDTH="208p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type of associationCOLNAME="2" VALIGN="TOP" MOREROWS="0"multiplicity(at the other end):COLNAME="3" VALIGN="TOP" MOREROWS="0"Association Type IndicationCOLNAME="1" VALIGN="TOP" MOREROWS="0"non-qualifiedCOLNAME="2" VALIGN="TOP" MOREROWS="0"mandatory, optionalCOLNAME="3" VALIGN="TOP" MOREROWS="0"PtrCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"manyCOLNAME="3" VALIGN="TOP" MOREROWS="0"SetCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"many {ordered}COLNAME="3" VALIGN="TOP" MOREROWS="0"OSetCOLNAME="1" VALIGN="TOP" MOREROWS="0"qualifiedCOLNAME="2" VALIGN="TOP" MOREROWS="0"mandatory, optionalCOLNAME="3" VALIGN="TOP" MOREROWS="0"DictCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"manyCOLNAME="3" VALIGN="TOP" MOREROWS="0"SetDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"many {ordered}COLNAME="3" VALIGN="TOP" MOREROWS="0"OSetDictFor more information on customizing class librariesSee REFID="32178" TYPE="XREF-TEXTCOPY"Customizing Class Libraries.Overruling the default implementation strategyDepending on what has been defined in the cppclprop.tcl file of the selected class library, you can select various implementation strategies for the implementation of a particular association end.You can choose a strategy other than the default using the association attribute property Implementation Strategy, which can be found in the Edit Properties dialog box on the Class Lib page.FILENAME="00473.unk" ORIGFILE="pics/dbcllib2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"For more informationSee REFID="32778" TYPE="XREF-TEXTCOPY"Editing association attribute propertiesID="25709"Specifying Free Text for an Association AttributeFree TextFree text entered for role names in an association are inserted as C++ comments near the corresponding association attribute definition in the generated header file.ExampleIn the following example, free text has been specified for the role name customer. The definition of the corresponding association attribute is stored in the generated header file of the class at the opposite end: Book.FILENAME="00474.unk" ORIGFILE="pics/assfrtxt.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Book.h (generated file):...class Book { ...public: ...protected: ...private: ... // Association attribute storage // Free text entered for the role name: customer Customer* customerPtr;};...How to enter free textYou enter an association attribute's free text through the following property of the corresponding role name:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="268p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextFor more informationSee REFID="32778" TYPE="XREF-TEXTCOPY"Editing association attribute propertiesID="32807"Mapping Qualified AssociationsPrerequisiteREFID="34926" TYPE="XREF-TEXTCOPY"Mapping Associations describes the mapping of non-qualified associations with various multiplicity types. This section assumes that you are familiar with that information.IntroductionThis section describes the general concepts behind the code that is generated for qualified associations with various multiplicity types:This is an example of a qualified association:FILENAME="00475.unk" ORIGFILE="pics/qass.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"You can use qualified associations to model dictionaries of pointers to certain objects. The qualifier acts as the key to the dictionary.Association attributeThe attributes that are generated to support ObjectTeam associations are referred to as association attributes. The role name at the appropriate end of the qualified association is used as a base for generating association attributes.The type of the association attribute reflects the strategy that is used to implement the association at the qualifier end. This strategy depends on:the multiplicity at the other end and on the active class library.Implementation strategiesThe implementation strategy used to implement a qualified association at the qualifier end (Customer, for example) is a dictionary of pointers. This strategy is reflected in the type of the association attribute. Which dictionary type is used depends on:n the multiplicity at the other end (many in the example above)n the active class library (Cayenne class library, for example)COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Multiplicity at non-qualified end (Book)COLNAME="2" VALIGN="TOP" MOREROWS="0" Implementation StrategyCOLNAME="1" VALIGN="TOP" MOREROWS="0"mandatory, optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer dictionaryCOLNAME="1" VALIGN="TOP" MOREROWS="0"mandatory, optional {ordered}COLNAME="2" VALIGN="TOP" MOREROWS="0"ordered pointer dictionaryCOLNAME="1" VALIGN="TOP" MOREROWS="0"manyCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer set dictionaryCOLNAME="1" VALIGN="TOP" MOREROWS="0"many {ordered}COLNAME="2" VALIGN="TOP" MOREROWS="0"ordered pointer set dictionaryCOLNAME="1" VALIGN="TOP" MOREROWS="0"mandatory, optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer dictionaryCOLNAME="1" VALIGN="TOP" MOREROWS="0"manyCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer set dictionaryIn such a pointer (set) dictionary, the qualifier name is the dictionary key, and the data type of the qualifier is the key type. The data in the dictionary is:n a pointer to an object at the other end (Book) for a pointer dictionaryn a set of pointers to objects at the other end (Book) for a pointer set dictionaryCayenne class libraryIf you are using the Cayenne class library, the following association attribute types are used for implementing these qualified associations:COLS="2"COLNAME="1" COLWIDTH="201p"COLNAME="2" COLWIDTH="247p"COLNAME="1" VALIGN="TOP" MOREROWS="0"data structureCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cayenne class library classCOLNAME="1" VALIGN="TOP" MOREROWS="0"pointer dictionaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"PtrDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"ordered pointer dictionaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"OPtrDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"pointer set dictionaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"PSetDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"ordered pointer set dictionaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"OPSetDictTip: In some class libraries, there is more than one implementation strategy available for a particular type of association. There is always a default strategy defined, but you can select another implementation strategy using the association attribute property Implementation Strategy (see REFID="19988" TYPE="XREF-TEXTCOPY"Specifying an Implementation Strategy).Association accessor methodsDepending on the data structure of the association attribute type (pointer dictionary or pointer set dictionary), the following accessor methods are generated for a class at the qualifier end.Note: The dictionary key (specified by the qualifier) is used in the argument lists of these methods.COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Pointer dictionaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"Pointer set dictionaryCOLNAME="1" VALIGN="TOP" MOREROWS="0"set<roleName>COLNAME="2" VALIGN="TOP" MOREROWS="0"add<roleName>COLNAME="1" VALIGN="TOP" MOREROWS="0"get<roleName>COLNAME="2" VALIGN="TOP" MOREROWS="0"get<roleName>SetCOLNAME="1" VALIGN="TOP" MOREROWS="0"remove<roleName>COLNAME="2" VALIGN="TOP" MOREROWS="0"remove<roleName>Note: The remove method is not generated if the multiplicity at the qualifier end is mandatoryID="27543"Data type of the qualifierQualifiers in qualified associations must have a data type, which can be specified through the qualifier property Data Type. Valid data types are standard types or class types. Cayenne class libraryIf the Cayenne class library is part of your C++ environment (see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your C++ Environment on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7), data types of qualifiers must be TERM1="data type" TERM2="hashable"TERM1="hashable data type"hashable data types. The following classes from the Cayenne class library support hashable data types:n TERM1="IntHash"TERM1="libwmt4omt" TERM2="IntHash"IntHashn TERM1="StringHash"TERM1="libwmt4omt" TERM2="StringHash"StringHashThese types behave the same as their base types int and String, but they can be used to locate certain occurrences of a detail class in a pointer set. The class TERM1="Hashable"TERM1="libwmt4omt" TERM2="Hashable"Hashable, which is also part of the Cayenne class library, is the superclass of the classes IntHash and StringHash. You can specify any class as data type for a qualifier, as long as its superclass is the class Hashable. Bidirectional qualified associations In the example depicted above, every Book object keeps track of the Customer object it is associated with, or, if the multiplicity at the qualifier side is many, the set of associated Customer objects. Hence, the associated Customer object(s) can always be retrieved from a Book object.Bear in mind, however, that if you make the association bidirectional by putting a role name at the side of the qualifier, Book objects do not keep track of the qualifier, or the set of qualifiers used to establish the association with Customer object(s). The attribute roleName (or, in the case of a many association roleNameSet) that is generated for Book will not contain the qualifier, and will return the same as in a non-qualified association.ID="11116"Editing qualifier propertiesTERM1="Edit Properties (Item menu)" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="editing properties"The main qualifier property is Data Type, through which you can specify the dictionary key type.Σ To edit qualifier properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears3 Select a qualifier from the list in the left-hand pane of the dialog box.The qualifier properties appear on the right side of the dialog box.FILENAME="00476.unk" ORIGFILE="pics/dbedprq.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: Properties can be distributed over multiple property pages. You can select a property page by clicking its tab (Misc, Text).The following qualifier properties are available:COLS="4"COLNAME="1" COLWIDTH="133p"COLNAME="2" COLWIDTH="39p"COLNAME="3" COLWIDTH="156p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PageCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"the dictionary key type (e.g.: IntHash or StringHash)COLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="27543" TYPE="XREF-TEXTCOPY"Data type of the qualifierCOLNAME="1" VALIGN="TOP" MOREROWS="0"NullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"whether or not the qualifier must be nullableCOLNAME="4" VALIGN="TOP" MOREROWS="0"See REFID="35790" TYPE="XREF-TEXTCOPY"Specifying Mandatory AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional qualifier notesCOLNAME="4" VALIGN="TOP" MOREROWS="0"These comments are not added to the generated filesIn the remainder of this section, these properties are discussed further.4 Change the property values of your choice and click OK.ExampleFollowing is an excerpt from the header file for the Customer class shown above. The data type of the qualifier bookID is IntHash, which is a hashable data type from the Cayenne class library. The IntHash class must be defined in another system as external class.The following association accessor methods are generated:n getBookn addBookn removeBookThe data structure of the association attribute is a pointer set dictionary, implemented by the Cayenne class library class PsetDict....// File : Customer.h...#include <PSetDict.hxx>#include <assert.h>#ifndef BOOK_H#include "Book.h"#endif#ifndef INTHASH_H#include "IntHash.h"#endif...class Customer {public: ... // Association accessor methods const PtrSet< Book >& getBookSet(IntHash BookID) const; void addBook(IntHash BookID, Book* newBook); void removeBook(IntHash BookID, Book* oldBook); ......private: ... // Association attribute storage PSetDict< IntHash, Book > bookDictSet;};...In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38614" TYPE="XREF-TEXTCOPY"Mapping a Mandatory - Anything Qualified Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'92COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13331" TYPE="XREF-TEXTCOPY"Mapping a Optional - Optional Qualified Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'93COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27805" TYPE="XREF-TEXTCOPY"Mapping a Optional - Mandatory Qualified Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'95COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26001" TYPE="XREF-TEXTCOPY"Mapping an Optional - Many Qualified Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'96COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40669" TYPE="XREF-TEXTCOPY"Mapping a Many - Optional Qualified Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'99COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37998" TYPE="XREF-TEXTCOPY"Mapping a Many - Mandatory Qualified Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'102COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33442" TYPE="XREF-TEXTCOPY"Mapping a Many - Many Qualified Association 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'103COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41254" TYPE="XREF-TEXTCOPY"Mapping Ordered Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'105ID="38614"Mapping a Mandatory - Anything Qualified AssociationIntroductionHere is an example of a qualified association with a multiplicity of mandatory at the qualifier end:FILENAME="00477.unk" ORIGFILE="pics/qassmd-o.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In a mandatory - {mandatory | optional | many} association, objects at the qualifier end (A) have a pointer dictionary to objects at the other end (B). Objects at the other end (B) have a pointer to an object at the qualifier end (A).COLS="3"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="187p"COLNAME="3" COLWIDTH="207p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Implementation strategyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Cayenne class library classCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer dictionaryCOLNAME="3" VALIGN="TOP" MOREROWS="0"PtrDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointerCOLNAME="3" VALIGN="TOP" MOREROWS="0"--Updating an associationThe C++ code generator does not generate any methods for updating an association with a multiplicity of mandatory at the qualifier end. It does not generate the required constructor parameters for both classes either (see REFID="22663" TYPE="XREF-TEXTCOPY"Constructors).ID="13331"Mapping a Optional - Optional Qualified AssociationIntroductionThis is an example of a qualified optional - optional association.FILENAME="00478.unk" ORIGFILE="pics/qasso-o.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In an optional - optional association, objects at the qualifier end (A) have a pointer dictionary to objects at the other end (B). Objects at the other end (B) have a pointer to an object at the qualifier end (A).COLS="3"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="187p"COLNAME="3" COLWIDTH="207p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Implementation strategyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Cayenne Class Library ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer dictionaryCOLNAME="3" VALIGN="TOP" MOREROWS="0"PtrDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointerCOLNAME="3" VALIGN="TOP" MOREROWS="0"--Updating an associationWhen an optional - optional association is updated, the old association must first be removed before the new association can be created.ExampleThe following picture shows a situation where an object A (Ax) is associated with two B objects:n with Bx through key k1n with By through key k2The other A object (Ay) is currently not associated with any B object.The arrows represent pointers.FILENAME="00479.tif" ORIGSEQ="49" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Suppose you now want to associate object By with object Ay, through key k3. The following tasks then need to be carried out in the following order:1 Remove the Ax pointer to By (key k2)2 Redirect the By pointer from Ax to Ay (key k3)3 Add to Ay a pointer to By (key 3)These steps are visualized in the following picture.FILENAME="00480.tif" ORIGSEQ="89" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The result of this update action is shown in the following picture.FILENAME="00481.tif" ORIGSEQ="121" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The C++ code generator generates methods that implement these update actions.ID="27805"Mapping a Optional - Mandatory Qualified Association IntroductionThis is an example of a qualified optional - mandatory association.FILENAME="00482.unk" ORIGFILE="pics/qasso-o.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Updating an associationThe update consequences for optional - mandatory associations are similar to those of optional - optional associations (see REFID="13331" TYPE="XREF-TEXTCOPY"Mapping a Optional - Optional Qualified Association).The additional restriction for optional - mandatory associations is that a pointer to a B object can never be zero.ID="26001"Mapping an Optional - Many Qualified AssociationIntroductionThis is an example of a qualified optional - many association.FILENAME="00483.unk" ORIGFILE="pics/qasso-md.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In an optional - many association, objects at the qualifier end (A) have a dictionary of pointers to objects at the other end (B). Objects at the other end (B) have a set of pointers to A objects.COLS="3"COLNAME="1" COLWIDTH="63p"COLNAME="2" COLWIDTH="192p"COLNAME="3" COLWIDTH="193p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association Attribute TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Cayenne Class LibraryCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer dictionaryCOLNAME="3" VALIGN="TOP" MOREROWS="0"PtrDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer setCOLNAME="3" VALIGN="TOP" MOREROWS="0"PtrSetUpdating an associationWhen an optional - many association is updated, and the new object B already has an association with an object A, this association must be removed first. The object A must delete the old object B from its dictionary and the old object B must set its pointer to 0.ExampleThe following picture shows a situation where an object A (Ax) is associated with two B objects:n with Bx through key k1n with By through key k2The other A object (Ay) is currently associated with one B object:n with Bz through key k3.The arrows represent pointers.FILENAME="00484.tif" ORIGSEQ="46" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Suppose you now want to associate object By with object Ay. Since its a many association, you can do that through k3, a key that is already used in the association between Ay and Bz.The following tasks then need to be carried out in the following order:1 Remove the Ax pointer to By (key k2)2 Redirect the By pointer from Ax to Ay (key 2)3 Add to Ay a pointer to By (key 3)These steps are visualized in the following picture.FILENAME="00485.tif" ORIGSEQ="39" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The result of this update action is shown in the following picture.FILENAME="00486.tif" ORIGSEQ="130" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The C++ code generator generates methods that implement these update actions.ID="40669"Mapping a Many - Optional Qualified AssociationIntroductionThis is an example of a many - optional association.FILENAME="00487.unk" ORIGFILE="pics/qassmy-o.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In a many - optional association, objects at the qualifier end (A) have a dictionary of pointers to objects at the other end (B). Objects at the other end (B) have a set of pointers to A objects.COLS="3"COLNAME="1" COLWIDTH="63p"COLNAME="2" COLWIDTH="192p"COLNAME="3" COLWIDTH="193p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association Attribute TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Cayenne Class LibraryCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer dictionaryCOLNAME="3" VALIGN="TOP" MOREROWS="0"PtrDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer setCOLNAME="3" VALIGN="TOP" MOREROWS="0"PtrSetUpdating an associationWhen a new object B is added, and the current qualifier already has an object B attached to it, this association should be removed first. The pointer to the A object must also be removed from object B's pointer set.ExampleThe following picture shows a situation where an object A (Ax) is associated with two B objects:n with By through key k1n with Bz through key k2The other A object (Ay) is currently associated with one B object:n with Bz through key k3.The arrows represent pointers.FILENAME="00488.tif" ORIGSEQ="122" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Suppose you now want to associate object By with object Ax using key2. The following tasks then need to be carried out in the following order:1 Remove the Bz pointer to Ax (key k2)2 Redirect the Ax pointer from Bz to By (key k2)3 Add to By a pointer to Ax (key k2)These steps are visualized in the following picture.FILENAME="00489.tif" ORIGSEQ="133" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The result of this update action is shown in the following picture.FILENAME="00490.tif" ORIGSEQ="140" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The C++ code generator generates methods that implement these update actions.ID="37998"Mapping a Many - Mandatory Qualified AssociationIntroductionThis is an example of a many - mandatory association.FILENAME="00491.unk" ORIGFILE="pics/qassmy-md.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Updating an associationThe update consequences for many - mandatory associations are similar to those for many - optional associations (see REFID="40669" TYPE="XREF-TEXTCOPY"Mapping a Many - Optional Qualified Association).The additional restriction for many - mandatory associations is that a pointer to a B object can never be zero.ID="33442"Mapping a Many - Many Qualified AssociationIntroductionThis is an example of a many - many association.FILENAME="00492.unk" ORIGFILE="pics/qassmy-my.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"In a many - many association, objects at the qualifier end (A) have a dictionary of pointers to objects at the other end (B). Objects at the other end (B) have a set of pointers to A objects.COLS="3"COLNAME="1" COLWIDTH="63p"COLNAME="2" COLWIDTH="192p"COLNAME="3" COLWIDTH="193p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association Attribute TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Cayenne Class LibraryCOLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer set dictionaryCOLNAME="3" VALIGN="TOP" MOREROWS="0"PSetDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointer setCOLNAME="3" VALIGN="TOP" MOREROWS="0"PtrSetUpdating an associationWhen a new object B is added, no old associations have to be removed. Both sides of the association should always be updated.ExampleThe following picture shows a situation with three objects A, and three objects B, which have multiple associations with one another.The arrows represent pointers.FILENAME="00493.tif" ORIGSEQ="125" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Suppose you now want to associate object Bx with object Ay using key k3. The following tasks then need to be carried out in the following order:1 Add to Bx's pointer set a pointer to Ay (k3)2 Add to Ay's pointer set a pointer to Bx (k3)These steps are visualized in the following picture.FILENAME="00494.tif" ORIGSEQ="82" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The result of this update action is shown in the following picture.FILENAME="00495.tif" ORIGSEQ="69" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"The C++ code generator generates methods that implement these update actions.ID="41254"Mapping Ordered Qualified AssociationsPrerequisiteThis section assumes that you are familiar with the following sections:n REFID="26001" TYPE="XREF-TEXTCOPY"Mapping an Optional - Many Qualified Associationn REFID="33442" TYPE="XREF-TEXTCOPY"Mapping a Many - Many Qualified AssociationOrdered associationHere is an example of an ordered qualified association. FILENAME="00496.unk" ORIGFILE="pics/qassord.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Use an ordered qualified association if the order of the objects in the pointer set matters.Ordered pointer dictionaryTERM1="Queue class" TERM2="and ordered association"The mapping of an ordered qualified association is similar to that of a qualified association with an unordered multiplicity of many; however, the implementation strategy that is used is slightly different.Cayenne class libraryIf you are using the Cayenne class library, the class OPtrDict implements ordered qualified associations, whereas PtrDict implements unordered associations with a multiplicity of many at the other end. Example codeFollowing is an excerpt from the code generated for the Customer class shown above. The data type of the qualifier BookID is IntHash, a class from the Cayenne class library.Customer.h (generated file):...// File : Customer.h...#ifndef CUSTOMER_H#define CUSTOMER_H 1#include <OPSetDict.hxx>#include <assert.h>#ifndef BOOK_H#include "Book.h"#endif#ifndef INTHASH_H#include "IntHash.h"#endif...class Customer {public: ... // Association accessor methods const OPtrSet< Book >& getBookSet(IntHash BookID) const; void addBook(IntHash BookID, Book* newBook); void removeBook(IntHash BookID, Book* oldBook);...private: ... // Association attribute storage OPSetDict< IntHash, Book > bookDictSet;};...ID="29909"Handling External ClassesIntroductionAn external class is a class that is defined in another system in the same phase.Class as typeYou can use a standard type or a class name (class type) to indicate the type of an attribute, parameter or method. This class can be defined in the same system or in another system in the same phase. If it is defined in another system, it is referred to as an external class.The header file that belongs to the external class is included in the file that is generated for the class in which the external class type is usedExample classThe class Date is defined in another system in the same phase.FILENAME="00497.unk" ORIGFILE="pics/cltype.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Example code (generated)The header file Date.h is added to the include section of the generated file Person.h:...// File : Person.h...#ifndef PERSON_H#define PERSON_H 1#ifndef DATE_H#include "Date.h"#endif...External classes and the makefileThe variable INCS in the makefile indicates the (relative) directory paths searched for include files during compilation and linking. By default, these are the user environment directories of all systems within the same phase.Tip: You can change the default INCS variable specification by customizing the makefile template file maketmpl.maketmpl.Warning: If a header file cannot be found, an error message is issued and no code will be generated.External classes and the Cayenne class libraryIf you are using the Cayenne class library, the include directory in your user environment (where the include files were copied to during the configuration of your C++ environment) is part of this set of directories as well.The directory in which the header files of the Cayenne class library are stored (the include directory in your user environment, that is) is already part of the default INCS variable specification in the makefile. Therefore, it will be sufficient to just create a class by the same name (e.g. String) in another system. Do not add any attributes or methods to this class. Example ClassThe example class Person contains an attribute name, whose data type is String. The class String is defined in another system. The header file String.h will be included in the generated file Person.h. As the include directory is part of the INCS variable specification in the makefile, the linker will be able to locate this file.FILENAME="00498.unk" ORIGFILE="pics/extclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Example code (generated)The header file String.h is added to the include section of the generated file Person.h:...// File : Person.h...#ifndef PERSON_H#define PERSON_H 1#ifndef STRING_H#include "String.h"#endif...External classes and scopeThe initial scope of a class is Phase, so if an external class is used to indicate the type of an attribute, for example, the class is known to that system. However, if the scope of the external class was pushed down to system level, its definition would be obscured, and the other system would not be able to find the external class.ID="39660"Specifying External Header FilesExternal Header FilesYou can use external classes to have a particular header file (or multiple header files) included in a generated file. You specify external header files through the class property External Include List.Example ClassThis example class contains a data attribute with the type Date. This is the name of a class that is defined in another system. The class Date does not have any attributes or methods but it does have the header file datefmt.h specified as External Include File. Warning: Make sure that the directories in which the specified include files are stored are part of the INCS variable specification in the makefile.FILENAME="00499.unk" ORIGFILE="pics/cltype.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"FILENAME="00500.unk" ORIGFILE="pics/extcls2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"FILENAME="00501.unk" ORIGFILE="pics/extincls.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Example CodeInstead of the header file Date.h, the file datefmt.h is now included in the header file generated for the class Person:...// File : Person.h...#ifndef PERSON_H#define PERSON_H 1#include <datefmt.h>...ID="20009"Specifying an External SourceExternal Class SourceIt can be useful to model classes for which source files and header files are already available; for example, when you are using an external GUI builder.External header fileWith the property External Class Source, you can specify the name of the header file whose contents must be used instead of the header file that would normally have been generated for the class.During code generation, the contents of the specified header file are copied over to the file className.h.External header and source fileYou can also specify the name of a header file and a source file as value of the External Class Source property. The contents of the first file is copied over to the file className.h, that of the second to the file className.cpp. Use commas to separate file names.Warning: If you specify a header file after a C++ source file, the contents of the header file will be copied into className.cpp and the contents of the C++ file into className.h.ExampleThe following figure shows an example of the property External Class Source without specified path names:FILENAME="00502.unk" ORIGFILE="pics/prpextcl.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"During code generation, no code is generated for the class Person, but the contents of the files Constr.h and Constr.cpp are copied over to the files Person.h and Person.cpp respectively.ID="40407"Handling Special ObjectTeam ClassesIntroductionSpecial ObjectTeam classes can be used to force the generation of the following C++ constructions:COLS="2"COLNAME="1" COLWIDTH="208p"COLNAME="2" COLWIDTH="240p"COLNAME="1" VALIGN="TOP" MOREROWS="0"C++ ConstructionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam classCOLNAME="1" VALIGN="TOP" MOREROWS="0"typedefCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="24618" TYPE="XREF-TEXTCOPY"Mapping Typedef ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="12612" TYPE="XREF-TEXTCOPY"Mapping Generic Typedef ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"enumCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="13941" TYPE="XREF-TEXTCOPY"Mapping Enum ClassesID="24618"Mapping Typedef ClassesIntroductionThe typedef mechanism in C++ allows you to introduce synonyms for existing predefined, derived, and user-defined data types. The syntax for a typedef is:typedef dataType identifierFor example:typedef double wagesTypedef ClassIn ObjectTeam you use a typedef class to model a C++ typedef construction. This class:n has only one attributen has no methodsn is not a subclassn has no binary associationsn has no associations with a link attribute or an association as class (see REFID="38957" TYPE="XREF-TEXTCOPY"Mapping Association Classes)The typedef class name is generated into the typedef identifier, the attribute type into the typedef dataType. The attribute name is not important. The attribute type can be a:n standard type n class typeNote: No source file is generated for typedef classes.ExampleExample class:FILENAME="00503.unk" ORIGFILE="pics/typedef.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"MyTypeDef.h (generated file)...#ifndef MYTYPEDEF_HXX#define MYTYPEDEF_HXX 1#ifndef MYCLASS_HXX#include "MyClass.hxx"#endif// Start user added include file section// End user added include file sectiontypedef MyClass MyTypeDef;#endif // MYTYPEDEF_HXXTypedefs and subclassesClasses derived from a typedef class are regarded as normal subclasses by the C++ code generator. Example:FILENAME="00504.unk" ORIGFILE="pics/typedef2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"MySubClass.h (generated file):..#ifndef MYSUBCLASS_HXX#define MYSUBCLASS_HXX 1// Start user added include file section// End user added include file sectionclass MySubClass {...};#endif // MYSUBCLASS_HXX...How to avoid generating a typedef classFor every class that has only one data attribute and no methods, the C++ code generator generates a typedef construction.However, you may have such classes in your model for which you do not want to generate a typedef. The way of getting around this is to add the following method to the class:$createThis method signals the C++ generator to handle the class as a regular class.ID="12612"Mapping Generic Typedef ClassesIntroductionGeneric typedef constructions are typedefs through which you can define a synonym for the following C++ list types:n Pointern Pointer setn Dictionaryn Pointer set dictionaryIn ObjectTeam, you model a generic typedef by associating a typedef class with the class you want to specify the typedef for. Which C++ construction is used in the typedef is determined by the following two factors:n the multiplicity at the other end of the typedef classn the type of association (normal or qualified):How to specify a generic typedef classΣ To specify a generic typedef class:1 Draw a typedef class and give it a name.2 Make sure the class does not have any of the following:- data attributes- methods- superclasses3 Draw an association between the typedef class you have just drawn (class A) and the class for which you want to generate the generic typedef (class B).Note: The multiplicity at the side of class B determines which generic typedef is generated.4 Supply a role at the side of class B.The name of the role is not important, but must be provided.Association (optional - one)TERM1="generic typedef class" TERM2="example of generated C++ code"TERM1="C++" TERM2="code from generic typedef class"The following CD shows a generic typedef class and the typedef generated for the typedef class myTypeDef.FILENAME="00505.unk" ORIGFILE="pics/gtpdef1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"myTypeDef.h (generated file):...typedef Person* myTypeDef;...Association (optional - many)TERM1="generic typedef class" TERM2="example of generated C++ code"TERM1="C++" TERM2="code from generic typedef class"The following CD shows a generic typedef class and the typedef generated for the typedef class myTypeDef:FILENAME="00506.unk" ORIGFILE="pics/gtpdef2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Generated Code (header file):...#include <PtrSet.h>...typedef PtrSet< Person > myTypeDef;...Qualified association (optional - one)TERM1="generic typedef class" TERM2="example of generated C++ code"TERM1="C++" TERM2="code from generic typedef class"The following CD shows a generic typedef class and the typedef generated for the typedef class myTypeDef. Note: The data type of the qualifier is int.FILENAME="00507.unk" ORIGFILE="pics/gtpdef3.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Generated Code (header file):...#include <PtrDict.h>...typedef PtrDict< int, Person > myTypeDef;...Qualified association (optional - many)TERM1="generic typedef class" TERM2="example of generated C++ code"TERM1="C++" TERM2="code from generic typedef class"The following CD shows a generic typedef class and the typedef generated for the typedef class myTypeDef. Note: The data type of the qualifier is int.FILENAME="00508.unk" ORIGFILE="pics/gtpdef4.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"myTypeDef.h (generated file):...#include <PSetDict.hxx>...typedef PSetDict< int, Person > myTypeDef;...ID="13941"Mapping Enum ClassesIntroductionAn enumeration (enum) is a C++ type with named constants. The syntax for an enum is:enum enumName {enumList};where enumList is a list of enumerators. Enumerators can have values.Enum classIn ObjectTeam you use an Enum class to model a C++ enumeration. This class:n has only class attribute of type enumn has no methodsn is not a subclassn has no associationsThe class name is not important. The attributes of an Enum class are generated into enumerators. Default values can be specified for these attributes, but are not required.ExampleIn this example class, no values have been specified for the enumerators.FILENAME="00509.unk" ORIGFILE="pics/enum1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"myEnumClass.h (generated file):...enum myEnumClass { a, b, c};...In this example class, values have been specified for the enumerators.FILENAME="00510.unk" ORIGFILE="pics/enum.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"myEnumClass.h (generated file):...enum myEnumClass { a = 15, b = 20, c = 25};...ID="23714"What is Not Supported by the C++ Code GeneratorIntroductionObjectTeam allows you to draw certain constructions or to use certain diagram objects in a CD that are ignored by the C++ code generator, for example:n Ternary associationsn Numerical constraintsn Subset constraints between associationsn Propagations of operationsThese constructions are further discussed in this section.Ternary associationsThe C++ code generator generates code for all the individual classes in a ternary associations, but ignores the association itself.Ternary associations can be drawn by combining the N-ary Association symbol with n-ary Association Connectors.Example ternary association:FILENAME="00511.unk" ORIGFILE="pics/ternacc.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Note: A ternary association can often be represented differently, for instance by introducing a fourth class that manages the association's constraints.Multiplicity constraintsMultiplicity constraints other than 1+ are ignored by the C++ code generator. Multiplicity constraints are specified by a multiplicity specification string.Example multiplicity constraint:FILENAME="00512.unk" ORIGFILE="pics/multcstr.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Subset constraints between associationsMultiple associations can be drawn between two classes. With the Constraint symbol you can specify a subset constraint between two associations. Subset constraints have no meaning for the C++ code generator.Example subset constraint:FILENAME="00513.unk" ORIGFILE="pics/subscstr.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Propagation of operationsIn an association between two classes, you can indicate the propagation of an operation using the Propagation symbol. Propagations have no meaning for the C++ code generator.FILENAME="00514.unk" ORIGFILE="pics/propgt.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppnpers.fm5.mif"Chapter 4 Reverse ID="32714"and Round-Trip EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++IntroductionTERM1="project" TERM2="using data from other sources"This chapter describes how to use reverse engineering and round-trip engineering with the C++ code generator.Reverse engineeringOne of the benefits of an object-oriented design methodology is its support for the reuse of software components. Reverse engineering facilitates this by allowing you to use existing C++ code in your project. This code may come from other projects or from third-parties, such as class library vendors or public domain software sites.Round-trip engineeringThe C++ code generator generates header files and source files.n TERM1="engineering"The header files are complete when they are generated and do not normally need to be edited. However, if you do edit them, you can often use round-trip engineering to move your changes back into the CDMs of the Object Design phase. This ensures that your changes are preserved when you regenerate the header files.n The source files, which must be edited, include comments that indicate where you should add code. If you add code only in the places indicated, when you regenerate the source file, ObjectTeam copies your changes to the new source files.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26044" TYPE="XREF-TEXTCOPY"Reverse Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29914" TYPE="XREF-TEXTCOPY"Round-Trip Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13ID="26044"Reverse EngineeringIntroductionTERM1="reverse engineering"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="class library" TERM2="reverse engineering"Reverse engineering parses C++ header files and builds CDs and CDMs that show the class hierarchy defined in the header files. Purpose Use reverse engineering to capture and display the class hierarchy of a class library so that you can reuse the classes in the library. Reverse engineering:n Makes class libraries available in ObjectTeam.n Helps you to understand the structure and functionality of class libraries.Not an import utilityReverse engineering is not designed to capture all the information in a header file. Therefore, do not use reverse engineering to import classes in order to maintain them in ObjectTeam. If you generate header files from the CDs and CDMs created by reverse engineering, the generated header files are not the same as the original header files.TERM1="reverse engineering" TERM2="class library"TERM1="translating" TERM2="c++ header files to Class Association Diagrams"ID="22575"What happens during reverse engineeringReverse engineering uses the following steps to translate C++ header files into CDs and CDMs that show the class hierarchy:1 Parses the C++ header files, then maps the C++ elements to ObjectTeam elements.2 Creates CDs and CDMs that define the ObjectTeam elements.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36369" TYPE="XREF-TEXTCOPY"Parsing the Files 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15009" TYPE="XREF-TEXTCOPY"Creating the Diagrams 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23867" TYPE="XREF-TEXTCOPY"Running Reverse Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="36369"Parsing the FilesParsing the header filesThe parser processes the header files of the class libraries as follows:n It recognizes the definitions of the following C++ constructs:- class- struct- enumn It treats complex constructs as follows:- Nested type definitions are recognized, but processed as if they are not nested. This can result in duplicate definitions.- References to nested type definitions are transformed into references to type definitions that are not nested. For example, nested::type becomes nested@type.- Definitions of templates are ignored; references to instances of the template are mapped to a reasonable name. For example, List<Thing*> becomes List_ThingPtr.n It allows data types to be referenced before they are defined.n It detects associations according to a heuristic process. The associations can be transformed either into graphical associations or into attributes and methods.Preprocessing directivesThe parser ignores all preprocessor symbols, such as #ifdef and #define. However, you can specify a preprocessor to be run before reverse engineering, as described in REFID="23867" TYPE="XREF-TEXTCOPY"Running Reverse Engineering.Mapping the elementsTERM1="C++" TERM2="reverse engineering"TERM1="mapping" TERM2="in reverse engineering"TERM1="reverse engineering" TERM2="mapping"After parsing the header file, reverse engineering maps the C++ constructs to ObjectTeam elements, as shown in the following table:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"C++ ConstructionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam ElementCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"StructCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"EnumCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data memberCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute and the attrib_access property is setCOLNAME="1" VALIGN="TOP" MOREROWS="0"Member functionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and the method_access property is setCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConstructorCOLNAME="2" VALIGN="TOP" MOREROWS="0"$createCOLNAME="1" VALIGN="TOP" MOREROWS="0"DestructorCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"Static memberCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class feature (a $ is added to the front of the name)COLNAME="1" VALIGN="TOP" MOREROWS="0"Pure memberCOLNAME="2" VALIGN="TOP" MOREROWS="0"{abstract} is added at the end of the operationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Virtual memberCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation with is_dyn_bound property addedCOLNAME="1" VALIGN="TOP" MOREROWS="0"Const memberCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation with const_function propertyCOLNAME="1" VALIGN="TOP" MOREROWS="0"EnumeratorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class feature with type enumCOLNAME="1" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data type without modifiers and the attribute type modifierCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type "void *"COLNAME="2" VALIGN="TOP" MOREROWS="0"Operation with return type genptrCOLNAME="1" VALIGN="TOP" MOREROWS="0"One-dimensional character arrayCOLNAME="2" VALIGN="TOP" MOREROWS="0"One-dimensional character arrayCOLNAME="1" VALIGN="TOP" MOREROWS="0"SuperclassCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam inheritance structure that has the inher_access property setCOLNAME="1" VALIGN="TOP" MOREROWS="0"Name of an instance of a templateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Reasonable name; for example, CList<X> becomes Clist_XCOLNAME="1" VALIGN="TOP" MOREROWS="0"Nested typesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Name in which @ replaces ::Implicit C++ constructions referring to associations can also be mapped to ObjectTeam elements, however, it will not be possible to map every construction. Customizing reverse engineeringThe customization file tcl\rev_assoc.tcl file in the cplusplus module defines the reverse engineering rules used to detect associations and attribute accessors. You can modify reverse engineering by editing this customization file, as described in REFID="36160" TYPE="XREF-TEXTCOPY"Chapter 5, Customizing Code Generation.Warning: This customization file is not used unless you select the Reverse Engineer Associations option during reverse engineering.ID="15009"Creating the DiagramsCreating diagramsTERM1="diagrams" TERM2="draft, in reverse engineering"TERM1="reverse engineering" TERM2="draft diagrams"After mapping the C++ constructs to ObjectTeam elements, reverse engineering creates the CDs and CDMs that define the ObjectTeam elements. It creates the following CDs:n One or more CDs to show the class hierarchyn One or more CDs to show the associations among the classesNaming conventions for CDsEach CD is named for the primary class in the CD; for example, Class1. The word Tree is appended to the name of each CD that defines part of the class hierarchy; for example, TestClass1Tree.How many diagrams are createdThe number and complexity of the CDs created by reverse engineering depend largely on the following:n The files that you select for reverse engineering, particularly the number and complexity of classes defined in the files.n The reverse engineering options that you select, particularly whether you choose to reverse engineer associations.ID="11053"Options for reverse engineeringDuring reverse engineering, ObjectTeam displays the following dialog box prompting you to select the options that you want to use:FILENAME="00515.unk" ORIGFILE="pics/reoption.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppeng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box):COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Prefix used to name each generated CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only class structure is generated)n Only CDMs (only class features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering creates a separate reference CD for each class that exceeds the maximum size. The class is folded in all diagrams other than the reference diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class. When a class exceeds this size, it is folded.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree. When a class hierarchy exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram. When a diagram exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Reverse Engineering Associations is selected, specifies the algorithm reverse engineering uses to create the CDs that show the associations:n Simple. Creates a CD for each class that has associations.n Grid. Creates a CD for each n classes, where n is the number specified in the Number of Classes per CD field.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of Classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Placement Algorithm is Grid, specifies the number of unfolded classes per CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"Reverse Engineer AssociationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering examines the attributes and accessor methods defined on each class to determine the associations among classes. It then creates CDs that show those associations.COLNAME="1" VALIGN="TOP" MOREROWS="0"Input Filter CommandCOLNAME="2" VALIGN="TOP" MOREROWS="0"Command used to preprocess the header files. Specify the command using the format:myfilter %1 %2 It is then executed asmyfilter input-file output-file If this option is not specified it will default to the settings of the M4_reveng_filter variable. If the M4_reveng_filter is not set, no input filter will be used.Note: Reverse engineering ignores all preprocessor directives, such as #ifdef and #define. Use this field to specify a preprocessor that can resolve these directives before ObjectTeam reverse engineers the file.COLNAME="1" VALIGN="TOP" MOREROWS="0"Skip Identifiers FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"File containing a list of identifiers to be ignored by reverse engineering. The file must be an ASCII file that contains the identifiers; separate the identifiers using white space.Note:If you want to retain the specification of this file for repeated use, set the M4_reveng_skipfile variable in your Meta4userenv file. For example:M4_reveng_skipfile=\user\bob\skip_file.txt;RWThis value will be displayed in this field. Note that if you change the value in this field, it is not written to the Meta4UserEnv file.CDs that show the class hierarchyFollowing are the guidelines used to draw the CDs that show the class hierarchy:n Reverse engineering creates a CD for each top-level parent class. The CD contains the parent class and all subclasses.n If a class has multiple parent classes, reverse engineering creates a CD for each parent. The CD for the first parent class contains the parent class, the child class, and all subclasses of the child class. The CD for each of the other parent classes contains only the parent class and the child class; in these diagrams, the child class is folded.FILENAME="00516.tif" ORIGSEQ="7" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cppeng.fm5.mif"CDs that show associationsIf you select the Reverse Engineer Associations option in the Reverse Engineer dialog box, reverse engineering creates CDs that show the associations. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box. Both algorithms are described below.If you do not select the Reverse Engineer Associations option, reverse engineering shows associations only as attributes and accessor methods in the appropriate classes.Note: Bidirectional associations are reverse engineered as two unidirectional associations.Simple algorithmIf you select Simple in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Creates a CD for each class that has one or more associations. 2 Unfolds the main class in each CD and folds all associated classes.ExampleThe examples for the simple and grid algorithms are created by reverse engineering the same files. The following example shows the CDs created using the simple algorithm.FILENAME="00517.unk" ORIGFILE="pics/rndsimp2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppeng.fm5.mif"FILENAME="00518.unk" ORIGFILE="pics/rndsimp1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppeng.fm5.mif"Grid algorithmIf you select Grid in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Divides all classes into groups of n, where n is the number specified by the Number of Classes per CD field of the Reverse Engineer dialog box. The algorithm attempts to group associated classes.Tip: To create a diagram that contains all classes, specify n as the number of classes being reverse engineered (or greater).2 For each group of classes, creates a CD and adds the classes (unfolded) to the CD. To position the classes, reverse engineering uses a uniform grid whose squares are the size of the largest class in the group and its longest association.3 For each class in each CD, draws all associations from the class to all associated classes. If an associated class is not in the CD, reverse engineering adds it (folded) to the CD.ExampleThe examples for the simple and grid algorithms are created by reverse engineering the same files. The following example shows the CD created using the grid algorithm. (The diagram layout has been modified to fit on the page.)FILENAME="00519.unk" ORIGFILE="pics/rndgrid.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppeng.fm5.mif"ID="23867"Running Reverse EngineeringIntroductionThis section describes how to run reverse engineering.How to reverse engineerΣ To reverse engineer a class library from one or more header files:1 Move to System level in Object Design phase.Note: Typically, you reverse engineer into an empty system. This prevents name conflicts with existing classes. Classes are reverse engineered with scope 'Phase' by default, and, therefore, sometimes an empty phase may be needed.2 Select Utilities | Reverse Engineer C++.A Reverse Engineer C++ dialog box appears (see REFID="14652" TYPE="XREF-TEXTCOPY"Files for reverse engineering), prompting you to select the files to be reverse engineered.3 Select the files that you want to reverse engineer, then select OK.A Reverse Engineer C++ dialog box appears (see REFID="11053" TYPE="XREF-TEXTCOPY"Options for reverse engineering), prompting you to select the options that you want to use. 4 Select the options, then select OK.ObjectTeam reverse engineers the selected file, reporting the results in a Monitoring window.ID="14652"Files for reverse engineeringDuring reverse engineering, ObjectTeam prompts you to select the files that you want to reverse engineer. In most cases, you select C++ header files. Tip: Reverse engineering creates CDs and CDMs based on the files that you select. Therefore, you generally want to reverse engineer all files in a library at the same time.WindowsThe following illustration shows the Windows dialog box. Use the File Name and Files of Type fields to filter the list of files displayed. FILENAME="00520.unk" ORIGFILE="pics/rvngselw.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppeng.fm5.mif"UNIXThe following illustration shows the UNIX dialog box. Use the Filter field and Filter button to filter the list of files displayed.FILENAME="00521.unk" ORIGFILE="pics/revengu1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppeng.fm5.mif"ID="29914"Round-Trip EngineeringIntroductionRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated C++ header files. Use round-trip engineering to update the ObjectTeam model before you regenerate the header files.Note: Round-trip engineering is not necessary, and does not work with, C++ source files. It is only needed for the C++ header files.PurposeThe code generator generates code based on the ObjectTeam model. If you do not update the ObjectTeam model before regenerating the header files, the new header files do not include your changes. ExampleYou generate C++ header files. You then add a new method to a generated file. If you do not update the ObjectTeam model, the model does not contain the operation that corresponds to the method. When you regenerate the header file, the code generator assumes that you deleted the operation from ObjectTeam and, therefore, does not include the obsolete method in the newly generated file.Changes captured by round-trip engineeringIf you have made the following types of changes to the generated header file, round-trip engineering updates the ObjectTeam model based on those changes:n Added or deleted attributes, or edited attribute declarationsn Added or deleted methods, or edited method declarationsWhat happens during round-trip engineeringThe following table shows the steps that occur during round-trip engineering:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"You select the generated (edited) header files that you are interested in and start round-trip engineering.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam parses the selected files and compares the information in the files with the information in the ObjectTeam model.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"For each difference it finds, ObjectTeam proposes an action and prompts you for confirmation. For example:In class "Account": delete attribute "Address"?COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Based on your answers, ObjectTeam updates the ObjectTeam model.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34436" TYPE="XREF-TEXTCOPY"Parsing the Files 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20879" TYPE="XREF-TEXTCOPY"Running Round-Trip Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17ID="34436"Parsing the FilesIntroductionThis section describes which changes to the generated C++ header files are captured by round-trip engineering. Changes to attributesIn a header file generated by ObjectTeam, the section that defines attributes (Private section only) is indicated by the following comment://User-defined attributesWithin this section, you can make the following types of changes and round-trip engineering can move them back into the CDMs of the Object Design phase:n Add attributesn Delete attributesn Reorder attributesn Change the default value of an attributeNote: If you change a default value, be sure to change it in the comment as well as in the code; round-trip engineering reads the value from the comment.Note: If you rename an attribute, round-trip engineering removes and adds the attribute; therefore, its properties are lost.Default constructor/destructorIf you add or delete an attribute, you can also change the signature of the default constructor for the class. This is the only change to the default constructor/destructor that round-trip engineering moves back to the CDMs.Attribute accessor methodsIf you add or delete an attribute, you can also add or delete its accessor methods. This is the only change to the attribute accessor methods that round-trip engineering moves back to the CDMs. Note: If you add an attribute without adding its accessor method, round-trip engineering sets the attribute access to read-only; that is, in the Attribute Access property of the attribute, both the Read and Write fields are set to None.Changes to operationsIn a header file generated by ObjectTeam, the sections that define operations (Public, Protected, and Private sections) are indicated by the following comment://User-defined methodsWithin these sections, you can make the following types of changes and round-trip engineering can move them back into the CDMs of the Object Design phase:n Add methodsn Delete methodsn Change method signatures by adding, removing, or reordering parameters, changing default values, or changing the return type. Note: If you rename an operation or parameter, round-trip engineering removes and adds the object; therefore, its properties are lost.Tip: If you have multiple methods with the same name, do not delete one and change the signature of another at the same time. Delete one, run round-trip engineering, change the signature of the other, and run round-trip engineering. This approach prevents potential errors in round-trip engineering.ID="20879"Running Round-Trip EngineeringCustomizing round-trip engineeringThe customization file roundtrip.roundtrip in the M4_home/etc directory controls what actions round-trip engineering proposes, as well as the default answers it supplies. To examine or modify the current behavior of round-trip engineering, examine or modify the customization file.How to run round-trip engineeringΣ To run round-trip engineering:1 Move to the System level of the Implementation phase.2 Select the C++ header files on which you want to run round-trip engineering.3 Select Utilities | Round Trip Selected.ObjectTeam opens the Roundtrip Selected Files dialog box, compares the classes in the generated files to the classes in the Object Design phase, and then begins proposing actions and prompting you for confirmation.FILENAME="00522.unk" ORIGFILE="pics/rndtrip.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppeng.fm5.mif"4 Use the buttons to respond to the proposed actions:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ButtonCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"YesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Make the proposed change.COLNAME="1" VALIGN="TOP" MOREROWS="0"NoCOLNAME="2" VALIGN="TOP" MOREROWS="0"Do not make the proposed change.Note: When you regenerate the C++ header file, the change to the file will be lost.COLNAME="1" VALIGN="TOP" MOREROWS="0"Default to AllCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use the default response for all remaining questions.COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cancel all changesObjectTeam updates the model based on your responses.Chapter 5 Customizing ID="36160"Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++IntroductionThis chapter contains an introduction to the code generation process in ObjectTeam and an overview of the areas that can be customized and configured.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21823" TYPE="XREF-TEXTCOPY"How C++ Code is Generated 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29462" TYPE="XREF-TEXTCOPY"How to Customize the Code Generation 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32178" TYPE="XREF-TEXTCOPY"Customizing Class Libraries 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28522" TYPE="XREF-TEXTCOPY"Customizing Types 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'43COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30129" TYPE="XREF-TEXTCOPY"Customizing the Extension of Generated Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'47COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32725" TYPE="XREF-TEXTCOPY"Customizing the Location of Generated Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'50COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40004" TYPE="XREF-TEXTCOPY"Customizing Standard Headers 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'51ID="21823"How C++ Code is GeneratedPhases in the code generation processThe code generation process in ObjectTeam can be divided into the following phases:1 Traverse the OOPL model2 Generate target specific code3 Write the generated code to the file systemClasses used in the code generation processCode generators in ObjectTeam consist of a set of Object Tcl classes, whose definitions are stored in Tcl files. Object Tcl is an object-oriented extension to standard Tcl developed by Cayenne.The following types of classes can be distinguished in the code generation process:COLS="3"COLNAME="1" COLWIDTH="138p"COLNAME="2" COLWIDTH="220p"COLNAME="3" COLWIDTH="90p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type of classCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Tcl fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"ImporterCOLNAME="2" VALIGN="TOP" MOREROWS="0"Language-independent and language-dependent Importer classes handle the import of (new or selected) classes from the Object Design Phase into the Implementation phaseCOLNAME="3" VALIGN="TOP" MOREROWS="0"importer.tclcppimport.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"File handlingCOLNAME="2" VALIGN="TOP" MOREROWS="0"Language dependent FileHandler classes handle the mapping of class names to file names and vice versa.Importer classes use these classes to map file names to class names and class names with file types to file names.Regenerator classes use these classes to open a file using the class name and the file type.COLNAME="3" VALIGN="TOP" MOREROWS="0"cppgentor.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"GeneratorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Language dependent interface classes to the actual code generator.COLNAME="3" VALIGN="TOP" MOREROWS="0"cppgentor.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"RegeneratorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Language dependent Regenerator classes read existing code and filters out parts that can be reusedCOLNAME="3" VALIGN="TOP" MOREROWS="0"cppgentor.tclThese classes are not further discussed in this section. The focus is on the actual code generation, which is based on the OOPL model.The OOPL ModelThe OOPL model in a nutshellThe OOPL model is a target language independent data model based on the Cayenne repository. It can be accessed through a Tcl interface, consisting of a class hierarchy that is built-in in the Tcl interpreter ObjectTeam Shell (otsh).A complete description of all the classes in the OOPL model and how they relate to one another can be found in ObjectTeam Repository Interface Guide. In this section, only the classes most important for C++ code generation are listed. The three main superclasses are:COLS="2"COLNAME="1" COLWIDTH="208p"COLNAME="2" COLWIDTH="240p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"HandlesCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25419" TYPE="XREF-TEXTCOPY"OPClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22502" TYPE="XREF-TEXTCOPY"OPTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attributes, methods and parameter typesCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19839" TYPE="XREF-TEXTCOPY"OPFeatureCOLNAME="2" VALIGN="TOP" MOREROWS="0"attributes and operationsNote: The classes from the OOPL model are not Tcl classes; however, they have been made available to Tcl.ID="25419"OPClassThe most important subclasses of OPClass are:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"HandlesCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPLinkClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association classesCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPClassTDefCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypedefsCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPClassGenericTypeDefCOLNAME="2" VALIGN="TOP" MOREROWS="0"Generic typedefsCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPClassEnumCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumsID="22502"OPTypeThe most important subclasses of OPType are:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"HandlesCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPBaseTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"standard typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPClassTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"class typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPTypeDefTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0" (generic) typedef class typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPEnumTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"enum class typeID="19839"OPFeatureThe most important subclasses of OPFeature are:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"HandlesCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPAttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPConstructorCOLNAME="2" VALIGN="TOP" MOREROWS="0"constructorCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPOperationCOLNAME="2" VALIGN="TOP" MOREROWS="0"methodOPAttributeThe most important subclasses of OPAttribute are:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"HandlesCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPDataAttrCOLNAME="2" VALIGN="TOP" MOREROWS="0"data attributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPGenAssocAttrCOLNAME="2" VALIGN="TOP" MOREROWS="0"association attributeOPConstructorThe most important subclasses of OPConstructor are:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"HandlesCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPInitializerCOLNAME="2" VALIGN="TOP" MOREROWS="0"initializerCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPCtorParameterCOLNAME="2" VALIGN="TOP" MOREROWS="0"constructor parameterOPOperationThe most important subclass of OPOperation is:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"HandlesCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPParameterCOLNAME="2" VALIGN="TOP" MOREROWS="0"method parameterBuilding the OOPL modelThe OOPL model is built up during code generation and can be traversed using Object Tcl. The result of traversing the OOPL model is used by the code generator to generate target language specific code files.If you want to customize any aspect of the code generation, you must be familiar with the structure of the (language-independent) OOPL model and the way it is used to generate language-specific code. This process is explained in the remaining part of this section.ID="33265"The Derived OOPL ModelWhy a derived OOPL model is requiredSince the OOPL model is a data-only model, which lacks functionality to generate anything, an extra model based on the OOPL model is needed: the derived OOPL model. ClassesEvery class from the OOPL model that is meaningful for the generation of the particular programming language has a Tcl counterpart in the derived OOPL model.The names of these Tcl classes resemble their counterparts; instead of the prefix OP they have a prefix indicating the target language (e.g. CppG).For example:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OOPL ModelCOLNAME="2" VALIGN="TOP" MOREROWS="0"Derived OOPL ModelCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"CppGClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"CppGtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPFeatureCOLNAME="2" VALIGN="TOP" MOREROWS="0"CppGFeatureID="33756"Class hierarchyThe derived model contains a class hierarchy similar to that of the OOPL model; the Tcl class CppGLinkClass, for example, is derived from CppGClass, just like OPLinkClass is derived from OPClass.The classes in the derived OOPL model are Tcl classes. Their definition (including attributes and methods) are stored in the Tcl file cppgclasses.tcl, which can be found in the tcl directory of the cplusplus module. The classes in the OOPL model, on the other hand, are compiled C++ classes, which have been made available to Tcl. The classes in the OOPL model are referred to as OP classes.OP and Tcl classesA Tcl class can be derived from both an OP class and a Tcl class, but the inheritance tree is invalid if the Tcl base class, in turn, has also been derived from an OP class.The Tcl class CppGLinkClass, for example, must be derived from its OP counterpart OPLinkClass. At the same time it must be derived from the Tcl class CppGClass, just like OPLinkClass is derived from OPClass. CppGClass, however, also has an OP class in its hierarchy (OPClass, that is). This renders the hierarchy for CppGLinkClass invalid.The hierarchy in the following model is invalid.FILENAME="00523.unk" ORIGFILE="pics/cmz01.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"Mix-in classesThe restriction on the classes from which a Tcl class can be derived is circumvented in the derived OOPL model by pushing in a so-called mix-in class. This concept is best explained in a picture. In the following picture, the class CppGLinkClassD is the mix-in class.FILENAME="00524.unk" ORIGFILE="pics/cmz02.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"Using mix-in classes allows inheriting data from the OOPL tree and functionality from the derived OOPL model consecutively.The name of a mix-in class resembles the name of the Tcl class it is derived from; only a capital D is added at the end. However, this name is not important.For example:COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Mix-in classCOLNAME="2" VALIGN="TOP" MOREROWS="0"Tcl base classCOLNAME="3" VALIGN="TOP" MOREROWS="0"C++ base classCOLNAME="1" VALIGN="TOP" MOREROWS="0"CppGLinkClassDCOLNAME="2" VALIGN="TOP" MOREROWS="0"CppGlinkClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"OPLinkClassMix-in classes do not contain any attributes or methods of their own, they inherit all functionality from their base classes. The mix-in class CppGLinkClassD, for example, is defined as follows:Class CppGLinkClassD : {CppGLinkClass OPLinkClass} {}Note: In the derived OOPL model, a mix-in class is created for every Tcl class, even if it is not strictly necessary.Self promotionThe self promoter is a special method that can be added to a derived class. It is called just after an object is created of the class from which the derived class is derived. Self promotion can thus be used to promote an object to an object of a derived class. Promote here, means extending a class's functionality without having to redefine any methods.Syntax:The syntax of a self promotion is as follows:selfPromoter superClass {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'subClass promote $thisExample class (the dotted line indicates self promotion):FILENAME="00525.unk" ORIGFILE="pics/slfprmt.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"Example code (Chimp.tcl):Class Chimp : {Monkey} {...}selfPromoter Monkey {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Chimp promote $this}In the example displayed above, an objects of the class Monkey will be returned if an object of the class Chimp is created.For example:# create a new object of the class Monkeyset obj [Monkey new]# find out the type of the object$obj objTypeThis will return the following:ChimpSelf promotion and the derived OOPL modelThe self promotion mechanism is used in the derived OOPL model to add a generate method to the OOPL model. By providing a derived OOPL model for every target language the same OOPL model can be used to generate code for different target languages.Since mix-in classes have been created for every Tcl class in the derived OOPL model, every OP class that has a counterpart in the derived model will be promoted to the corresponding mixed-in class.Example code:selfPromoter OPLinkClass {this} { CppGLinkClassD promote $thisNow if a new object of the class OpLinkClass is created, the type of this object will be CppGLinkClassD. The class CppGLinkClassD has a generate method in its inheritance tree, unlike OPLinkClass.Checking and code generationThe derived OOPL model is not only used for code generation, but also for (target language dependent) diagram checking. If it is used for checking, the mix-in classes must not be derived from OP classes, but from CM classes. CM classes are special classes used for checking.An if statement is used in the Tcl code to handle this twofold functionality in the derived OOPL model. In the case of the mix-in class CppGLinkClassD, for example, the following piece of Object Tcl code can be found:...if [isCommand CMLinkClass] { Class CppGLinkClassD : {CppGLinkClass CMLinkClass} { }} else { Class CppGLinkClassD : {CppGLinkClass OPLinkClass} { }}...The Target Language ModelIntroductionThe target language model consists of a collection of Tcl classes containing functionality to:n store information needed to generate code for a specific target language (C++, for example)n convert this information into target language compliant ASCII text.ExampleThe target language model stores a method's name and parameters and puts the keyword method, the class's name and two colons before writing out the method's name.Why a target language model is requiredThe classes in the derived OOPL model extend the classes in the OOPL method with generate methods. These generate methods build up the target language model. The classes in the target language model, in turn, contain generate methods themselves. After the target language model has been built up, these generate methods are called by the CppGenerator class, thus generating the code in text sections.ID="36289"Class hierarchyThe most important classes of the Target Language Model are:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Target Language Model ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Derived from:COLNAME="1" VALIGN="TOP" MOREROWS="0"CppClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"CppDefinitionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CppAttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"CppClFeatureCOLNAME="1" VALIGN="TOP" MOREROWS="0"CppGenMethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"CppMethodUser-Defined ClassesIntroductionIf you want to customize the way C++ code is generated, you have to introduce one or more user-defined classes based on classes from the OOPL model.ID="42227"Class hierarchyUser-defined classes required for customization must, in fact, be derived from:n the appropriate class in the OOPL modeln the corresponding class in the derived OOPL modelThe class from the OOPL model is promoted to the user-defined class. Example hierarchyThe class hierarchy is depicted in the following example for the OOPL model class OPClass.FILENAME="00526.unk" ORIGFILE="pics/cmz03.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"OPClass originates from the OOPL model, CppGClass originates from the derived OOPL model and CppGClassD is a mix-in class.See REFID="33265" TYPE="XREF-TEXTCOPY"The Derived OOPL Model for details on the (derived) OOPL model and mix-in classes.Example codeFrom the example picture, you would expect a class definition like the following:Class MyClass : {CppGClassD} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generate}method MyClass::generate {this tgt} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...}selfPromoter OPClass {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MyClass promote $this}However, user-defined Tcl classes can also be derived from existing user-defined Tcl classes. This situation is depicted in the following picture.FILENAME="00527.unk" ORIGFILE="pics/cmz04.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"Now how do you know from which class(es) in the derived OOPL model the new user-defined class must be derived? Actually, you don't need to know. If you are using the Tcl procedure customizeOOPLModel, you only need to know which class from the OOPL model you want to promote to your user-defined class.If this is the class OPClass for example, and your user-defined class is MyClass, then the class definition reads as follows:require "cgcustom.tcl"Class MyClass : [customizeOOPLModel OPClass MyClass] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generate}method MyClass::generate {this tgt} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...}selfPromoter OPClass {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MyClass promote $this}If your user-defined class were HisClass, for example, the class definition would be:require "cgcustom.tcl"Class HisClass : [customizeOOPLModel OPClass HisClass] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generate}method HisClass::generate {this tgt} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...}selfPromoter OPClass {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HisClass promote $this}Tip: Refer to REFID="30393" TYPE="XREF-TEXTCOPY"m_import.tcl for an example of an implementation of the generate method.The Tcl procedure customizeOOPLModelThe Tcl procedure customizeOOPLModel is stored in the file cgcustom.tcl, which can be found in the tcl directory directly under the M4 home directory.customizeOOPLModel takes care of positioning the user-defined class in the current class hierarchy. It requires two arguments: n the name of the customized class from the OOPL model (OPClass)n the user-defined class (MyClass)customizeOOPLModel also defines the following global variable containing the name of the actual superclass:userDefinedClassName:: superID="29462"How to Customize the Code GenerationIntroductionThe code generation in ObjectTeam is all Tcl based. Tcl code is interpreted rather than compiled, which makes the code generation process highly customizable. Moreover, the use of the object-oriented extension made to Tcl (Object Tcl) allows you to make changes to the code generation process and reuse default functionality where necessary.The use of ObjectTeam modules, in conclusion, facilitates managing customizations.In this sectionThis section discusses two ways of customizing the code generation process:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10241" TYPE="XREF-TEXTCOPY"Making Simple Customizations 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31773" TYPE="XREF-TEXTCOPY"Using Modules to Store Customizations 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17ID="10241"Making Simple CustomizationsSimple customizationSimple customizations are customizations that can be implemented quickly and easily in a single customization file, without having to create separate modules. Bear in mind, though, that simple customizations are much harder to maintain than customizations that are stored in separate modules.How is code generation startedWhen a user of ObjectTeam activates the code generation by selecting Utilities | Generate C++ on system level in the Implementation phase, the Object Tcl interpreter otsh is started with a couple of arguments. For example:M4_home/bin/otsh -S oopl -f import.tcl -- -newTip: The first line that is sent to the Monitoring Window shows the exact otsh command.The file name behind the argument -f specifies the Tcl file that is intepreted first: import.tcl in this case. This file activates other (language-dependent and language-independent) Tcl files, which, in turn, activate other Tcl files, and so on.Customizing the code generationThe language-dependent Tcl files used during code generation are stored in the tcl directory of the corresponding module (cplusplus for example). These files are interpreted at some point by otsh. If you know which method of which class you want to change or add, you can include the new or changed method implementation in the following customization file:u_import.tclotsh checks on the existence of this file and sources it if it finds it.Σ To make a simple customization1 Create an empty customization file u_import.tcl on the customization level of your choice.Note: Open this file if it already exists on the customization level of your choice.2 Locate from the default code generation files the Tcl method you want to overload.Tip: Most of the functionality regarding the lay-out of code can be found in the Tcl file that contains the target language model, M4_home/modules/cplusplus/tcl/cppgrammar.tcl 3 Copy the method implementation and paste it into the u_import.tcl file.4 Edit the method implementation and save the u_import.tcl file.Tip: Add a line similar to the following to the top of the u_import.tcl file. This makes it easier to check later whether the customization file is really evaluated by ObjectTeam:puts "*** u_import.tcl loaded ***"If you now generate code, the customized method will be called instead of the default one. Warning: The new method will only be called for newly generated classes or classes that have changed since the last time code was generated. Existing source files whose corresponding classes have not changed will not be regenerated.ExampleThe method CppMethod::genRegenCode adds, among other things, a standard comment line to the (empty) body of a user-defined method. For example:Track.cpp (generated file):...void Track::continuesTo(int nextCoordinate){ // !! Implement this function !! int continuesTo_is_not_yet_implemented;}...This default method can be found in the file M4_home/modules/cplusplus/tcl/cppgrammar.tcl. If you want to change the exclamation marks in the comment line into something else, hatch signs (#), for example, you must copy the default method implementation CppMethod::genRegenCode from cppgrammar.tcl to a u_import.tcl file and change it accordingly:u_import.tcl (user-defined file):puts "*** u_import.tcl loaded ***" method CppMethod::genRegenCode {this section} { if {[[$this regenSet] empty] && ([$this name] != "")} { $section append "## Implement this function \n" set name [$this name] if [string match operator* $name] { set name "operator" } $section append "int ${name}_is_not_yet_implemented;\n" } else { $section indent - [$this regenSet] foreach regen { $section appendSect $regen } $section indent + }}During code generation, the method CppMethod::genRegenCode from the u_import.tcl file will take precedence over the same method from the file cppgrammar.tcl, and hatch signs instead of exclamation marks will be generated:Track.cpp (generated file):...void Track::continuesTo(int nextCoordinate){ // ## Implement this function !! int continuesTo_is_not_yet_implemented;}...ID="31773"Using Modules to Store CustomizationsIntroductionAdvanced code generation customizations are best stored in separate user-defined ObjectTeam modules. The Object Tcl code needed to extend or redefine the default code generation is then stored in such a module, which can be turned on or off on demand.Creating a moduleΣ These are the steps you need to take in order to create a user-defined module:1 Create a new module directory.This directory can be created anywhere in the file system, as long as if it is accessible to ObjectTeam. The directory name is not important.2 Create the following file in the new module directory:- properties.propertiesSee REFID="34289" TYPE="XREF-TEXTCOPY"properties.properties for details on the contents and structure of this file.3 Create the following directories in the new module directory:- tcl - etc 4 Create the following file in the tcl directory:- m_import.tclThis file contains the definition of the user-defined Object Tcl class(es). See REFID="42227" TYPE="XREF-TEXTCOPY"Class hierarchy for details on the contents and structure of this file.5 Create, if necessary, the following customization files in the etc directory:COLS="3"COLNAME="1" COLWIDTH="145p"COLNAME="2" COLWIDTH="157p"COLNAME="3" COLWIDTH="129p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Customization fileCOLNAME="2" VALIGN="TOP" MOREROWS="0"Customization of COLNAME="3" VALIGN="TOP" MOREROWS="0"See for detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"propdefs.propdefsCOLNAME="2" VALIGN="TOP" MOREROWS="0"item, component and file propertiesCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Customization GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"proplocs.proplocsCOLNAME="2" VALIGN="TOP" MOREROWS="0"item, component and file propertiesCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam Customization GuideCOLNAME="1" VALIGN="TOP" MOREROWS="0"standtypes.standtypesCOLNAME="2" VALIGN="TOP" MOREROWS="0"standard typesCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="28522" TYPE="XREF-TEXTCOPY"Customizing TypesWith these customization files you can extend the customization files residing at a higher level in the repository. As they are read incrementally, you only have to include new entries in these files.Activating a moduleTo activate a user-defined module, add it to the customization file modules.modules on the appropriate customization level and turn it on. You can do this using the Module Customization Editor.See ObjectTeam Customization Guide for details on module customization.Before testing the new module, move the Browser to Corporate level. The new module will be read if you move down to the appropriate level.Example CustomizationIntroductionIn the following customization example, a new class property Singleton Class is introduced. Classes for which this property is turned on will be generated into singleton classes. A singleton class is a class that can only have one instance. A global point of access is provided to singleton classes.ResultA singleton class differs from a regular class in that:n the access level of its constructor is privaten it does have the following special method:// Special methodsstatic className* instance();This method is generated as inline method and is therefore stored in the generated header file.n it does have the following special (static) attribute:// Special attributestatic Author* obj /* = 0 */;ExampleHere is an example of the header file of a singleton class Author:...// File : Author.hxx...class Author {public: // Default constructor/destructor ~Author(); ... // Special methods static Author* instance();protected: ...private: // Default constructor/destructor Author(); ... // Special attribute static Author* obj /* = 0 */; // Association attribute storage};// Do not delete this line -- regeneration end marker...inline Author* Author::instance(){ if (obj==0) { obj=new Author(); } return obj;}#endif // AUTHOR_HXXFilesThe following files and directories are needed for this customization:moduleDirectory\properties.propertiesmoduleDirectory\etc\propdefs.propdefsmoduleDirectory\etc\proplocs.proplocsmoduleDirectory\tcl\m_import.tclThe name of the moduleDirectory in this example is C:\MyModules\cpp-singleton.ID="34289"properties.propertiesThis file contains some information on the module itself. For this example it looks like this:#----------------------------------------# Property Namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Property Value#----------------------------------------namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| cpp-singletonversionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| 1.0longNamename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| C++ singletonrequiredModules name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| cplusplus typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| customizationpropdefs.propdefs and proplocs.proplocsItem, component and file properties are stored in two customization files:COLS="2"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="300p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Customization fileCOLNAME="2" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"propdefs.propdefsCOLNAME="2" VALIGN="TOP" MOREROWS="0"property definitionCOLNAME="1" VALIGN="TOP" MOREROWS="0"proplocs.proplocsCOLNAME="2" VALIGN="TOP" MOREROWS="0"property locationThese files exist on Corporate level and can be extended on every lower repository level. As these files are read incrementally, you only have to include new definition and location lines in the module files.propdefs.propdefsInclude the following line:# Propname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Long Namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'GUI Classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| attributessingletonClass | Singleton Class | CheckButton | -state 0This line defines the property singletonClass as a check button which is turned off by default. The name of the property in the dialog box is Singleton Class (long name).proplocs.proplocsInclude the following lines:singletonClass | Item | cl | Analysis | cad | cad_classsingletonClass | Item | cl | SystemDesign | cad | cad_classsingletonClass | Item | cl | ObjectDesign | cad | cad_classsingletonClass | Item | cl | Analysis | cad | cad_containersingletonClass | Item | cl | SystemDesign | cad | cad_containersingletonClass | Item | cl | ObjectDesign | cad | cad_containerThese lines specify the property singletonClass as item property for classes and container classes in CDs for the phases Analysis, System Design and Object Design.If the module containing these customization files is active, the Edit Properties dialog box for classes will have an extra property Singleton Class.FILENAME="00528.unk" ORIGFILE="pics/sgltondb.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"ID="30393"m_import.tclThe name of the user-defined class in this example is Singleton Cust. This class is derived from the OOPL model class OPClass and contains only one method: generate. The class OPClass is promoted to the user-defined SingletonCust using self promotion.See REFID="36289" TYPE="XREF-TEXTCOPY"Class hierarchy for details on the OOPL model and self promotion.The required Object Tcl code, which is displayed below, is stored in the file m_import.tcl in the tcl directory of the module cpp-singleton.#--------------------------------------------------------------------------...##--------------------------------------------------------------------------## File : m_import.tcl# Description : Singleton classes example##--------------------------------------------------------------------------puts "*** cpp-singleton loaded ***"require "cgcustom.tcl"Class SingletonCust : [customizeOOPLModel OPClass SingletonCust] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generate}method SingletonCust::generate {this tgt} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'global SingletonCust::supername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set cl [ $tgt findDefinition [$this getName] ]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if { $cl != "" } {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set cl [$this ${SingletonCust::super}::generate $tgt]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $clname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set cl [$this ${SingletonCust::super}::generate $tgt]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$cl != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set singletonClass [$this getPropertyValue "singletonClass"]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# no is the defaultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$singletonClass == "1"} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set returnType [CppType new]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$returnType localType $clname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$returnType isPointer 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$returnType isStatic 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set instMethd [CppGenMethod new $cl "Public" $returnType]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$instMethd name "instance"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$instMethd isInline 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set body [CppGenCode new $instMethd]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$body append "if (obj==0) \{\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$body indent +name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$body append "obj=new [$cl getName]();\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$body indent -name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$body append "\}\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$body append "return obj;\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set attrType [CppType new]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$attrType localType $clname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$attrType isPointer 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$attrType isStatic 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set attr [CppAttribute new $cl "Private" $attrType]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$attr name "obj"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$attr defaultValue "0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[$cl featureSet] foreach f {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if [$f isA CppConstructor] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$f access "Private"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $cl}selfPromoter OPClass {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SingletonCust promote $this}If this module is active, a singleton class construction will be generated for all the classes that have the property Singleton Class turned on.ID="32178"Customizing Class LibrariesIntroductionClass libraries are used in ObjectTeam to implement associations between classes. As the integration of any class library with ObjectTeam is entirely written in Object Tcl, virtually any class library can be integrated.What does a class library integration doThe integration of a class library with ObjectTeam determines and generates the following:n the type of the association attribute n the parameters of the association accessor methodsn the implementation of the association accessor methodsWhat is generated is determined by two factors:n the type of the association (qualified or non-qualified)n the multiplicity at the other end (one, many)ID="35581"How is an integration implementedThe functionality to generate associations in C++ is implemented by Tcl classes and their methods. Class library integration moduleClass library integrations, the ones supplied by Cayenne, as well as user-defined ones, are stored in ObjectTeam modules. A user can activate a class library integration by activating the corresponding module.Overview of TasksThe following tasks must be carried out when a user-defined class library is created:COLS="2"COLNAME="1" COLWIDTH="228p"COLNAME="2" COLWIDTH="220p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="2" VALIGN="TOP" MOREROWS="0"Module file involvedCOLNAME="1" VALIGN="TOP" MOREROWS="0"n REFID="31607" TYPE="XREF-TEXTCOPY"Identifying the ModuleCOLNAME="2" VALIGN="TOP" MOREROWS="0"moduleName\properties.propertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"n REFID="15736" TYPE="XREF-TEXTCOPY"Creating User-defined Tcl ClassesCOLNAME="2" VALIGN="TOP" MOREROWS="0"moduleName\tcl\classlib.tcl COLNAME="1" VALIGN="TOP" MOREROWS="0"n REFID="26835" TYPE="XREF-TEXTCOPY"Mapping User-defined Classes to Association ImplementationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"moduleName\tcl\cppclprop.tclThe following tasks are optional:COLS="2"COLNAME="1" COLWIDTH="256p"COLNAME="2" COLWIDTH="192p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="2" VALIGN="TOP" MOREROWS="0"Module file involvedCOLNAME="1" VALIGN="TOP" MOREROWS="0"n REFID="24738" TYPE="XREF-TEXTCOPY"Makefile Template CustomizationCOLNAME="2" VALIGN="TOP" MOREROWS="0"moduleName\tcl\mkmkinc.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"n REFID="24770" TYPE="XREF-TEXTCOPY"Automating Class Library Source Files CopyingCOLNAME="2" VALIGN="TOP" MOREROWS="0"moduleName\tcl\subconfig.tclNote: The Cayenne class library is used in this section to illustrate the mechanics involved in carrying out these tasks.ID="31607"Identifying the ModuleIntroductionEvery module directory in ObjectTeam contains a properties file. It contains information to identify the module, such as its (long) name, its type, and so on.Cayenne class libraryIn the Cayenne class library module (cpp-libcayn), this file looks as follows:...#--------------------------------------# Property Namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Property Value#--------------------------------------namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| cpp-libcaynversionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| 1.0longNamename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Cayenne class library integrationtypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| CppClasslibisSupportingModulename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| yesID="15736"Creating User-defined Tcl ClassesBase classesThe user-defined Tcl classes you define to implement the integration must all be (indirectly) derived from one of the following class library independent Tcl base classes:COLS="4"COLNAME="1" COLWIDTH="99p"COLNAME="2" COLWIDTH="157p"COLNAME="3" COLWIDTH="90p"COLNAME="4" COLWIDTH="103p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl classCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data StructureCOLNAME="3" VALIGN="TOP" MOREROWS="0"AssociationTypeCOLNAME="4" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"CppPtrDefCOLNAME="2" COLSEP="0" VALIGN="TOP" MOREROWS="0"pointerCOLNAME="3" COLSEP="0" VALIGN="TOP" MOREROWS="0"non-qualifiedCOLNAME="4" COLSEP="0" VALIGN="TOP" MOREROWS="0"one, mandatoryCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"CppSetDefCOLNAME="2" COLSEP="0" VALIGN="TOP" MOREROWS="0"pointer setCOLNAME="3" COLSEP="0" VALIGN="TOP" MOREROWS="0"non-qualifiedCOLNAME="4" COLSEP="0" VALIGN="TOP" MOREROWS="0"manyCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"CppDictDefCOLNAME="2" COLSEP="0" VALIGN="TOP" MOREROWS="0"dictionary of pointersCOLNAME="3" COLSEP="0" VALIGN="TOP" MOREROWS="0"qualifiedCOLNAME="4" COLSEP="0" VALIGN="TOP" MOREROWS="0"one, mandatoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"CppSetDictDefCOLNAME="2" VALIGN="TOP" MOREROWS="0"dictionary of pointer setsCOLNAME="3" VALIGN="TOP" MOREROWS="0"qualifiedCOLNAME="4" VALIGN="TOP" MOREROWS="0"manyFor more informationSee REFID="21274" TYPE="XREF-TEXTCOPY"Base Classes for an overview of these classes and a description of their methods. User-defined classesAt least four user-defined classes must be created, one for every combination of association type - multiplicity. The methods of the base classes must be redefined, where necessary, in the user-defined classes.Module fileUser-defined Tcl classes and their methods must be defined and implemented in the following module file:moduleDirectory\tcl\classlib.tclCayenne class libraryIn the Cayenne class library module, for example, the following Tcl classes are defined and implemented:n CaynPtrDefn CaynSetDefn CaynDictDefn CaynSetDictDefn CaynOSetDefn CaynOSetDictDefThe hierarchy of these classes is displayed in this picture:FILENAME="00529.unk" ORIGFILE="pics/caynclib.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"ID="26835"Mapping User-defined Classes to Association ImplementationsIntroductionAfter you have defined and implemented the user-defined Tcl classes and their methods, you have to specify which Tcl class must be used to implement which type of association. Module fileThe mapping of association types to user-defined Tcl classes is stored in the following module file:moduleDirectory\tcl\cppclprop.tclThis file contains some standard Tcl variable settings and a three column mapping table:cppclprop.tcl (module file):...global cplusplusClassLibglobal cplusplusClassLibDefaultset cplusplusClassLib(classLibraryName) {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1stColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2ndColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3rdColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1stColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2ndColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3rdColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1stColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2ndColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3rdColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1stColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2ndColumnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3rdColumn...}set cplusplusClassLibDefaultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classLibraryNameThe 3 columns in this file are explained below.First columnThis column indicates the type of the generated association:COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Association Implementation TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="1" VALIGN="TOP" MOREROWS="0"PtrCOLNAME="2" VALIGN="TOP" MOREROWS="0"non-qualifiedCOLNAME="3" VALIGN="TOP" MOREROWS="0"one (or optional)COLNAME="1" VALIGN="TOP" MOREROWS="0"SetCOLNAME="2" VALIGN="TOP" MOREROWS="0"non-qualifiedCOLNAME="3" VALIGN="TOP" MOREROWS="0"manyCOLNAME="1" VALIGN="TOP" MOREROWS="0"DictCOLNAME="2" VALIGN="TOP" MOREROWS="0"qualifiedCOLNAME="3" VALIGN="TOP" MOREROWS="0"one (or optional)COLNAME="1" VALIGN="TOP" MOREROWS="0"SetDictCOLNAME="2" VALIGN="TOP" MOREROWS="0"qualifiedCOLNAME="3" VALIGN="TOP" MOREROWS="0"manyBear in mind that the association implementation type does not always coincide with the generated association attribute type; the exact type is determined by the method getTypeAttr of the user-defined Tcl class mentioned in the third column.Second columnThis column indicates the implementation strategy. For every association implementation type, at least a default strategy must be defined. If you want to give the user of the integration the choice between different implementation strategies for a particular association implementation type, you have to add a new line with the same association implementation type in the first column, an implementation strategy indication other than default in the second column, and the appropriate user-defined Tcl class in the third.The user can select an implementation strategy other than default through the association property Implementation Strategy.Third columnThis column indicates the user-defined Tcl class that must be used to implement the corresponding association.Cayenne class libraryThis is the cppclprop.tcl file for the Cayenne class library. Note: Multiple implementation strategies have been specified (default, hash) here, but all use the same user-defined Tcl class as the default. ...global cplusplusClassLibglobal cplusplusClassLibDefaultset cplusplusClassLib(libcayn) {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Ptrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'defaultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynPtrDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Ptrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'hashname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynPtrDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'default name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynSetDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'hashname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynSetDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'OSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'default name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynOSetDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'OSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'hashname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynOSetDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dictname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'defaultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynDictDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dictname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'hashname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynDictDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SetDictname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'defaultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynSetDictDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SetDictname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'hashname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynSetDictDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'OSetDictname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'defaultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynOSetDictDefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'OSetDictname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'hashname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CaynOSetDictDef}set cplusplusClassLibDefaultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'libcaynNote: The (optional) implementation types OSet and OSetDict refer to ordered associations and ordered qualified associations respectively.The user now has the choice between the implementation strategies default and hash for every association implementation type.FILENAME="00530.unk" ORIGFILE="pics/cllibpry.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"ID="24738"Makefile Template CustomizationIntroductionThe Tcl code for generating class library independent makefile templates is stored in the following file:M4_home\tcl\makemake.tclModule fileTcl code to add any class library dependent information to generated makefile templates can be stored in the following file:moduleDirectory\tcl\mkmkinc.tclProcedureThe file mkmkinc.tcl contains a single Tcl procedure:...proc classLibraryNameMakefileTemplate {suffixSect libSect inclSect defineSect ruleSect dependSect} { ...}lappend classLibProcs classLibraryNameMakefileTemplateParametersThe parameters taken by the procedure classLibraryNameMakefileTemplate all refer to the following specific text sections generated by the makemake.tcl file:COLS="3"COLNAME="1" COLWIDTH="87p"COLNAME="2" COLWIDTH="232p"COLNAME="3" COLWIDTH="127p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="2" VALIGN="TOP" MOREROWS="0"Text SectionCOLNAME="3" VALIGN="TOP" MOREROWS="0"DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"suffixSectCOLNAME="2" VALIGN="TOP" MOREROWS="0"the .SUFFIXES: line in the makefileCOLNAME="3" VALIGN="TOP" MOREROWS="0"do not append a newline characterCOLNAME="1" VALIGN="TOP" MOREROWS="0"libSectCOLNAME="2" VALIGN="TOP" MOREROWS="0"the LIBS= line in the makefile COLNAME="3" VALIGN="TOP" MOREROWS="0"do not append a newline characterCOLNAME="1" VALIGN="TOP" MOREROWS="0"inclSectCOLNAME="2" VALIGN="TOP" MOREROWS="0"the INCS= line in the makefileCOLNAME="3" VALIGN="TOP" MOREROWS="0"do not append a newline characterCOLNAME="1" VALIGN="TOP" MOREROWS="0"defineSectCOLNAME="2" VALIGN="TOP" MOREROWS="0"any specific makefile defineCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"ruleSectCOLNAME="2" VALIGN="TOP" MOREROWS="0"special rules for building the applicationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"dependSectCOLNAME="2" VALIGN="TOP" MOREROWS="0"dependency section at the bottom of the makefileCOLNAME="3" VALIGN="TOP" MOREROWS="0"To append class library dependent information to one of these lines, include the appropriate Tcl code in the body of the procedure classLibraryNameMakeFileTemplate. To add the word whatever to the INCS= line, for example:$inclSect append "whatever"Cayenne class libraryIn the Cayenne class library module, for example, the following extra makefile template information is added:...proc libcaynMakefileTemplate {suffixSect libSect inclSect defineSect ruleSect dependSect} { if [isCommand getIncludePrefix] { $inclSect append " [getIncludePrefix]" $inclSect append "~\[location .. .. include\]" } if [isCommand getLibraryPrefix] { $libSect append " [getLibraryPrefix]" $libSect append "~\[location .. .. lib libwmt4omt.\$LIB_EXT\]" }}lappend classLibProcs libcaynMakefileTemplateID="24770"Automating Class Library Source Files CopyingClass Library Source FilesWhen a user of ObjectTeam selects Utilities | Configure C++ environment and the user's active class library is the Cayenne class library, the source files and the header files of the Cayenne class library are copied over from the include and src directories in the cpp-libcayn module to the user environment.The user is then supposed to compile the source files into a class library whose classes are linked in when the application is compiled.Module fileTcl code to copy class library source and header files to the user environment can be stored in the following file:M4_home\tcl\subconfig.tclFor more informationRefer to the file subconfig.tcl in the Cayenne class library integration module cpp-libcayn for an example.ID="21274"Base ClassesOverviewThe user-defined Tcl classes you have to create to integrate a class library with ObjectTeam need to be derived from one of the following class library independent Tcl classes:n REFID="27061" TYPE="XREF-TEXTCOPY"CppPtrDefn REFID="25930" TYPE="XREF-TEXTCOPY"CppSetDefn REFID="37532" TYPE="XREF-TEXTCOPY"CppDictDefn REFID="24607" TYPE="XREF-TEXTCOPY"CppSetDictDefTheir methods are further discussed in the following sections.ID="27061"CppPtrDefBase classCppClassDefMethodsgetIncludeList( ): ListOfStringsReturns a list containing the file names that should be included when this type of association is used.getTypeAttr( ): CppTypeReturns the type of the attribute storing the data for this association.genIsEmpty( attrName: String ): StringReturns the C++ code (which can be used inside an if) for checking if the associations is connected.genIsNotEmpty( attrName: String ): StringReturns the C++ code for checking for an empty association.genGet( attrName: String ): StringReturns the code for getting the current value of the association.genSet( attrName: String, value: String ): StringReturns the code for setting the value into the attribute representing the association.genCtor( ): StringReturns code to initialize the association in the default constructor.genDtor( ): StringReturns code to free the association in the destructor.ID="25930"CppSetDefBase classCppClassDefMethodsgetIncludeList( ): ListOfStringsReturns a list containing the file names that should be included when this type of association is used.getTypeAttr( ): CppTypeReturns the type of the attribute storing the data for this association.getTypeGet( ): CppTypeReturns the return type of the get method.genIsEmpty( attrName: String ): StringReturns the C++ code (which can be used inside an if) for checking if the associations is connected.genIsNotEmpty( attrName: String ): StringReturns the C++ code for checking for an empty association.genGet( attrName: String ): StringReturns the code for getting the list.genAdd( attrName: String, value: String ): StringReturns the code for adding value to the association with the specified name.genRemove( attrName: String, value: String ): StringRemove the value from the association list.genIterator( sect: TextSection, loopExpr: String )Iterate over all the values in the association set and execute the loop expression on each value. The $loopVar is replaced by the actual value. The code for the iterator should be added to the TextSection.genCtor( ): StringReturns code to initialize the association in the default constructor.genDtor( ): StringReturns code to free the association in the destructor.ID="37532"CppDictDefBase classCppClassDefMethodsgetIncludeList( ): ListOfStringsReturns a list containing the filenames that should be included when this type of association is used.getTypeAttr( ): CppTypeReturns the type of the attribute storing the data for this association.getTypeGet( ): CppTypeReturns the return type of the get method.genIsEmpty( attrName: String ): StringReturns the C++ code (which can be used inside an if) for checking if the associations is connected.genIsNotEmpty( attrName: String ): StringReturns the C++ code for checking for an empty association.genGet( attrName: String, keyName: String ): StringReturn the code for getting a value (associated with the specified key).genAdd( attrName: String, keyName: String, value: String ): StringReturn the code for adding a key&value to the association with the specified name.genRemove( attrName: String, keyName: String ): StringRemove the value with the specified key from the association dictionary.genIterator( sect: TextSection, loopExpr: String )Iterate over all the values in the association dictionary and execute the loop expression on each value. The $loopVar is replaced by the actual value. The code for the iterator should be added to the TextSection.genCtor( ): StringReturns code to initialize the association in the default constructor.genDtor( ): StringReturns code to free the association in the destructor.ID="24607"CppSetDictDefBase classCppClassDefMethodsgetIncludeList( ): ListOfStringsReturns a list containing the file names that must be included when this type of association is used.getTypeAttr( ): CppTypeReturns the type of the attribute storing the data for this association.getTypeGet( ): CppTypeReturns the return type of the get method.genIsEmpty( attrName: String ): StringReturns the C++ code (which can be used inside an if statement) for checking if the association is connected.genIsNotEmpty( attrName: String ): StringReturns the C++ code for checking for an empty association.genGet( attrName: String, keyName: String ): StringReturn the code for getting the list.genAdd( attrName: String, keyName: String, value: String ): StringReturn the code for adding a key&value to the association with the specified name.genRemove( attrName: String, keyName: String, value: String ): StringRemove the value with the specified key&value from the association dictionary.genIterator( sect: TextSection, loopExpr: String )Iterate over all the values in the association dictionary and execute the loop expression on each value. The $loopVar is replaced by the actual value. The code for the iterator should be added to the TextSection.genCtor( ): StringReturns code to initialize the association in the default constructor.genDtor( ): StringReturns code to free the association in the destructor.ID="28522"Customizing TypesStandard data typesIn the Object Design phase you can use standard types to define data types of data attributes and parameters. All the valid standard types are stored in the following file:M4_home\modules\cplusplus\etc\TERM1="stand_types"stand_types.stand_typesThis file also contains minimum and maximum values for the standard types.Whenever you generate code or check a diagram's contents, the data types used in the diagram are checked against the data types in the standard types file.During code generation, the standard types are mapped to C++ types (see REFID="37444" TYPE="XREF-TEXTCOPY"C++ Types)What does the stand_types file look like?Here is an example of a stand_types.stand_types file. The columns Min 1, Max 1 and Min 2 and Max 2 can be used to specify constraints on array size or format values of the standard types....#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'StandardTypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Minname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Maxname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Minname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Maxname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2#---------------------------------------------------------------charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32767name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32767name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0varcharname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|254name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32decimalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32double_precisionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|13name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|13name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0unsignedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0longname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_longname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0numericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32realname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0smallintname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0genptrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0notypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0flagname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0flag_tname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0object_idname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Customizing the stand_types.stand_types fileThe default stand_types.stand_types file is stored in the etc directory of the cplusplus module. You can add new standard types or override existing ones by creating your own stand_types.stand_types file. All customization files of this type are read incrementally, which means that you only have to include the standard types that you want to add to the current set of standard types and the ones you want to override. Note: The current set of standard types on a certain level is the result of incrementally read stand_types.stand_types files from higher levels.Where to store thestand_types.stand_types fileYou can store your stand_types.stand_types file in the following locations:n Repository: open the pseudo object <customization files> at the Browser level of your choice and store the file here.n Module: store it in the etc directory of a user-defined module. Storing it in a module is the preferred way.See ObjectTeam Customization Guide for details on user-defined modules.TERM1="C++ types"ID="37444"C++ TypesMapping standard types to C++ typesC++ types are data types that are supported by the C++ compiler you are using. The standard types are mapped to these C++ types..The mapping is taken care of by the following customization file:M4_home\modules\cplusplus\etc\lang_types.lang_typesWhat does the lang_types file look like?Here is an example of a lang_types.lang_types file for the Sun C++ compiler.The first column in this file lists the standard types. These must be consistent with the types in the lang_types.lang_types file. The second column lists the C types the standard types must be mapped upon. In the column range the type of brackets used in the target language is indicated....#----------------------------------------------------------------------#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'StandardTypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Minname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Maxname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Minname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Maxname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2#----------------------------------------------------------------------charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32767name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32767name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32decimalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32double_precisionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|13name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|13name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0unsignedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0longname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_longname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0numericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32realname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0smallintname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0varcharname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|254name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0genptrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0notypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0flagname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0flag_tname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0object_idname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0Customizing the lang_types.lang_types fileYou can create user-defined lang_types.lang_types files if you want to add a language type to the current set or change an existing one.The way to do that is analogous to creating a customization file for the stand_types.stand_types file (see REFID="28522" TYPE="XREF-TEXTCOPY"Customizing Types).ID="30129"Customizing the Extension of Generated FilesDefault file extensionsBy default, the extension for generated source files is as follows:COLS="3"COLNAME="1" COLWIDTH="85p"COLNAME="2" COLWIDTH="178p"COLNAME="3" COLWIDTH="183p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PlatformCOLNAME="2" VALIGN="TOP" MOREROWS="0"Source file extensionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Header file extensionCOLNAME="1" VALIGN="TOP" MOREROWS="0"WindowsCOLNAME="2" VALIGN="TOP" MOREROWS="0".cppCOLNAME="3" VALIGN="TOP" MOREROWS="0".hCOLNAME="1" VALIGN="TOP" MOREROWS="0"UNIXCOLNAME="2" VALIGN="TOP" MOREROWS="0".cxxCOLNAME="3" VALIGN="TOP" MOREROWS="0".hxxYou can change the default extension into something else, like .c or .C using the customization file objtype.objtype.Customization file in repository or moduleTo change the default extension, you have to create an ObjectTeam customization file in which the default settings are redefined. You can create this customization file on different repository levels, or you can create an ObjectTeam module and store it in the etc directory of that module. The advantage of storing the file in the repository is that you can use a user-friendly Customization Editor to edit the file, whereas storing the file in a module offers you better control over whether and where the customized file must be used.Customizing the objtype.objtype fileThe default objtype.objtype file is stored in the etc directory of the module that handles the integration of your C++ compiler with ObjectTeam (cpp-cc-sun, cpp-bc-45, and so on).You can redefine default file extensions by creating your own objtype.objtype file. All customization files of this type are read incrementally, which means that you only have to include the standard types that you want to add to the current set of standard types and the ones you want to override. Note: The current set of standard types on a certain level is the result of incrementally read objtypes.objtypes files from higher levels.Where to store the stand_types.stand_types fileYou can store your objtypes.objtypes file in the following locations:n Repository: open the pseudo object <customization files> at the Browser level of your choice and store the file here.n Module: store it in the etc directory of a user-defined module. Storing it in a module is the preferred way.See ObjectTeam Customization Guidefor details on user-defined modules.How to change the default extensionIn the steps mentioned below it is assumed that the customization file used to change the default extension is stored in the repository.Σ To change the extension of generated source files:1 Create a customization file objtype.objtype You do this by opening the pseudo object <customization files> on an appropriate Browser level, select File | New and select objtype.objtype from the dialog box.2 Double-click on the new customization file in the information area of the Browser.The Object Type Customization Editor starts up.3 To change the extension for C++ files, for example, select the row containing the Repository Type External File Version and the Browser Type c++ 4 Select Edit | RedefineA dialog box appears.5 Click on the Interface tab in this dialog boxFILENAME="00531.unk" ORIGFILE="pics/objextfv.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cppcust.fm5.mif"6 Change the value cxx in the field File system extension into the preferred extension and click OK.7 Select File | Save in the Object Type Customization Editor.8 To make sure the new customization file is read by ObjectTeam, go to Corporate Level in the Browser and go back to Implementation System level.9 To test if your customization takes effect, select File | New | External File Version.10 Select c++ from the dialog box and click the Edit button11 The text editor that is now started up should show the file name with the new extension.Newly generated files will have the new extension in your user environment. However, the column Type in the information area of the Browser on Implementation System level still reads c++.Tip: Delete files that were generated before you created the customization file. When you generate them again, they will have the new file extension.ID="32725"Customizing the Location of Generated FilesDefault file extensionsGenerated source files and header files are stored in the user environment. By default, both file types are stored in the same directory. You can customize the code generator in such a way that header files are stored in one directory, and source file in another. How to customize the location of generated filesΣ To customize the default location of generated files:1 Create a user-defined moduleSee ObjectTeam Customization Guide for details on how to create a module.2 Create a properties.properties file in the module directory3 Copy the following file over to the tcl directory of this module:M4_home\tcl\fstorage.tcl4 Edit the Tcl procedure fstorage::getFilePath in the fstorage.tcl fileThis procedure takes care of storing generated files.5 Activate the module in ObjectTeam.6 Generate new code. Newly generated files will be stored in the new location.Tip: Delete files that were generated before you created the customization file. When you regenerate them, they will be stored in the new location.ID="40004"Customizing Standard HeadersDefault file headersBy default, the following headers are generated for C++ source and header files://// File : fileName//// Project : projectName// Configuration : configurationName configurationVersion// Phase : phaseName phaseVersion// System : systemName systemVersion//The default header for generated makefiles are similar:#### File : fileName#### Project : projectName## Configuration : configurationName configurationVersion## Phase : phaseName phaseVersion## System : systemName systemVersion##Template filesThe generated headers are the result of expanded template files. For every type of generated file such a template file exists:M4_home\modules\cplusplus\etc\c++.hdrM4_home\modules\cplusplus\etc\h++.hdrM4_home\modules\cplusplus\etc\makefile.hdrTcl variablesThe following global Tcl variables are used in the template files to generate file names, project names, configuration names, and so on:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Expands toCOLNAME="1" VALIGN="TOP" MOREROWS="0"$filenameCOLNAME="2" VALIGN="TOP" MOREROWS="0"File NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$projNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Project NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$configNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Configuration NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$configVCOLNAME="2" VALIGN="TOP" MOREROWS="0"Configuration VersionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$phaseNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Phase NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$phaseVCOLNAME="2" VALIGN="TOP" MOREROWS="0"Phase VersionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$systemNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"System NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$systemVCOLNAME="2" VALIGN="TOP" MOREROWS="0"System VersionNote: The built-in Tcl command expand_file is used for expanding files containing Tcl variables. See ObjectTeam Repository Interface Guide for details on this command.How to change the default headerΣ To change the extension of generated source files:1 Create a customization file c++.hdr, h++.hdr or makefile.hdr.You do this by opening the pseudo object <customization files> on an appropriate Browser level, select File | New and enter the name of the customization file in the dialog box.Warning: Do not create a .hdr user customization file. 2 Double-click on the new customization file in the information area of the Browser.The Text Editor starts up.You can copy the contents of the file you are customizing from the cplusplus\etc directory to the new customization file. You can use the same Tcl variables that are used in the original.hdr file.3 Edit the customization file and save it4 To make sure the new customization file is read by ObjectTeam, go to Corporate Level in the Browser and go back to Implementation System level.5 To test if your customization takes effect, generate code for a class for which no code was generated yet and edit the header file, source file or makefile.Note: Only newly generated files will have the new header. Files that were generated before you created the customization file will not change, unless you regenerate them.Appendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++C++ code generation propertiesThe following table lists all the properties that effect C++ code generation. They are available in the CD in the Object Design phase.COLS="4"COLNAME="1" COLWIDTH="157p"COLNAME="2" COLWIDTH="135p"COLNAME="3" COLWIDTH="120p"COLNAME="4" COLWIDTH="214p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34414" TYPE="XREF-TEXTCOPY"Specifying Association Accessor Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="29557" TYPE="XREF-TEXTCOPY"Specifying Attribute Accessor Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class LibraryCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association EndCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31321" TYPE="XREF-TEXTCOPY"Specifying a Class LibraryCOLNAME="1" VALIGN="TOP" MOREROWS="0"Constant FunctionCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31580" TYPE="XREF-TEXTCOPY"Specifying Constant FunctionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="27543" TYPE="XREF-TEXTCOPY"Data type of the qualifierCOLNAME="1" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="15392" TYPE="XREF-TEXTCOPY"Specifying a Parameter's Default ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"Dynamic DestructorCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39716" TYPE="XREF-TEXTCOPY"Specifying a Virtual DestructorCOLNAME="1" VALIGN="TOP" MOREROWS="0"Dynamically BoundCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="18829" TYPE="XREF-TEXTCOPY"Specifying Static MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"External Class SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="20009" TYPE="XREF-TEXTCOPY"Specifying an External SourceCOLNAME="1" VALIGN="TOP" MOREROWS="0"External Include ListCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39660" TYPE="XREF-TEXTCOPY"Specifying External Header FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="14417" TYPE="XREF-TEXTCOPY"Specifying Free Text for a ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="12435" TYPE="XREF-TEXTCOPY"Specifying Attribute Free TextCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="38516" TYPE="XREF-TEXTCOPY"Specifying Method Free TextCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"--COLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"--COLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="25709" TYPE="XREF-TEXTCOPY"Specifying Free Text for an Association AttributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"--COLNAME="1" VALIGN="TOP" MOREROWS="0"Implementation StrategyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Association EndCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19988" TYPE="XREF-TEXTCOPY"Specifying an Implementation StrategyCOLNAME="1" VALIGN="TOP" MOREROWS="0"Inheritance AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateProtectedCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34256" TYPE="XREF-TEXTCOPY"Specifying Inheritance AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Inline MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="30308" TYPE="XREF-TEXTCOPY"Specifying Inline MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateProtectedCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="22538" TYPE="XREF-TEXTCOPY"Specifying Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"NullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DefaultYesNoCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35790" TYPE="XREF-TEXTCOPY"Specifying Mandatory Attributes COLNAME="1" VALIGN="TOP" MOREROWS="0"NullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DefaultYesNoCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35790" TYPE="XREF-TEXTCOPY"Specifying Mandatory Attributes COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"DefaultReferenceReference to ConstPointerPointer to ConstValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34259" TYPE="XREF-TEXTCOPY"Editing method propertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"DefaultReferenceReference to ConstPointerPointer to ConstValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="40884" TYPE="XREF-TEXTCOPY"Modifying Parameter TypesAppendix B TYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++ID="11059"Example ApplicationIntroductionThis section contains an example of a Class Diagram and user-defined code with which a simple C++ application can be created. The application administrates songs on an audio medium (a compact disc, for example).What does the example application do?The example application does the following:n It adds a number of songs to the current set of songs.n It prints the name, the author, the performer and the play time of every song that has been added.n It prints the title and the total play time of the audio medium. The total play time is calculated by the application.The example main file in this section calls the appropriate functions from the code that was generated by ObjectTeam and later completed with user-defined code.The Object Design PhaseIntroductionIn the Object Design Phase, the model of the application is further refined. The Class Diagram is completed and (C++ dependent) properties are set, where desired.Class DiagramThe following Class Diagram is the model for the example application:FILENAME="00532.unk" ORIGFILE="pics/exCAD.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/exappl.fm5.mif"PropertiesFor most of the classes, attributes, methods, parameters and associations in the model, the default property values are used. The following property values in the class Time, however, are explicitly set to a non-default value:COLS="4"COLNAME="1" COLWIDTH="100p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="102p"COLNAME="4" COLWIDTH="126p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Time COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="4" VALIGN="TOP" MOREROWS="0"Set To:COLNAME="1" VALIGN="TOP" MOREROWS="0"createCOLNAME="2" VALIGN="TOP" MOREROWS="0"Method NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0" hourCOLNAME="2" VALIGN="TOP" MOREROWS="0"Parameter NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"0COLNAME="1" VALIGN="TOP" MOREROWS="0" minCOLNAME="2" VALIGN="TOP" MOREROWS="0"Parameter NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"0COLNAME="1" VALIGN="TOP" MOREROWS="0" secCOLNAME="2" VALIGN="TOP" MOREROWS="0"Parameter NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"0COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"operatorMINCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Method NameCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Inline FunctionCOLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"TrueCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"TimeCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Method TypeCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0" rightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Parameter NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"Reference To ConstCOLNAME="1" VALIGN="TOP" MOREROWS="0" TimeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Parameter TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"operatorPLUSCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Method NameCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Inline FunctionCOLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"TrueCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"TimeCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Method TypeCOLNAME="3" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="4" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0" rightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Parameter NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"Reference To ConstCOLNAME="1" VALIGN="TOP" MOREROWS="0" TimeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Parameter TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"The Implementation PhaseIntroductionIn the Implementation Phase, C++ code is generated from the model as defined in the Object Design phase. This code needs to be completed with implementations of user-defined methods before it can be compiled. This section provides example code for these method bodies.Implemented FunctionsThe table below lists all the methods of all the classes in the example application. Some methods are implemented automatically by the code generator, others are implemented through user-defined code. Some methods are not implemented at all.COLS="3"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="222p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generated / User-definedCOLNAME="1" VALIGN="TOP" MOREROWS="0"TimeCOLNAME="2" VALIGN="TOP" MOREROWS="0"constructorCOLNAME="3" VALIGN="TOP" MOREROWS="0"user-definedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"destructorCOLNAME="3" VALIGN="TOP" MOREROWS="0"generatedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorMINCOLNAME="3" VALIGN="TOP" MOREROWS="0"user-definedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"operatorPLUSCOLNAME="3" VALIGN="TOP" MOREROWS="0"user-definedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"printCOLNAME="3" VALIGN="TOP" MOREROWS="0"user-definedCOLNAME="1" VALIGN="TOP" MOREROWS="0"AudioMediaCOLNAME="2" VALIGN="TOP" MOREROWS="0"constructorCOLNAME="3" VALIGN="TOP" MOREROWS="0"generatedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"destructorCOLNAME="3" VALIGN="TOP" MOREROWS="0"generatedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"playCOLNAME="3" VALIGN="TOP" MOREROWS="0"not implementedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"stopCOLNAME="3" VALIGN="TOP" MOREROWS="0"not implementedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"printCOLNAME="3" VALIGN="TOP" MOREROWS="0"user-definedCOLNAME="1" VALIGN="TOP" MOREROWS="0"SongCOLNAME="2" VALIGN="TOP" MOREROWS="0"constructorCOLNAME="3" VALIGN="TOP" MOREROWS="0"generatedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"destructorCOLNAME="3" VALIGN="TOP" MOREROWS="0"generatedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"printCOLNAME="3" VALIGN="TOP" MOREROWS="0"user-definedCOLNAME="1" VALIGN="TOP" MOREROWS="0"PersonCOLNAME="2" VALIGN="TOP" MOREROWS="0"constructorCOLNAME="3" VALIGN="TOP" MOREROWS="0"generatedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"destructorCOLNAME="3" VALIGN="TOP" MOREROWS="0"generatedCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"printCOLNAME="3" VALIGN="TOP" MOREROWS="0"user-definedThe Class TimeIntroductionAll the methods defined for the class Time are implemented in this example. The inline functions operator- and operator+ in the header file, the other methods, including the user-defined constructor, in the source file.Note: The user-defined code that was added later to the generated files is printed in bold.Time.hxxUnlike other functions, the implementations of inline functions are stored in the header file. The methods operator- and operator+ were specified as inline functions.operator- subtracts one time unit from the other, whereas operator+ adds up two time units....// File : Time.hxx...class Time {public: ... Time operator-(const Time& right); Time operator+(const Time& right);...inline Time Time::operator-(const Time& right){ long tl,tr,ta; int h,m,s; tl = ((long)hour*3600L)+((long)min*60L)+(long)sec; tr = ((long)right.hour*3600L)+((long)right.min*60L)+(long)right.sec; ta = tl - tr; h = ta/3600; m = (ta%3600)/60; s = ta%60; return Time(h,m,s);}inline Time Time::operator+(const Time& right){ long tl,tr,ta; int h,m,s; tl = ((long)hour*3600L)+((long)min*60L)+(long)sec; tr = ((long)right.hour*3600L)+((long)right.min*60L)+(long)right.sec; ta = tl + tr; h = ta/3600; m = (ta%3600)/60; s = ta%60; return Time(h,m,s);}...Time.cxxThe user-defined constructor and the method print are implemented in the source file. Additionally, the standard header file iostream.h is added to the user-defined include file section, in order to be able to use the cout function.print prints the number of hours, minutes and seconds of a song, separated by colons....// File : Time.cxx...// Start user added include file section#include <iostream.h>// End user added include file section...Time::Time(int hour, int min, int sec){ this->hour=hour; this->min=min; this->sec=sec;}void Time::print(){ cout << hour << ":" << min << ":" << sec;}ID="33295"The Class AudioMediaIntroductionIn the source file generated for the class AudioMedia only the method print is implemented. No code needs to be added to the generated header file.Note: The user-defined code that was added later to the generated files is printed in bold.AudioMedia.cxxBesides the implementation of the method print, the standard header file iostream.h is added to the user-defined include file section, in order to be able to use cout in the print function....// File : AudioMedia.cxx...// Start user added include file section#include <iostream.h>// End user added include file section...void AudioMedia::print(){ Song *song; for (song=containsSet.first(); song!=0; song=containsSet.next()) { totalPlayTime = totalPlayTime + song->getPlayTime(); } cout << "Title: " << title << endl; cout << "Total play time: "; totalPlayTime.print(); cout << endl; for (song=containsSet.first(); song!=0; song=containsSet.next()) { song->print(); }}...The Class SongIntroductionIn the source file generated for the class Song the single method print is implemented. No code needs to be added to the generated header file.Note: The user-defined code that was added later to the generated files is printed in bold.Song.cxxBesides the implementation of the method print, the standard header file iostream.h is added to the user-defined include file section, in order to be able to use cout in the print function....// File : Song.cxx...// Start user added include file section#include <iostream.h>// End user added include file section...void Song::print(){ cout << "Title: " << title << endl; cout << "PlayTime: "; playTime.print(); cout << endl; cout << "Author:" << endl; Person *person; for (person=writtenBySet.first(); person!=0; person=writtenBySet.next()) { person->print(); } cout << "Performed by:" << endl; for (person=performerSet.first(); person!=0; person=performerSet.next()) { person->print(); }}...The Class PersonIntroductionIn the source file generated for the class Person the single method print is implemented. No code needs to be added to the generated header file.Note: The user-defined code that was added later to the generated files is printed in bold.Person.cxxBesides the implementation of the method print, the standard header file iostream.h is added to the user-defined include file section, in order to be able to use cout in the print function.print prints the name of a person....// File : Person.cxx...// Start user added include file section#include <iostream.h>// End user added include file section...void Person::print(){ cout << "Name: " << name << endl;}...The main FileIntroductionThe following main file is an illustration of how the generated (and completed) code from the example can be used in a simple C++ application.Note: This file is not generated by ObjectTeam. ID="22765"main.cxx#include "AudioMedia.hxx"#include "Person.hxx"#include "Song.hxx"#include "Time.hxx"AudioMedia audioMedia;int main(int argc, char *argv[]) { audioMedia.setTitle("Hello World"); Person performer1("performer1"); Person performer2("performer2"); Person author1("author1"); Person author2("author2"); Person author3("author3"); Song song1(audioMedia); song1.setTitle("Song 1"); song1.addPerformer(&performer1); song1.addPerformer(&performer2); song1.addWrittenBy(&author1); song1.addWrittenBy(&author3); song1.setPlayTime(Time(0,10,23)); Song song2(audioMedia); song2.setTitle("Song 2"); song2.addPerformer(&performer1); song2.addWrittenBy(&author2); song2.setPlayTime(Time(0,5,8)); Song song3(audioMedia); song3.setTitle("Song 3"); song3.addPerformer(&performer2); song3.addWrittenBy(&author1); song3.addWrittenBy(&author2); song3.setPlayTime(Time(0,15,40)); audioMedia.print();}Objects createdThe example main file creates objects of the following classes:COLS="2"COLNAME="1" COLWIDTH="123p"COLNAME="2" COLWIDTH="325p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"AudioMediaCOLNAME="2" VALIGN="TOP" MOREROWS="0"audiomediaCOLNAME="1" VALIGN="TOP" MOREROWS="0"PersonCOLNAME="2" VALIGN="TOP" MOREROWS="0"performer1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"performer2COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"author1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"author2COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"author3COLNAME="1" VALIGN="TOP" MOREROWS="0"SongCOLNAME="2" VALIGN="TOP" MOREROWS="0"song1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"song2COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"song3These objects are created by calling the constructors of the corresponding classes with the appropriate arguments. For example:AudioMedia audioMedia;Person performer1 ("performer1");Person author1 ("author1");Song song1 (audioMedia);Functions called on the AudioMedia objectThe following functions are called on the object audiomedia:COLS="2"COLNAME="1" COLWIDTH="217p"COLNAME="2" COLWIDTH="231p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FunctionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ExplanationCOLNAME="1" VALIGN="TOP" MOREROWS="0"setTitle ("Hello World");COLNAME="2" VALIGN="TOP" MOREROWS="0"Sets a value (an object of the external class String) for the attribute titleCOLNAME="1" VALIGN="TOP" MOREROWS="0"print();COLNAME="2" VALIGN="TOP" MOREROWS="0"Prints the object's title and its total playing time (see REFID="33295" TYPE="XREF-TEXTCOPY"The Class AudioMedia)Functions called on the Song objectsThe following functions are called on the objects song1, song2 and song3:COLS="2"COLNAME="1" COLWIDTH="301p"COLNAME="2" COLWIDTH="328p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FunctionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ExplanationCOLNAME="1" VALIGN="TOP" MOREROWS="0"setTitle ("songName");COLNAME="2" VALIGN="TOP" MOREROWS="0"Sets a value (an object of the external class String) for the attribute titleCOLNAME="1" VALIGN="TOP" MOREROWS="0"addPerformer (&performerName);COLNAME="2" VALIGN="TOP" MOREROWS="0"Adds a pointer to performerName (an object of the class Person) to the pointer set performerSetCOLNAME="1" VALIGN="TOP" MOREROWS="0"addWrittenBy (&authorName);COLNAME="2" VALIGN="TOP" MOREROWS="0"Adds a pointer to authorName (an object of the class Person) to the pointer set writtenBySetCOLNAME="1" VALIGN="TOP" MOREROWS="0"setPlayTime (Time (hour, min, sec));COLNAME="2" VALIGN="TOP" MOREROWS="0"Sets a value (an object of the class Time) for the attribute playTime.How to Compile And Run the Example ApplicationPrerequisitesΣ Before you compile the source code do the following:1 If you haven't created a main.cxx file yet, do so by selecting File | New | External File VersionThe New External File Version dialog box appears.2 Select c++ under Type, enter main under Name and click OKThe main file is created.Tip: An example file main.cxx can be found in REFID="22765" TYPE="XREF-TEXTCOPY"main.cxx3 If you haven't created an executable yet, do so by selecting File | New | External File Version.The New External File Version dialog box appears.4 Select executable under Type, enter a name for the application under Name and click OKThe new executable is created.5 Select Target | Generate makefile to (re)generate the makefile.How to compile the applicationΣ To compile the source code:n Select Target | CompileA Monitoring Window starts up, reporting the progress of the compilation process.How to run the applicationIf there were no problems detected during the compilation of the source code, you can run it by doing the following:1 Select the executable in the Information Area2 Select Target | Run to run the application.The application is started up in an Execution Window.FILENAME="00533.unk" ORIGFILE="pics/exappl.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/exappl.fm5.mif"Appendix C Compatibility ID="15646"With Previous ReleasesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++IntroductionThe current release of the C++ code generator is completely new. Due to customer requests, the new code generator now supports the use of multiple class libraries.IncompatibilitiesThe new release of the code generator does not support persistent code generation. In addition, customization files designed to work with the previous release of the C++ code generator cannot be used with the new release.Modules for backward-compatibilityIf you rely on ObjectTeam's persistent code generation or have a large investment in your C++ customization files, you might prefer to continue using Release 6.1.1 of the C++ code generator. To do so, activate an ObjectTeam module of type PersistentCpp. Modules of type PersistentCpp require other modules, which require other modules in turn. If possible, these required modules will be activated automatically after you select a module of type PersistentCpp. If there is more than one module of a required type available, you select the module of your choice from a dialog box.These are the modules required to run persistent C++ code generation:FILENAME="00534.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cgcompat.fm5.mif"The names in this picture refer to the following modules:COLS="3"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="237p"COLNAME="3" COLWIDTH="109p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Module nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Long NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-infCOLNAME="2" VALIGN="TOP" MOREROWS="0"C++ Informix Code generationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersistentCppCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-ingCOLNAME="2" VALIGN="TOP" MOREROWS="0" C++ Ingres Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersistentCppCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-mssCOLNAME="2" VALIGN="TOP" MOREROWS="0"C++ MS-SQL Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersistentCppCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-oraCOLNAME="2" VALIGN="TOP" MOREROWS="0"C++ Oracle Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersistentCppCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-sybCOLNAME="2" VALIGN="TOP" MOREROWS="0" C++ Sybase Code GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersistentCppCOLNAME="1" VALIGN="TOP" MOREROWS="0"persist-propsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent propertiesCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersistPropsCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cplusplusCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent C++ GenerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"CodeGenerationCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-aixCOLNAME="2" VALIGN="TOP" MOREROWS="0"IBM C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-decCOLNAME="2" VALIGN="TOP" MOREROWS="0"Digital C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-hpCOLNAME="2" VALIGN="TOP" MOREROWS="0"HP C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-cc-sunCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sun C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-bc-45COLNAME="2" VALIGN="TOP" MOREROWS="0"Borland C++ 4.5 compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"cpp-vc-40COLNAME="2" VALIGN="TOP" MOREROWS="0"Visual C++ compiler integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"DevelEnvCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-libwmtCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent Cayenne library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersCppClasslibCOLNAME="1" VALIGN="TOP" MOREROWS="0"pers-cpp-librwCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent Rogue Wave library integrationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PersCppClasslibNote: Make sure the ObjectTeam module C++ Code Generation of type CodeGeneration is deactivated when you activate a persistent code generator module.For more informationSee ObjectTeam Installation Guide for details on how to activate and deactivate a module.DocumentationThe current release of the ObjectTeam Code Generation Guide for C++ documents the new C++ code generator. For information about Release 6.1.1 of the code generator, refer to the following appendices:n REFID="37484" TYPE="XREF-TEXTCOPY"Generating Persistent Coden REFID="13285" TYPE="XREF-TEXTCOPY"Customizing Persistent C++ Code GenerationLicense filesThe license for the current release of the C++ code generation is valid regardless of which set of C++ code generator modules you choose to activate.Features exclusive to 6.1.1 users The following features are available in release 6.1.1. of ObjectTeam, but not in release 7.1.1:Tcl Method Implementation ProcedureSee REFID="30517" TYPE="XREF-TEXTCOPY"Tcl Method Implementation Procedure for details.Persistent Code GenerationSee REFID="37484" TYPE="XREF-TEXTCOPY"Generating Persistent Code for detailsTemplate simulation#define template simulation is supported.Features exclusive to 7.1.1 usersThe following features are new in release 7.1.1:Header file regenerationUnlike in 6.1.1, header files can be regenerated in 7.1.1.Inline methodsThe method property Inline Method can be used to specify a method inline. See REFID="30308" TYPE="XREF-TEXTCOPY"Specifying Inline Methods for details.Virtual DestructorsThe class property Dynamic Destructor can be used to specify in which situation a virtual destructor must be generated.See REFID="39716" TYPE="XREF-TEXTCOPY"Specifying a Virtual Destructor for details.Association ImplementationThe association property Class Library can be used to select an (active) class library for a particular role name in an association. Within a selected class library, you can select an implementation strategy through the association property Implementation Strategy.See See REFID="31321" TYPE="XREF-TEXTCOPY"Specifying a Class Library and REFID="19988" TYPE="XREF-TEXTCOPY"Specifying an Implementation Strategy for details.Strict association handlingAssociations are handled more strictly in that consistency of associations is kept.Object-oriented code generationThe code generator in release 7.1.1 has been rewritten completely. Code generation is now a completely object-oriented process. As a result, customizations written for release 6.1.1 cannot be reused in release 7.1.1.See REFID="36160" TYPE="XREF-TEXTCOPY"Customizing Code Generation.Non-Persistent Code Generation in Release 6.1.1IntroductionNon-persistent code generation in release 6.1.1of ObjectTeam is almost identical to non-persistent code generation in release 7.1.1. The property Tcl Method Implementation Procedure, however, is exclusive to users of release 6.1.1 (and lower).TERM1="Tcl method implementation procedure" TERM2="property"TERM1="property" TERM2="Tcl method implementation procedure"TERM1="operation" TERM2="Tcl method implementation procedure09"ID="30517"Tcl Method Implementation ProcedureUse the Tcl Method Implementation Procedure property to generate code for a method automatically.Σ To TERM1="generating" TERM2="code via TCL procedures"generate code for a method body automatically:1 TERM1="Tcl" TERM2="creating - procedures"Create a Tcl procedure.This procedure generates the source code for a particular method with a very general purpose such as a printOn function. Such a printOn function prints all the data members of a class to standard output. You can use this kind of function for any class. The contents of the function is the same for every class; only the class differs.Use the following syntax when creating the Tcl procedure:proc operation::name {oper class sect} { }COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="378p"COLNAME="1" VALIGN="TOP" MOREROWS="0"name COLNAME="2" VALIGN="TOP" MOREROWS="0"This name has to be specified as value for the property Tcl Method Implementation ProcedureCOLNAME="1" VALIGN="TOP" MOREROWS="0"oper COLNAME="2" VALIGN="TOP" MOREROWS="0"Operation handleCOLNAME="1" VALIGN="TOP" MOREROWS="0"class COLNAME="2" VALIGN="TOP" MOREROWS="0"class handleCOLNAME="1" VALIGN="TOP" MOREROWS="0"sect COLNAME="2" VALIGN="TOP" MOREROWS="0"section handle2 Store the Tcl procedure in a customization file3 Specify the value of the property Tcl Method Implementation Procedure as the name that you specified for the Tcl procedure (without operation::).Now the body of the method is automatically generated every time you generate code for the class. The ObjectTeam Shell calls this procedure and inserts the code generated by the procedure as the body of the method.Appendix D Generating ID="37484"Persistent CodeTERM1="persistent code generation"TYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++IntroductionTERM1="code generation" TERM2="persistent"A persistent class is a class whose instances persists beyond the lifetime of a single program execution. The public interface of the persistent class is similar to that of the non-persistent classes. The implementation, however, is completely different because of the storage of the data members in a relational database. Persistent code refers to SQL (Structured Query Language) and ESQLC++ (Embedded Structure Query Language C++). In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36652" TYPE="XREF-TEXTCOPY"How SQL is Generated Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20418" TYPE="XREF-TEXTCOPY"ESQLC++ Generation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23699" TYPE="XREF-TEXTCOPY"Specific Features of CA-OpenIngres (E)SQL Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'49COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41103" TYPE="XREF-TEXTCOPY"Specific Features of Microsoft SQL-Server (Dynamic) SQL Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'54COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42686" TYPE="XREF-TEXTCOPY"Specific Features of Oracle (E)SQL Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'63COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17338" TYPE="XREF-TEXTCOPY"Specific Features of Sybase (E)SQL Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'71Note: The examples in the first two sections apply mostly to TERM1="Informix"Informix.How to Generate Persistent CodeClass property PersistentPersistent code (SQL and ESQLC++) is only generated for classes that have the class property Persistent turned on.How to generate on Implementation Phase levelΣ To generate code for systems on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate C++.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase that have not yet been imported into the Implementation phase.- Select Specific Systems to select the systems from the Object Design phase for which you want to generate code. You can select only systems for which no code has yet been generated.ObjectTeam opens a Monitor window for displaying log messages, then imports the systems. For each system, ObjectTeam imports both the OOPL and SQL Models. (The SQL model is described later in this section.)ID="10881"How to generate on System levelΣ To regenerate selected system files:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate C++.A cascading menu appears.3 Select New or Selected:- Select New to generate code for all CADs for which you have not yet generated code. The Import New dialog box appears.How to Define a Target DatabaseIntroductionIf your CADs contain persistent classes, the persistent classes must be defined as database tables in a Relational Database Management System (RDBMS). That database must then be selected when you run the application code.OracleThe term for a database in Oracle is a schema. What is called a database Server in other RDBMSs, is called an Oracle SID in Oracle.Defining a target databaseThe steps for defining a target database depend on whether you already have the database defined:n If you do not have a database defined, you must create the database, select it, then execute the generated SQL scripts to create the database tables. (The SQL scripts are generated when you import the SQL Model into the Implementation phase.)n If you have a database, but it does not contain the required database tables, you must select the database and execute the generated SQL scripts to create the database tables.n If you already have a database that contains the required database tables, just select the database.Generated SQL scriptsWhen you import the SQL Model into the Implementation phase, a number of SQL scripts are generated. The SQL script to build the target database is create. This script activates other SQL scripts containing statements to create tables, procedures and rules.Database tables that are createdWhen you execute the SQL script create, database tables are created for the following persistent objects:n Classn Association as classn Aggregation as classn Link attribute boxn Qualified associationn Qualified aggregationn Many-to-many association (that is not an association as class)n Many-to-many aggregation (that is not an aggregation as class)For more informationSee REFID="20418" TYPE="XREF-TEXTCOPY"ESQLC++ Generation on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12 for more detail.Available operations on a target databaseThe available entries under the Database menu vary among the different RDBMSs supported by ObjectTeam:(A = available; NA = not available)COLS="6"COLNAME="1" COLWIDTH="132p"COLNAME="2" COLWIDTH="75p"COLNAME="3" COLWIDTH="58p"COLNAME="4" COLWIDTH="60p"COLNAME="5" COLWIDTH="63p"COLNAME="6" COLWIDTH="57p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Menu EntryCOLNAME="2" VALIGN="TOP" MOREROWS="0"InformixCOLNAME="3" VALIGN="TOP" MOREROWS="0"IngresCOLNAME="4" VALIGN="TOP" MOREROWS="0"MS SQL-ServerCOLNAME="5" VALIGN="TOP" MOREROWS="0"OracleCOLNAME="6" VALIGN="TOP" MOREROWS="0"SybaseCOLNAME="1" VALIGN="TOP" MOREROWS="0"Create DatabaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"ACOLNAME="3" VALIGN="TOP" MOREROWS="0"ACOLNAME="4" VALIGN="TOP" MOREROWS="0"ACOLNAME="5" VALIGN="TOP" MOREROWS="0"NACOLNAME="6" VALIGN="TOP" MOREROWS="0"ACOLNAME="1" VALIGN="TOP" MOREROWS="0"Deselect DatabaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"ACOLNAME="3" VALIGN="TOP" MOREROWS="0"ACOLNAME="4" VALIGN="TOP" MOREROWS="0"ACOLNAME="5" VALIGN="TOP" MOREROWS="0"NACOLNAME="6" VALIGN="TOP" MOREROWS="0"ACOLNAME="1" VALIGN="TOP" MOREROWS="0"Deselect SchemaCOLNAME="2" VALIGN="TOP" MOREROWS="0"NACOLNAME="3" VALIGN="TOP" MOREROWS="0"NACOLNAME="4" VALIGN="TOP" MOREROWS="0"NACOLNAME="5" VALIGN="TOP" MOREROWS="0"ACOLNAME="6" VALIGN="TOP" MOREROWS="0"NACOLNAME="1" VALIGN="TOP" MOREROWS="0"Destroy DatabaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"ACOLNAME="3" VALIGN="TOP" MOREROWS="0"ACOLNAME="4" VALIGN="TOP" MOREROWS="0"ACOLNAME="5" VALIGN="TOP" MOREROWS="0"NACOLNAME="6" VALIGN="TOP" MOREROWS="0"ACOLNAME="1" VALIGN="TOP" MOREROWS="0"Execute SQLCOLNAME="2" VALIGN="TOP" MOREROWS="0"ACOLNAME="3" VALIGN="TOP" MOREROWS="0"ACOLNAME="4" VALIGN="TOP" MOREROWS="0"ACOLNAME="5" VALIGN="TOP" MOREROWS="0"ACOLNAME="6" VALIGN="TOP" MOREROWS="0"ACOLNAME="1" VALIGN="TOP" MOREROWS="0"Select DatabaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"ACOLNAME="3" VALIGN="TOP" MOREROWS="0"ACOLNAME="4" VALIGN="TOP" MOREROWS="0"ACOLNAME="5" VALIGN="TOP" MOREROWS="0"NACOLNAME="6" VALIGN="TOP" MOREROWS="0"ACOLNAME="1" VALIGN="TOP" MOREROWS="0"Select SchemaCOLNAME="2" VALIGN="TOP" MOREROWS="0"NACOLNAME="3" VALIGN="TOP" MOREROWS="0"NACOLNAME="4" VALIGN="TOP" MOREROWS="0"NACOLNAME="5" VALIGN="TOP" MOREROWS="0"ACOLNAME="6" VALIGN="TOP" MOREROWS="0"NACOLNAME="1" VALIGN="TOP" MOREROWS="0"Set PasswordCOLNAME="2" VALIGN="TOP" MOREROWS="0"NACOLNAME="3" VALIGN="TOP" MOREROWS="0"NACOLNAME="4" VALIGN="TOP" MOREROWS="0"ACOLNAME="5" VALIGN="TOP" MOREROWS="0"ACOLNAME="6" VALIGN="TOP" MOREROWS="0"APackage must be specifiedYou specify your RDBMS using ObjectTeam's M4_package variable. For example, the following statement specifies Oracle as the RDBMS:M4_package=ObjectTeam-OMT/Oracle;RWIf the package specified is ObjectTeam-OMT/Gen, the Database menu does not appear. For more information, see the ObjectTeam System Administrator's Guide.How to define a databaseTERM1="database" TERM2="building"TERM1="database" TERM2="building"Σ To define a target database:1 Move to System level in the Implementation phase.2 To create the database, select Database | Create Database.Note: If the Database | Create Database item is not available for your RDBMS, you must use the RDBMS to create the database.The ObjectTeam shell interprets the Tcl script tdbop.tcl, which creates the new database on the specified server if the RDBMS is configured properly. When you create a database, some initial actions are executed, such as the creation of empty system tables for the database and the registration of the database in the Relational Database Management System. 3 To select the database, select Database | Select Database.Oracle: If you are using Oracle, select Database | Select Schema.The Select Database dialog box appears. The following illustrations show Informix and Oracle:FILENAME="00535.unk" ORIGFILE="pics/seldtbif.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"FILENAME="00536.unk" ORIGFILE="pics/seldtbor.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"4 To create the database tables:a In the Information area, select the appropriate SQL create script.b Select Database | Execute SQL.The ObjectTeam Shell executes the SQL statements of the selected SQL script.Setting a database (server) passwordMicrosoft SQL-Server and Sybase need a password to access the database server. Oracle needs a password to access the database itself. To avoid entering the required password every time you access the database server or database, select Database | Set TERM1="password" TERM2="for accessing database"Password. Following is the Set Password dialog box for Oracle:FILENAME="00537.unk" ORIGFILE="pics/password.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Deleting a target databaseIn the RDBMSs that support the creation of databases from ObjectTeam, you can also delete databases. To delete a database, select Database | Destroy Database.How ID="36652"SQL is GeneratedIntroductionThe mapping of C++ classes on a relational database is carried out through the runtime system. The Data Definition Language (DDL) to create the runtime system in ObjectTeam is SQL. The SQL code that is generated during persistent code generation is generated from the Class Association Diagrams residing in the same system of the previous phase.TERM1="data type" TERM2="standard"Standard data typesIn Class Association Diagrams, standard data types are used to define the data type of attributes. These types are mapped to target-dependent database types during persistent code generation. The standard data types can be found in the customization file:M4_home/etc/t_RDBMS/l_lang/stand_typesThe following customization file is used to map the standard types to database types:M4_home/etc/t_RDBMS/db_typesSee REFID="14052" TYPE="XREF-TEXTCOPY"Customizing Data Types on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11 for more information on these files.Generated filesWhatever RDBMS you are using, the following SQL script files are generated during SQL generation:COLS="2"COLNAME="1" COLWIDTH="111p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"File NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="create.sql"create.sqlCOLNAME="2" VALIGN="TOP" MOREROWS="0"Invokes the scripts create_tables and create_procsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="create_tables.sql"create_tables.sqlCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains SQL code for table definitionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="create_procs.sql"create_procs.sqlCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains SQL code for procedure creation. For every database table that is defined, the database operations delete, insert and update are generated. These procedures also handle referential integrityCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="drop.sql"drop.sqlCOLNAME="2" VALIGN="TOP" MOREROWS="0"Invokes the scripts drop_table and drop_procsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="drop_tables.sql"drop_tables.sqlCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains SQL code to drop table definitionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="drop_procs.sql"drop_procs.sqlCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains SQL code to drop procedure definitions. In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41904" TYPE="XREF-TEXTCOPY"Persistent Code Properties Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30438" TYPE="XREF-TEXTCOPY"Database Table Creation (create_tables) Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15Persistent Code ID="41904"PropertiesIntroductionThis section describes properties that affect persistent code generation. For instructions on how to specify properties, see REFID="16804" TYPE="XREF-TEXTCOPY"How to specify properties on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5.Which properties can you specifyThe following class properties affect persistent code generation:n Persistentn AbbreviationThe following data attribute properties affect persistent code generation:n Abbreviationn NullableThe following association properties affect persistent code generation:n Referential Integrityn Insert Policyn Update Policyn Delete PolicyFor details on referential integrity, refer to:n REFID="33656" TYPE="XREF-TEXTCOPY"Referential Integrity (RI)n REFID="11865" TYPE="XREF-TEXTCOPY"Customizing Referential Integrity PoliciesTERM1="persistent" TERM2="property"TERM1="property" TERM2="persistent"PersistentThis property must be switched on to indicate that a class is persistent. Besides, at least one data attribute must be identified as a key attribute. You can do that by inserting an asterisk (*) in front of the attribute's name.TERM1="abbreviation" TERM2="property"TERM1="property" TERM2="abbreviation"AbbreviationIf the name of a persistent class or data attribute is longer than the maximum length accepted by the RDBMS, you should specify an abbreviation.TERM1="nullable" TERM2="property"TERM1="property" TERM2="nullable"NullableThis property determines whether or not an attribute is allowed to have a NULL value. ID="30438"Database Table Creation (create_tables)SQLThis section describes the SQL that is generated to create the database tables.Note: The generated SQL is different for every RDBMS supported by ObjectTeam, but the underlying principles are the same. The examples in this section use the SQL for Informix.SQL generation for persistent classesIn the simplest situation one persistent class maps to one table. Operations are irrelevant to SQL generation; they are generated as C++ code.Each persistent class is mapped to a table, and the table rows are instances of the class. The combination of class name (table name) and instance name (user-defined primary key) is a system-wide unique identification. Prefixing an attribute in the Class Association Diagram with an asterisk (*) makes the attribute part of the primary key. The following CREATE TABLE statements are generated for one persistent class:FILENAME="00538.unk" ORIGFILE="pics/patient.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"SQL (Informix).CREATE TABLE Patient (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'addressname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(50),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'agename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INT,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));Association: one - optional In relationships that meet the following multiplicity requirements, it does not matter which table acts as master and which as detail:n The association has a multiplicity of one at one side.n The association has a multiplicity that is not many at the other side.However, since there has to be a master and a detail, the rule is that the destination class becomes master. The destination class is the class to which the association was drawn in the Class Association Diagram. The class from which the association was drawn becomes the detail. The association in the diagram below meets the requirements. The master-detail pair is as follows:A(master) - B(detail)Note: You cannot tell by looking at the diagram which class is the destination class.FILENAME="00539.unk" ORIGFILE="pics/sqasoo.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"SQL (Informix).CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(b_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(a_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));ALTER TABLE Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(a_name, name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;Associations with a many multiplicity at one sideIn relationships that meet the following requirements, the class at the end of the many multiplicity acts as detail in the master-detail pair:n The association has no class or link attribute associated to it.n The multiplicity is not many at either ends .n The relationship is not qualified.The diagrams depicted below meet these requirements. The master-detail pairs are as follows:n For diagrams 1 and 2A(master) - B(detail)FILENAME="00540.unk" ORIGFILE="pics/sqasm1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"FILENAME="00541.unk" ORIGFILE="pics/sqasm2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"n For diagram 3A(master) - A(detailFILENAME="00542.unk" ORIGFILE="pics/sqasm3.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"SQL (Informix): Diagram 1.CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(b_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(a_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));ALTER TABLE Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(a_name, i_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;A(master) - A(detail)Association: qualified and m-nFor relations that meet the following requirements, an extra table with the name of the association is generated:n The association has no class or link attribute associated to it.n If the relationship is not qualified, the multiplicity of the relationship is many at both sides (m-n relationship). If the relationship is qualified, the multiplicity of the relationship is irrelevant.The diagrams depicted below meet these requirements. In all these cases, an extra table assoc is generated. This extra table acts as detail in the master-detail pairs:A(master) - assoc (detail) B(master) - assoc (detail)FILENAME="00543.unk" ORIGFILE="pics/sqasmn1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"FILENAME="00544.unk" ORIGFILE="pics/sqasmn2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"FILENAME="00545.unk" ORIGFILE="pics/sqasmn3.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"SQL (Informix): Diagram 1.CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'assocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(b_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type));CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(b_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(a_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));ALTER TABLE assocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(b_name, name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES B;Associations with class or link attribute In associations that have a class or a link attribute associated with them, the associative object acts as detail in the master-detail-pairs. In the diagrams depicted below, the master-detail pairs are as follows:n For diagram 1 A(master) - C(detail)B(master) - C(detail)FILENAME="00546.unk" ORIGFILE="pics/sqaslnk1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"n For diagram 2A(master) - assoc(detail)B(master) - assoc(detail)FILENAME="00547.unk" ORIGFILE="pics/sqaslnk2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"SQL (Informix): Diagram 1.CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'j_class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(b_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'j_class_type,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(b_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(a_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));ALTER TABLE Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (b_name, name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES B;ALTER TABLE Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (a_name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'j_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(GeneralizationsTERM1="generalization" TERM2="example of generated C++ code"In a generalization, the superclass acts as master and the subclass as detail. In the following diagram, the master-detail pairs are as follows:A(master) - B(detail)A(master) - C(detail)FILENAME="00548.unk" ORIGFILE="pics/sqasgen.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"SQL (Informix).CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'b_idname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));*CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(80)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a_datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]',name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));ALTERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CONSTRAINTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FOREIGNname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCESname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'A;ALTERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CONSTRAINTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FOREIGNname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'KEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCESname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'A;CREATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(The attribute class_type, which is generated for every base class, is essential in generalizations. The following tables show what could be the contents of database table A, B and C. The value of a_date is the same for both Z's that occur in the table A. Without the class_type attribute, it would be impossible to distinguish the two Z's, even though they are two different occurrences with the same name.COLS="4"COLNAME="1" COLWIDTH="34p"COLNAME="2" COLWIDTH="108p"COLNAME="3" COLWIDTH="180p"COLNAME="4" COLWIDTH="126p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ACOLNAME="2" VALIGN="TOP" MOREROWS="0"NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Class_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"A_dateCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"BCOLNAME="4" VALIGN="TOP" MOREROWS="0"951107COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"YCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCOLNAME="4" VALIGN="TOP" MOREROWS="0"951106COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ZCOLNAME="3" VALIGN="TOP" MOREROWS="0"BCOLNAME="4" VALIGN="TOP" MOREROWS="0"951111COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ZCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCOLNAME="4" VALIGN="TOP" MOREROWS="0"951111COLS="4"COLNAME="1" COLWIDTH="34p"COLNAME="2" COLWIDTH="108p"COLNAME="3" COLWIDTH="180p"COLNAME="4" COLWIDTH="126p"COLNAME="1" VALIGN="TOP" MOREROWS="0"BCOLNAME="2" VALIGN="TOP" MOREROWS="0"NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"class_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"B_idCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"BCOLNAME="4" VALIGN="TOP" MOREROWS="0"333COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ZCOLNAME="3" VALIGN="TOP" MOREROWS="0"BCOLNAME="4" VALIGN="TOP" MOREROWS="0"444COLS="4"COLNAME="1" COLWIDTH="34p"COLNAME="2" COLWIDTH="108p"COLNAME="3" COLWIDTH="180p"COLNAME="4" COLWIDTH="126p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CCOLNAME="2" VALIGN="TOP" MOREROWS="0"NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Class_typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"C_dateCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ZCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCOLNAME="4" VALIGN="TOP" MOREROWS="0"940709ID="20418"ID="13730"ESQLC++ TERM1="Informix" TERM2="ESQL Features"TERM1="ESQL generation" TERM2="for Informix"GenerationTERM1="ESQLC++" TERM2="generation"TERM1="code generation" TERM2="ESQLC++"TERM1="persistent code generation" TERM2="ESQLC++"IntroductionThe mapping of C++ classes to a Relational Database is carried out through a runtime system. This runtime system enables the classes to do the following: n Connect to the databasen Transact information to and from the database n Carry out operations on the database such as insert, update and delete The Data Manipulation Language (DML) for the runtime system is ESQLC++. The generated ESQLC++ is different for every RDBMS supported by ObjectTeam, but the underlying principles are the same.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32016" TYPE="XREF-TEXTCOPY"Typedef Structs Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'24COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29071" TYPE="XREF-TEXTCOPY"DBObject Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13891" TYPE="XREF-TEXTCOPY"The Persistent Class Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28359" TYPE="XREF-TEXTCOPY"Database Class Generation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'30COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17301" TYPE="XREF-TEXTCOPY"Data Attribute Generation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'33COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19856" TYPE="XREF-TEXTCOPY"Association Generation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'35COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37091" TYPE="XREF-TEXTCOPY"Qualified Association Generation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12248" TYPE="XREF-TEXTCOPY"Link Attribute Generation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'42COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40455" TYPE="XREF-TEXTCOPY"Qualified Link Generation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'44COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39175" TYPE="XREF-TEXTCOPY"Example Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'45ID="32016"Typedef StructsTERM1="typedef structs" TERM2="in ESQLC++ generation"TERM1="ESQLC++" TERM2="typedef structs file"Types of typedef structsFor every runtime system a file system_nameStruct.hxx is generated. This file contains typedef structs of the table representations. This typedef structs file contains the following type def structs used in embedded SQL:n table_nameRow - used to represent in-core copies of table rowsn table_nameInd - used to check on null valuesThe Tcl procedure table::generate, which is used to generate the typedefs structs file, can be found in the default Tcl file:M4_home/tcl/t_RDBMS/l_cpp/gen_db_def.tclExampleThis is an example of both typedef structs:typedefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'structname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonRow_name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name[31];name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type[81];name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'address[31];}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonRow;typedefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'structname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonInd_name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'address;}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonInd;The typedefs allow you to retrieve data from the database, as shown in the following Informix ESQLC example (data and nullInd are data members of the persistent class):$DbPersonRowname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*db_dataname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&data;$DbPersonIndname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*db_indname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&nullInd;$SELECTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'addressINTOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$db_data->name:db_ind->name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$db_data->class_type:db_ind->class_type,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$db_data->address:db_ind->addressFROMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonWHEREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$db_data->namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ANDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$db_data->class_type;ID="29071"DBObjectTERM1="DBObject"TERM1="database" TERM2="object class library"TERM1="ESQLC++" TERM2="DBObject"IntroductionAll persistent classes are public virtual subclasses of the class DBObject from the ObjectTeam class library. This class offers database connection and transaction functions.FunctionsThe following functions are available:staticname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'connectDB(constname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*dbName);staticname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'beginWork();staticname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'commit();staticname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'rollback();intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'processSqlStatus();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'processname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sqlca.sql_codeStatesA DbObject can find itself in one of several states:enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Statename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CREATED,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'justname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'createdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NORMAL,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'everythingname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'OKname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SQL_ERROR,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SQLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'errorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'occurred}Note that the DBObject header file contains no embedded SQL.ID="13891"The Persistent ClassTERM1="persistent class"TERM1="class" TERM2="in persistent code generation (ESQLC++)"TERM1="ESQLC++" TERM2="class"IntroductionThe structure of the Tcl code for the persistent class generation is the same as for non-persistent class generation. Objects for which persistence is important are represented in the OOPL model with the prefix db_. For instance, there is a Tcl procedure assoc_attrib::generate available for non-persistent code generation. The name of the persistent counterpart is db_assoc_attrib::generate.Great care is taken to keep embedded C++ code out of the header files. If the header file contained embedded code, using just one persistent class would cause all normal C++ files referring to the header to be compiled by the embedded SQL-C preprocessor.Communicating with the databasePersistent classes automatically get a set of member functions and data attributes for communication with the database. No specification in a Class Association Diagram is needed. These data attributes, a struct for keeping table values in-core, and the accompanying null indicator struct are:class_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Rowname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'data;class_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Indname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'nullInd;Four member functions take care of the data transport between data struct and database. These functions are generated for every persistent class:virtualname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertInDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INSERTvirtualname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'readFromDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SELECTvirtualname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'deleteFromDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DELETEvirtualname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'updateInDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'UPDATEThese embedded SQL queries have the following structure:n Declaration of embedded pointer variables to data and null-indicator structsn Embedded queryn Checking error statusThe updateInDB() member function cannot update attributes that are part of the key. Foreign keys are not updated either.The other queries have a similar structure. For the Informix queries delete and insert, the stored procedures are called to ensure the TERM1="referential integrity" TERM2="in Informix"TERM1="Informix" TERM2="referential integrity"referential integrity. The stored procedures are generated by gensql.Subclasses of persistent classes redefine the insertInDB(), readFromDB(), deleteFromDB() and updateInDB() member functions; these so-called cascade functions handle the extra data from their level and then call the base class member of the function.Creating new instances of a classEvery persistent class has a static instantiate() member for making a new instance of the class and reading the data from the database. The function takes the key without class name as argument:DbPersonname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*DbPerson::instantiate(constname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*tmpname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPerson(name);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(tmp->readFromDB()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'deletename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'tmp;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'tmp;}The caller of this function is responsible for cleaning up the used memory.Creating new instances of subclassesThe member functions discussed so far are not adequate for creating an instance of the correct subclass. You need a function for creating an instance of a class with keys. For this, the base persistent class gets the following member function and data member:static DbPerson *findInDB(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'const char * name, int class_type);static DbPersonFindPF_NmFuncMap *typeMap;These members are added static to the persistent base class, and are therefore the same for all instances of the persistent class and its subclasses. DbPersonFindPF_NmFuncMap is a mapping of class name to a class instantiation function, which is initialized at startup for all classes in the application. This map contains the base class and all existing subclasses. findInDB()This is findInDB():name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'findInDB(name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'key,type-id{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'funcname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typeMap->get(class_nm);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'searchname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'forname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instantiatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'functionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'func(name);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'executename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'functionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'withname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'key}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'For example: Search for the instance Tuttle of class DbPerson:findInDB("Tuttle", "DbPerson")Two useful extra functions are:staticname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*findInDB(constname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name);staticname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int searchInDB(DbPerson_PtrSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&dbPersonSet,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&whereClause);searchInDB()The searchInDB() function fills a set of pointers to instances of classes matching the search condition of the string whereClause. The whereClause is embedded SQL.InitializationThe last part of the runtime system is the initialization. This consists of filling the typeMap with class-name - class-instantiate pairs. To the base persistent class header file the following is added:classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPerson;typedefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(*DbPersonFindPF)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(constname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name);classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'StringHash;structname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonInitializername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonInitializer(constname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonFindPFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'func);};inlinename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonInitializer::DBPersonInitializername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(constname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'String &name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonFindPFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'func){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(DbPerson::typeMapname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPerson::typeMapname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NmFuncMapname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<DbPersonFindPF>;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPerson::typeMap->set(name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'func);}To every persistent class source, a static instance of this class is added (using the DbPerson example):static DbPersonInitializer initialize(DbPersonStr,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&DbPerson::instantiate);And to every derived class of DbPerson, DbDerPerson for example:static DbPersonInitializer initialize(DbDerPersonStr,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&DbDerPerson::instantiate);The DbPersonStr is a static string of the class name incorporated in the source of every generated class:static String DbPersonStr("DbPerson");Model of the runtime systemThe model of the runtime system looks as follows:FILENAME="00549.unk" ORIGFILE="pics/runtime.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"ID="28359"Database Class GenerationTERM1="database class" TERM2="in persistent code generation (ESQLC++)"TERM1="class" TERM2="database"TERM1="ESQLC++" TERM2="database class"Generated partsFrom the Tcl function oopl_model::generate the function db_class::generate is called for persistent classes. The following parts are generated:n Embedded SQL header in the source file (see REFID="19651" TYPE="XREF-TEXTCOPY"Embedded SQL header in the source file (Informix))n The static class name string; for example for the class DbPerson:static String DbPersonStr("DbPerson")n The class features (via class::generate) (see REFID="15090" TYPE="XREF-TEXTCOPY"Class features)n The call to db_class::gen_for_base (only for base classes)n The initializer functionality, the findInDB() and searchInDB() functionsn The call to db_class::gen_for_derived n The Instantiate() functionn The default include of system_nameStruct.hxx in the header filen For Informix an extra #define protector statementn Two data members in the class struct; an in-core copy of table values and the accompanying null indicator struct (see REFID="12438" TYPE="XREF-TEXTCOPY"Data members in the class struct)n A constructor declaration and implementation (see REFID="15480" TYPE="XREF-TEXTCOPY"Constructor declaration and implementation)n The declaration and implementation of the following (see REFID="17450" TYPE="XREF-TEXTCOPY"Declaration and implementation of SQL operations):insertInDB()readFromDB()deleteFromDB()updateInDB()ID="19651"Embedded SQL header in the source file (Informix)Instead of the normally used $ notation, the EXEC SQL notation is used because system_nameStruct.hxx is not embedded itself. The path for ../system_nameStruct.hxx is needed because Informix esqlc does not accept include directories. Informix esqlc also accepts no #define statements, therefore the file protector for the system_nameStruct.hxx is placed outside the embedded section, and outside the file. The user has to provide functions like SqlPrint. This is included in the ObjectTeam class library.EXEC SQL BEGIN DECLARE SECTION;EXEC SQL include "../sys_name/sys_nameStruct.hxx";EXEC SQL END DECLARE SECTION;#define DBSPECSTRUCT_HXX 1#ifdef SQLPRINT_HXX#include "SqlPrint.hxx"#endif$WHENEVER SQLERROR CALL sqlprint;ID="15090"Class features The special database class features are (see also the OOPL model):COLS="2"COLNAME="1" COLWIDTH="175p"COLNAME="2" COLWIDTH="273p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Database Class FeatureCOLNAME="2" VALIGN="TOP" MOREROWS="0"Tcl ProcedureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"db_data_attrib::generateCOLNAME="1" VALIGN="TOP" MOREROWS="0"Associate attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"db_assoc_attrib::generateCOLNAME="1" VALIGN="TOP" MOREROWS="0"Qualified associate attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"db_qual_assoc_attrib::generateCOLNAME="1" VALIGN="TOP" MOREROWS="0"Link attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"db_link_attrib::generateCOLNAME="1" VALIGN="TOP" MOREROWS="0"Qualified link attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"db_qual_link_attrib::generateCOLNAME="1" VALIGN="TOP" MOREROWS="0"Reverse link attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"db_rv_link_attrib::generateNote that db_operation::generate is missing on this list if compared with the non-persistent class features. The operation object in the OOPL model does not exist in a persistent version.ID="12438"Data members in the class structTwo data members are in the class struct: an in-core copy of table values and the accompanying null indicator struct.The syntax is:class_nameRow data;class_nameInd nullInd;Currently, these are generated in the public data section. Following is an example for the table DbPerson:DbPersonRow data;DbPersonInd nullInd;ID="15480"Constructor declaration and implementationTERM1="constructor" TERM2="declaration and implementation"The keys of the table are the parameters of the constructor. For a derived class the keys are imported from its base class. The initialization of base classes is done by calling db_class::init_bases. The fields of the null indicator struct in the body are set to one of the following:n -1 (accompanying host variable contains NULL data, i.e. is nullable) n 0 (accompanying host variable contains non-NULL data, i.e. is not nullable)The following are not nullable:n Keysn Foreign keys of mandatory associationsn Fields with the nullable property set to NoFollowing is an example of a constructor for the persistent class DbPerson. The key is a character array name and address is a non-key attribute.DbPerson::DbPerson(constname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject(DbPersonStr){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'nullInd.addressname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-1;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'nullInd.namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'nullInd.class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'strcpy(data.class_type,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbPersonStr);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'strcpy(data.name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name);}ID="17450"Declaration and implementation of SQL operationsTERM1="SQL operations" TERM2="declaration and implementation"The function declarations are in the class declaration:virtual int insertInDB();virtual int readFromDB();virtual int deleteFromDB();virtual int updateInDB();Following is an Informix example with the class DbDerPerson, a subclass of DbPerson, and one extra data member integer salary: int DbDerPerson::insertInDB(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if (DbPerson::insertInDB() < 0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return -1;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$DbDerPersonRow *db_data = &data;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$DbDerPersonInd *db_ind = &nullInd;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$EXECUTE PROCEDURE pins_DbDerPerson(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$db_data->name:db_ind->name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$db_data->class_type:db_ind->class_type,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$db_data->salary:db_ind->salary);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return processSqlStatus();}ID="17301"Data Attribute GenerationTERM1="data attribute" TERM2="in persistent code generation (ESQLC++)"TERM1="data attribute"TERM1="ESQLC++" TERM2="data attribute"SyntaxUse the following syntax when you specify the TERM1="data attribute" TERM2="syntax"SEE="data attribute" TERM1="attribute"data attributes of a class:FILENAME="00550.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/cpp/pers611.fm5.mif"system_nameStruct.hxxIn the system_nameStruct.hxx file, a table and an indicator typedef are generated with the following standard data type class.FILENAME="00551.unk" ORIGFILE="pics/esqdata.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Part Of <System_name>struct.hxx.typedef struct DbDerPersonRow_ {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'char name[31];name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'char class_type[81];name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int salary;} DbDerPersonRow;typedef struct DbDerPersonInd_ {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'short name;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'short class_type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'short salary;} DbDerPersonInd;...:Member functionsIn the Tcl function db_data_attrib::generate, the following member functions can be generated:ExampleThe following overview shows various data attributes you can specify in classes and the most significant part of the resulting ESQLC++ code:Standard type class.FILENAME="00552.unk" ORIGFILE="pics/esqmem1.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"C++.Member(long int memberNo);...long int getMemberNo() const;...MemberRow data;MemberInd nullInd;Standard type class.FILENAME="00553.unk" ORIGFILE="pics/esqmem2.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"C++.Member();...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'const char *getName() const;int nameIsNull() const;void setName(const char *newname);void nullifyName();...MemberRow data;MemberInd nullInd;ID="19856"Association GenerationTERM1="association" TERM2="in persistent code generation (ESQLC++)"TERM1="ESQLC++" TERM2="association"IntroductionAnalogous to the non-persistent association generation a generic dispatch function exists. This function is gen_for_db_assoc. It has the following association parts:The get, set/add and remove functions that are generated have the same names as their non-persistent counterparts. The parameter interface is slightly different. The functions always have an integer return value for the SQL error status. The other return values are parameters. The exception is the one-get function, which returns the pointer to the object. Examples (one-optional one-mandatory)The following overview shows two associations you can model in Class Association Diagrams: the multiplicity of the first association is one-optional, for the second one it is one-mandatory.TERM1="association" TERM2="in persistent code generation (ESQLC++)"Normal Association. Multiplicity: one-optional.FILENAME="00554.unk" ORIGFILE="pics/esqasoo.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Interface Of Class A....ClassA(int m1classA);ClassB *getRoleB() const;int setRoleB(ClassB *newRoleB);int removeRoleB();...TERM1="association" TERM2="in persistent code generation (ESQLC++)"Normal Association. Multiplicity: one-mandatory.FILENAME="00555.unk" ORIGFILE="pics/esqasom.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Interface Of Class A....ClassA(int i_m1classA, ClassB& roleB));ClassB *getRoleB() const;int setRoleB(ClassB *newRoleB);...Tcl proceduresThe following Tcl procedures are involved while generating this code:n db_assoc_attrib::one_set Two pointers to data structures are declared, one to the class's own structure and one to the related structure (master and detail). The imported keys implementing the relation get a value through an embedded SQL update. Depending on the export target, the own or the related table is updated. This function is not generated if the other side of the relation is qualified, because the key needed to implement the function is not available.n db_assoc_attrib::one_remove A pointer to the own data structure is declared and the imported key is set to NULL with an embedded SQL update. In the case of a mandatory relation, nothing is generated.n db_assoc_attrib::one_get For the get function three situations are possible:- The keys are imported to the table belonging to the current class - The keys are part of the related class- The relation is qualified, and the keys are exported to a separate tableIn the first situation, the existence of a relation is checked by looking at the imported key field of the null indicator struct: -1 means no relation. If the relation exists, the result of a related_class::findInDB() is returned. The parameters of this findInDB() are the imported key fields of the data struct. In the second situation, the imported key fields in the data struct are not available because they reside with the related class. The fields are made available by executing embedded SQL on the table of the related class and storing them in a temporary local struct. From there, the fields are accessed by the findInDB().In the third situation, a qualified relation with a separate table is implemented. Then, an embedded SQL select and a findInDB() are generated, as in the second situation.Example: many-optional, many-mandatoryThe following table shows two associations you can model in Class Association Diagrams. The multiplicity of the first association is many-optional, for the second one it is many-mandatory.Association. Normal.Multiplicity: many-optional.FILENAME="00556.unk" ORIGFILE="pics/esqasmo.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Multiplicity: many-mandatory.FILENAME="00557.unk" ORIGFILE="pics/esqasmm.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Interface Of Class A....ClassA(int m1classA);int getroleBSet (PtrSet<ClassB> name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&RoleBSet) const;int addRoleB(ClassB *newRoleB);int removeRoleB(ClassB *to_remove);...Tcl proceduresThe following Tcl procedures are involved while generating this code:n db_assoc_attrib::many_set Two types of one-many relations exist: without an extra table and with an extra table.For a one-many relation without an extra table, the foreign keys of the detail table are updated with an embedded SQL table.For a one-many relation with an extra table, a SQL insert is executed on the extra table. This table includes the keys of both related classes. For Informix, an insert procedure is used. n db_assoc_attrib::many_remove Many-remove relations also appear in two versions: without and with an extra table. In the first case, the foreign keys in the detail table are set to NULL with an embedded SQL update.The many-remove relation with an extra table is executed with a delete procedure (Informix) using the keys of both the related classes on the extra table.n db_assoc_attrib::many_get Like the previous relations, the many-get has two variations. In both cases a pointer set is filled with an embedded SQL cursor and a findInDB(). In the case without the extra table, the cursor operates on the detail table. In the case with an extra table, the cursor operates on the extra table.ID="37091"Qualified Association GenerationTERM1="qualified association" TERM2="in persistent code generation (ESQLC++)"TERM1="association" TERM2="qualified"TERM1="ESQLC++" TERM2="qualified association"IntroductionQualified associations always have an extra table generated. The code generation is similar to that of the many-many association attribute, however, the qualifier is used as extra search condition for the embedded queries. The keys of the extra table are:Note that the qualifier data type is a standard type. This is an important difference with the non-persistent code generation.Example: one-optionalThe following overview shows a qualified association you can model in Class Association Diagrams. The multiplicity of the qualified association is one-optional. The type of qualA is integer.Association. TERM1="qualified association"TERM1="association" TERM2="qualified"Qualified.Multiplicity: one-optional.FILENAME="00558.unk" ORIGFILE="pics/esqasqoo.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Interface Of Class A (Informix).//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Default constructor/destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'A(int m1A);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'~A();//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Association accessor methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'B *getB(int qualA) const;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int setB(int qualA, B *new_b);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int removeB(int qualA);Tcl proceduresThe following Tcl procedures are involved while generating this code:n db_qual_assoc_attrib::one_set This function is implemented with an insert procedure (Informix) on the extra created table.n db_qual_assoc_attrib::one_remove This function is implemented with a delete procedure (Informix) on the extra created table.n db_qual_assoc_attrib::one_get This function is implemented with an embedded SQL select on the extra created table followed by a findInDB() call.Example: optional-manyThe following overview shows a qualified association you can model in Class Association Diagrams. The multiplicity of the qualified association is optional-many. The type of qualA is integer.Association. Qualified.Multiplicity: optional-many.FILENAME="00559.unk" ORIGFILE="pics/esqasqmo.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Interface Of Class A (Informix)....ClassA(int m1classA);int getClassBSet (PtrSet<ClassB>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&ClassBSet, int qualA) const;int addClassB(int qualA, ClassB *newClassB);int removeClassB(int qualA, ClassB name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*to_remove);...Tcl proceduresThe following Tcl procedures are involved while generating this code:n db_qual_assoc_attrib::many_set This function is implemented with an insert procedure (Informix) on the extra created table.n db_qual_assoc_attrib::many_remove This function is implemented with a delete procedure (Informix) on the extra created table.n db_qual_assoc_attrib::many_get This function is implemented with an insert procedure (Informix) on the extra created table.ID="12248"Link Attribute GenerationTERM1="link attribute" TERM2="in persistent code generation (ESQLC++)"TERM1="ESQLC++" TERM2="link attribute"IntroductionFor Link Attribute and Reverse Link Attribute generation, a table is created for the link. The keys of this table are:The keys become foreign keys of the link table.In each of the related classes, a get function to the link class is generated. In the link class, a get function is generated to both related classes. Because there are only get functions created, no dispatch functions are needed. ExampleThe following overview shows examples of associations with a link attribute that you can model in Class Association Diagrams. FILENAME="00560.unk" ORIGFILE="pics/esqaslnk.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"CUST InterfaceMultiplicity: optional-many...Cust(int m1cust);... int getPurchaseofBookSet (PtrSet<purchase>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&BookSet) const;...PURCHASE InterfaceMultiplicity: one-mandatoryPurchase(Book& book, Cust& cust);...Book *getBook() const;Cust *getCust() const;...BOOK InterfaceMultiplicity: one...Book(int m1book);...Purchase *getPurchaseOfCust() const;...Tcl proceduresThese are the Tcl procedures containing the implementation:n db_link_attrib::one_generate The get function is created with an embedded SQL select plus a findInDB() function. The select is used to retrieve the parameters from the link class table using the own keys. The parameters go into the findInDB().n db_link_attrib::many_generate The get function is created with an embedded SQL select plus a findInDB() function. The select is used to retrieve the parameters from the link class table using the own keys. The parameters go into the findInDB().n db_rv_link_attrib::generate (always one) The get function consists of a find_InDB().ID="40455"Qualified Link GenerationTERM1="qualified association" TERM2="in persistent code generation (ESQLC++)"TERM1="association" TERM2="qualified"TERM1="ESQLC++" TERM2="qualified association attribute"IntroductionThe code generation for qualified links is, for the main part, the same as the non-qualified version. The difference is the qualifier which is added as extra condition in the embedded SQL. ExampleThe following overview shows examples of associations with a TERM1="association" TERM2="qualified link attribute"TERM1="data attribute" TERM2="qualified link"TERM1="link attribute" TERM2="qualified"qualified link attribute that you can model in Class Association Diagrams.FILENAME="00561.unk" ORIGFILE="pics/esqasqln.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"Interface Multiplicity: many-optional...Cust(int m1cust);... int getPurchaseofBookSet (PtrSet<purchase> name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&BookSet int shop) const;...Tcl proceduresThe Tcl procedures containing the implementations are:n db_qual_link_attrib::one_generate n db_qual_link_attrib::many_generate The get function consists of a find_InDB().ID="39175"ExampleExampleThe following Class Association Diagram displays the relation between a Person and the Company the person works for. Both the classes, Person and Company, are persistent classes for which SQL and ESQLC++ is generated. FILENAME="00562.unk" ORIGFILE="pics/esqperco.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/pers611.fm5.mif"FunctionsFollowing is a simple C++ main file that shows the following functions:n Three instances of the class Person are created (insertAll)n Two instances of the class Company are created (insertAll)n Instances of the class Person are associated to instances of the class Company (insertAll)n All Persons working for a Company are listed (listAll)n All instances of the classes Person and Company are removed (removeAll)This simple program does not contain any RDBMS-specific ESQLC++ code. It only contains C++ code and calls to functions that are made available in C++. These calls are printed in bold.#includename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<iostream.h>#ifndefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'COMPANY_HXX#includename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Company.hxx"#endif#ifndefname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PERSON_HXX#includename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Person.hxx"#endifvoidname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertAll();voidname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll();voidname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'removeAll();main(intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'argc,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*argv[]){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(argcname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Usage:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'argv[0]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<databasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name>"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Connectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'toname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'argv[1]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(DBObject::connectDB(argv[1])name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Connectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'failed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Begin"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject::beginWork();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertAll();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Commit"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject::commit();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Begin"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject::beginWork();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'removeAll();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Commit"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject::commit();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0;}voidname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertAll(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Createname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Createname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Persons"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1("Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'One");name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1.setBornIn(1964);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2("Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Two");name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2.setBornIn(1966);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3("Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Three");name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3.setBornIn(1968);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Createname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companiesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Createname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companies"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1("Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'One");name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1.setFoundedIn(1980);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2("Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Two");name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2.setFoundedIn(1985);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Insertname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Tuplesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Insertname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'inname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DB"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1.insertInDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2.insertInDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3.insertInDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Insertname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companiesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'inname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DB"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1.insertInDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2.insertInDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'relationsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'relationsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'betweenname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companies"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1.setEmployer(&company1);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2.setEmployer(&company2);}voidname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Nowname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'allname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'withname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Company"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PtrSet<Person>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'personSet;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(Person::searchInDB(personSet,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"")==0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*p;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*c;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p=personSet.first();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'whilename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(p!=NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'coutname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p->getName()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'";name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(p->bornInIsNull())name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'coutname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'";name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'elsename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'coutname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p->getBornIn()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'";name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c=p->getEmployer();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(c!=NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'coutname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c->getName()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'";name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(c->foundedInIsNull())name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'coutname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"NULL"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'elsename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'coutname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c->getFoundedIn()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'elsename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'coutname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Unemployed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'deletename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'deletename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p=personSet.next();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}}voidname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'removeAll(){name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PtrSet<Person>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'personSet;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(Person::searchInDB(personSet,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"")==0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*p;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p=personSet.first();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'whilename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(p!=NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"deletingname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p->getName()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p->deleteFromDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'deletename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p=personSet.next();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PtrSet<Company>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'companySet;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(Company::searchInDB(companySet,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"")==0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*c;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c=companySet.first();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'whilename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(c!=NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cerrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"deletingname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c->getName()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endl;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c->deleteFromDB();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'deletename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c=companySet.next();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}}ID="23699"Specific Features of TERM1="CA-OpenIngres"CA-OpenIngres (E)SQLIntroductionCA-OpenIngres 1.1. is one of the Relational Database Management Systems (RDBMS) supported by the persistent code generation of ObjectTeam. In this section, some special features of CA-OpenIngres SQL and ESQL are discussed.Note: Make sure CA-OpenIngres is configured properly before using it in combination with ObjectTeam. Supported platformsPersistent code generation for CA-Ingres applies to:n Unix-based platformsIn this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35912" TYPE="XREF-TEXTCOPY"SQL: Database Table Creation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'50COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31070" TYPE="XREF-TEXTCOPY"SQL: Database Procedure Creation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'51COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36156" TYPE="XREF-TEXTCOPY"ESQL Features Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'53TERM1="CA-OpenIngres" TERM2="SQL features"TERM1="SQL generation" TERM2="for CA-OpenIngres"ID="35912"SQL: Database Table CreationIntroductionWhen using CA-OpenIngres, you should be aware of the following notes concerning how ObjectTeam generates table definitions.NOT NULL generationThe SQL generator generates a nullability of NOT NULL if both the following statements are true:n The column is (part of) the key in a table definition.n The property nullable of the corresponding attribute in the SQL model is set to No.Comment generationThe SQL generator generates comment strings for every column in a table definition. TERM1="key constraint" TERM2="in CA-OpenIngres"Key constraintsThe SQL generator does not generate primary key and foreign key constraints. Instead, it generates a CREATE UNIQUE INDEX statement for the (composed) key of a table, and a CREATE INDEX statement for the (composed) foreign key(s) in a table. ID="31070"SQL: Database Procedure CreationTERM1="database procedure" TERM2="in CA-OpenIngres"Generated DB proceduresDuring SQL code generation, DB procedures are generated. These procedures are executed after the database operations delete, insert and update. The names of these procedures are:n pdel_table_name n pins_table_name n pupd_table_name When DB procedures are not generatedGenerally speaking, these DB procedures are generated for every table definition that is generated. However, in the following circumstances, they are not:n When all rules for the operation and the types of links of the table are set to none. These rules can be set in the customization file sqlrules.As this means that no conditions must be met and no actions must be taken, the procedure would be empty; therefore, no DB procedure is generated.Warning: The term rule as used here refers to ObjectTeam rules, not Ingres rules.n The procedure cannot be created due to a cascade cycle (delete or update).n The procedure cannot be implemented due to a conflict in rules for an operation. Such a conflict occurs, for instance, when an insert into a detail table demands the existence of the foreign key in the master table and vice versa. Another example of a conflict is when a delete from a detail table is rejected if the foreign key exists in the master table and vice versa. ID="33656"Referential TERM1="referential integrity" TERM2="in CA-OpenIngres"TERM1="CA-OpenIngres" TERM2="referential integrity"Integrity (RI)To enforce and maintain referential integrity in a generated CA-OpenIngres database, the code generator of ObjectTeam uses a mechanism of rules and DB procedures.A rule is a user-defined mechanism that invokes a specified DB procedure whenever the database changes in a specified way. Whenever the execution of a statement satisfies an existing rule condition, the rule is fired, i.e. the DB procedure associated with that rule is executed. The code generator generates CREATE PROCEDURE and CREATE RULE statements to implement this mechanism.Whenever a referential integrity check fails, the procedure raises an error and returns, which causes all the statements in the procedure which have been executed to be rolled back. The statement that fired the rule associated with the procedure is also rolled back. Supported RI rules The following table summarizes the RI rules supported for the combinations of operation and table types:COLS="3"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="126p"COLNAME="3" COLWIDTH="216p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="2" VALIGN="TOP" MOREROWS="0"RuleCOLNAME="3" VALIGN="TOP" MOREROWS="0"CommentCOLNAME="1" MOREROWS="1" VALIGN="TOP"insert in detail COLNAME="2" VALIGN="TOP" MOREROWS="0"rej_not_exist COLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on not exist impkey in masterCOLNAME="2" VALIGN="TOP" MOREROWS="0" ins_in_masterCOLNAME="3" VALIGN="TOP" MOREROWS="0"Cascade insert in masterCOLNAME="1" VALIGN="TOP" MOREROWS="0"insert in master COLNAME="2" VALIGN="TOP" MOREROWS="0" rej_not_existCOLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on not exist expkey in detailCOLNAME="1" MOREROWS="3" VALIGN="TOP"delete in detail COLNAME="2" VALIGN="TOP" MOREROWS="0"rej_existCOLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on exist impkey in masterCOLNAME="2" VALIGN="TOP" MOREROWS="0" del_in_masterCOLNAME="3" VALIGN="TOP" MOREROWS="0"Cascade delete impkey in masterCOLNAME="2" VALIGN="TOP" MOREROWS="0" rej_last_in_masterCOLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on last impkey in masterCOLNAME="2" VALIGN="TOP" MOREROWS="0" rej_lastCOLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on last impkey in current tableCOLNAME="1" MOREROWS="3" VALIGN="TOP"delete in master COLNAME="2" VALIGN="TOP" MOREROWS="0"nullify_detailCOLNAME="3" VALIGN="TOP" MOREROWS="0"Nullify expkey in detailCOLNAME="2" VALIGN="TOP" MOREROWS="0" del_in_detailCOLNAME="3" VALIGN="TOP" MOREROWS="0"Cascade delete expkey in detailCOLNAME="2" VALIGN="TOP" MOREROWS="0" rej_existCOLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on exist expkey in detailCOLNAME="2" VALIGN="TOP" MOREROWS="0" rej_lastCOLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on last expkey in current tableCOLNAME="1" MOREROWS="1" VALIGN="TOP"update in detail COLNAME="2" VALIGN="TOP" MOREROWS="0"rej_not_existCOLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on not exist impkey in masterCOLNAME="2" VALIGN="TOP" MOREROWS="0" ins_in_masterCOLNAME="3" VALIGN="TOP" MOREROWS="0"Insert in masterCOLNAME="1" MOREROWS="2" VALIGN="TOP"update in master COLNAME="2" VALIGN="TOP" MOREROWS="0"upd_in_detailCOLNAME="3" VALIGN="TOP" MOREROWS="0"Update expkey in detailCOLNAME="2" VALIGN="TOP" MOREROWS="0" nullify_detailCOLNAME="3" VALIGN="TOP" MOREROWS="0"Nullify expkey in detailCOLNAME="2" VALIGN="TOP" MOREROWS="0" rej_existCOLNAME="3" VALIGN="TOP" MOREROWS="0"Reject on exist expkey in detailDeclarative referential integrityDeclarative referential integrity, as supported by CA-OpenIngres, is not used by ObjectTeam code generation. The main reason is that certain cascade RI policies can result in DB procedures that need to call cross-dependent procedures and that need cursor-like structures.TERM1="CA-OpenIngres" TERM2="ESQL features"TERM1="ESQL generation" TERM2="for CA-OpenIngres"ID="36156"ESQL FeaturesInformationWhen using CA-OpenIngres, you should be aware of the following notes concerning the generation of Embedded SQL (ESQL).TERM1="ESQLC preprocessor" TERM2="for CA-OpenIngres"ESQLC preprocessor Within the ObjectTeam environment, the ESQLC++ preprocessor of CA-OpenIngres is used in the makefile. You can generate a makefile by selecting -Utilities | Generate Makefile in the Implementation phase. The corresponding command is named esqlcc. Generated ESQL filesThe following files are generated in your user environment by the ESQL generator:Note that the DB procedures mentioned earlier in this chapter are not called directly from the generated embedded C++ files. Instead, simple SQL statements like INSERT and DELETE are used to interact with the database.ID="41103"Specific SEE="Microsoft SQL-Server" TERM1="MS SQL-Server"Features of TERM1="Microsoft SQL-Server"Microsoft SQL-Server (Dynamic) SQLIntroductionMicrosoft SQL-Server is one of the Relational Database Management Systems (RDBMS) supported by the persistent code generation of ObjectTeam. In this section, some special features of Microsoft Transact-SQL and Microsoft DB-Library for C(++) are discussed.Note: Make sure MS SQL-Server is configured properly before using it in combination with ObjectTeam. Supported platformsPersistent code generation for Microsoft SQL-Server applies to:n PC platformsIn this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32104" TYPE="XREF-TEXTCOPY"SQL: Database Table Creation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'55COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40113" TYPE="XREF-TEXTCOPY"SQL: Database Procedure Creation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'56COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19689" TYPE="XREF-TEXTCOPY"Dynamic SQL Features Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'60TERM1="Microsoft SQL-Server" TERM2="SQL features"TERM1="SQL generation" TERM2="for Microsoft SQL-Server"ID="32104"SQL: Database Table CreationFeaturesWhen using Microsoft SQL-Server, you should be aware of the following notes concerning the generation of table definitions in ObjectTeam:n Column constraints can be added to column definitions.n Table constraints can be added to table definitions.n The PRIMARY KEY constraint is generated as part of the table definition. n In the create_tables.sql script, ALTER TABLE statements are generated to add the FOREIGN KEY constraints. n No Transact-SQL code is generated to check on column and table constraints. Because the column and table constraints are included in the column and table definition, the database engine enforces these constraints. n No Transact-SQL code is generated for referential integrity constraints that are enforced by the database engine (through FOREIGN KEY constraints).n For each table, a CREATE TABLE statement is generated, containing all columns and the following constraints: NULL, NOT NULL, CHECK, and PRIMARY KEY. Foreign keys are generated using the ALTER TABLE command.Numbering TERM1="key fields" TERM2="numbering - in Microsoft SQL-Server"TERM1="serial" TERM2="standard type for Microsoft SQL-Server"key fields (serial)Microsoft SQL-Server supports the serial (identity) type, which can be used for the automatic generation of unique numbers for key fields. ObjectTeam offers the standard type serial to support this feature. You can apply the type serial to only one field a table. Fields to which this type is applied cannot be updated. Foreign keys referencing a serial type are translated to the type INTEGER.ID="40113"SQL: Database Procedure CreationTERM1="procedures" TERM2="stored - in Microsoft SQL-Server"Stored proceduresMicrosoft SQL-Server supports stored procedures. These procedures are written in Transact-SQL and stored in the database. For every table definition that is generated, stored procedures are generated that handle the database operations delete, insert and update.The names of these stored procedures are as follows:n pdel_table_name n pins_table_name n pupd_table_name Transact-SQL procedures generally consist of a basic query, which can be preceded by referential integrity checks that are not enforced by the database engine. An example of a basic query is:DELETEFROM personWHERE p_number=numberReferential TERM1="referential integrity" TERM2="in Microsoft SQL-Server"TERM1="Microsoft SQL-Server" TERM2="referential integrity"Integrity (RI)To implement referential integrity that is not enforced by the database engine, ObjectTeam generates Transact-SQL procedures. Referential integrity rules are obtained from the SQL Model (see the ObjectTeam Programming Interface Guide), where they are specified by links between tables. If a rule cannot be implemented, the procedure that should contain the rule is not generated and a warning message is issued. In that case, you have to implement the procedure manually.Supported RI rulesOn the following pages, every referential integrity rule is briefly discussed:n Reject on not exist expkey in detail. This rule cannot be implemented. Microsoft SQL-Server prohibits the occurrence of foreign keys that do not exist in the master table. n Reject on not exist impkey in master. This rule is enforced by Microsoft SQL-Server through FOREIGN KEY CONSTRAINT.n Reject on exist expkey in detail. This rule is enforced by Microsoft SQL-Server through FOREIGN KEY CONSTRAINT. n Reject on exist impkey in master. This rule must be executed before the query. To check this rule, the entire row is needed. Because Microsoft SQL-Server enforces the existence of a non-NULL imported key, you only need to test if the impkey is NULL. The following code is generated: IF <impkey> IS NOT NULLBEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RAISEERROR ('Referential integrityname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'violated',16,-1)ENDIn case of an update, the code generator tests if the old impkey is not NULL. This means that for an update the old row. needs to be fetched.n Reject on last impkey in current table. This rule needs the entire row and is checked before the query. The following code is generated: BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IF (SELECT COUNT(*) FROM name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<current table>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHERE <table.impkey = row.impkey>)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'= 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RAISERROR('Referential integrityname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'violated',16,-1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDENDn Reject on last impkey in master. This rule is implemented in the same way as in the Reject on exist impkey in master rule.n Insert in master impkey. The following code is generated: BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IF (SELECT COUNT(*) FROM <current table>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHERE <table.impkey = row.impkey>) = 0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'EXEC pins_<current table> <values>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDENDTo process this rule, non-key columns in the master table must be nullable. This cannot be checked during generation, but Microsoft SQL-Server will issue a runtime error. Besides, this cascade-insert is an operation that is subject to other referential integrity rules. The following rules are applicable for insert: - reject on not exist expkey in detail This operation is not supported. - reject on exist impkey in master This is handled by Microsoft SQL-Server.- insert in master impkey This action can only be supported if the impkey is equal to the key. If this is not the case, it will result in a runtime Microsoft SQL-Server error. n Delete in detail expkey. This rule is executed before the master is deleted. The following code is generated:BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<definition of local key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECLARE <detail>_cursor CURSOR FORname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SELECT <detail key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FROM <detail>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHERE <detail.impkey = master.impkey>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'OPEN <detail>_cursorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FETCH NEXT FROM <detail>_cursorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTO <local key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHILE (@@FETCH_STATUS <> -1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IF (@@FETCH_STATUS <> -2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'EXEC pdel_<detail> <local key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FETCH NEXT FROM <detail>_cursorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTO <local key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CLOSE <detail>_cursorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DEALLOCATE <detail>_cursorENDn Delete in master impkey. This is a special case: the rule should be executed after the query, otherwise references from the detail to the master may still exist. For this rule, the entire tuple is needed. The following code is generated: DELETEFROM <master>WHERE <key = master.impkey>;n Update in detail expkey. Updating of key values is not supported.n Nullify expkey in detail. This rule is executed before the query. The following code is generated: UPDATE <detail>SET <expkey> = NULLWHERE <key = detail.expkey>;TERM1="data type" TERM2="in Microsoft SQL-Server"SQL types and C++ typesDuring code generation, the code generator needs to know how SQL types must be converted to C++ types and vice versa. The required information is stored in the customization file db_binding.db_binding, which can be found in the directory TERM1="db_binding"M4_home\modules\pers-cpp-mss\etc.This file contains three columns:- standard type This column corresponds to columns by the same name in the customization files stand_types, db_types and lang_types.- SQL binding This column contains a vartype, as defined in the description of dbbind in the Microsoft SQL Server Programming DB-Library for C manual.- Format String This column contains a simple format string similar to C-printf.TERM1="Microsoft SQL-Server" TERM2="Dynamic SQL features"TERM1="Dynamic SQL" TERM2="generated for Microsoft SQL-Server"ID="19689"Dynamic SQL FeaturesIntroductionAll SQL statements are processed dynamically using db... functions from the DB-library. These functions need to connect to the database. Because only one query at a time can be done on a single connection, a second connection is needed for all functions returning a set of objects.When using Microsoft SQL-Server, you should be aware of the following notes regarding the generation of Dynamic SQL (ESQL) in ObjectTeam.TERM1="C++ compiler" TERM2="for Microsoft SQL-Server"C++ compilerThe code generated by the code generator of ObjectTeam can only be compiled with a Microsoft Visual C++ compatible compiler.TERM1="Microsoft SQL-Server" TERM2="runtime environment variables"Runtime featuresTo execute an application that was compiled to work with a Microsoft SQL-Server database, the following environment variables must be set properly:n TERM1="DBUSERNAME" TERM2="runtime environment variable for Microsoft SQL-Server"DBUSERNAME. This variable must correspond to the user name you use to connect to the database.n TERM1="DBPASSWD" TERM2="runtime environment variable for Microsoft SQL-Server"DBPASSWD. This variable must correspond to the password required to connect the user specified by DBUSERNAME to the database.n TERM1="DBSERVER" TERM2="runtime environment variable for Microsoft SQL-Server"DBSERVER. This variable must correspond to the name of the server on which your database runs.TERM1="Dynamic SQL" TERM2="files generated for Microsoft SQL-Server"Generated Dynamic SQL filesThe following files are generated in your user environment by the Dynamic SQL generator:Specific TERM1="Tcl procedures" TERM2="Microsoft SQL-Server specific"Tcl proceduresA number of Tcl procedures specific to Microsoft SQL-Server are available, mainly to support dynamic SQL. The definition of these procedures can be found in the following file:M4_home\tcl\t_mss\libmss.tcl COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl ProcedureCOLNAME="2" VALIGN="TOP" MOREROWS="0"ExplanationCOLNAME="1" VALIGN="TOP" MOREROWS="0"get_bind_typestd typeStd COLNAME="2" VALIGN="TOP" MOREROWS="0"Returns the handle of a bind-type entry from the file M4_home\etc\ t_mss\db_binding.typeStd is the name of the standard type.COLNAME="1" VALIGN="TOP" MOREROWS="0"get_bind_entry column COLNAME="2" VALIGN="TOP" MOREROWS="0"Returns the handle of a bind-type entry from the file M4_home\etc\t_mss\db_binding COLNAME="1" VALIGN="TOP" MOREROWS="0"get_format_char column COLNAME="2" VALIGN="TOP" MOREROWS="0"Uses get_bind_entry to get the handle and returns the format character, including the %. For example: '%s' or '%d'.COLNAME="1" VALIGN="TOP" MOREROWS="0"get_bind_type column COLNAME="2" VALIGN="TOP" MOREROWS="0"Uses get_bind_entry to get the handle and returns the bind type. For example: NTBSTRINGBIND or INTBIND. COLNAME="1" VALIGN="TOP" MOREROWS="0"mss_gen_compare sect table ?selector? ?prefix1? ?postfix1? ?prefix2? ?postfix2? ?separator? ?newline? ?master_table? ?dbproc? COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates a list of dbfcmd functions: one for each column. Each of these functions lists one compare. Only the columns that match the selector are used.COLNAME="1" VALIGN="TOP" MOREROWS="0"mss_gen_compare_cl sect table ?prefix1? ?postfix1? ?prefix2? ?postfix2? ?separator? ?newline? ?dbproc? COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates a list of dbfcmd functions: one for each column. Each of these functions lists one compare. All columns are used.COLNAME="1" VALIGN="TOP" MOREROWS="0"mss_gen_binding sect link ?prefix? ?postfix? ?selector? ?master_table? ?dbproc? COLNAME="2" VALIGN="TOP" MOREROWS="0"Binds all columns matching the selector to a variable. COLNAME="1" VALIGN="TOP" MOREROWS="0"mss_gen_nbinding sect link ?prefix? ?postfix? ?selector? ?master_table? ?dbproc? COLNAME="2" VALIGN="TOP" MOREROWS="0"Binds all nulls of columns matching the selector to a variable. COLNAME="1" VALIGN="TOP" MOREROWS="0"mss_gen_var_ind_list sect table ?selector? ?prefix1? ?prefix2? ?prefix3? ?sep? ?master_table? ?dbproc? COLNAME="2" VALIGN="TOP" MOREROWS="0"A special line is generated for each column that matches the selector.This line contains one if statement checking if the column should be NULL. If so, a dbcmd(....=NULL) is executed; otherwise, a dbfcmd(....,var) is executed. COLNAME="1" VALIGN="TOP" MOREROWS="0"mss_sqlpostfix_needed col COLNAME="2" VALIGN="TOP" MOREROWS="0"Appends a NOT NULL, NULL, and/or IDENTITY constraint to the column definitions in the generated file create_tables.sql. ID="42686"Specific Features of TERM1="Oracle"Oracle (E)SQLIntroductionOracle is one of the Relational Database Management Systems (RDBMS) supported by the persistent code generation of ObjectTeam. In this section, some special features of Oracle SQL and Oracle Embedded SQL (ESQL) are discussed.Note: Make sure Oracle is configured properly before using it in combination with ObjectTeam. Supported platformsPersistent code generation for Oracle applies to:n Unix-based platformsn PC PlatformsIn this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12877" TYPE="XREF-TEXTCOPY"SQL: Database Table Creation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'64COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12256" TYPE="XREF-TEXTCOPY"SQL: Database Procedure Creation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'65COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25953" TYPE="XREF-TEXTCOPY"ESQL Features Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'69COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40306" TYPE="XREF-TEXTCOPY"Specific Built-in Tcl Commands Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'70TERM1="Oracle" TERM2="SQL features"TERM1="SQL generation" TERM2="for Oracle"ID="12877"SQL: Database Table Creation Features'When using Oracle, you should be aware of the following notes regarding the generation of table definitions in ObjectTeam:n Column constraints can be added to column definitions.n Table constraints can be added to table definitions.n The PRIMARY KEY constraint is generated as part of the table definition.n The ALTER TABLE statement is generated to add FOREIGN KEY constraints.n As column and table constraints are included in the column and table definitions respectively, no PL/SQL code is generated to check on column and table constraints. The database engine enforces these constraints.n Similarly, no PL/SQL is generated for referential integrity constraints that are enforced by the database engine through FOREIGN KEY constraints.ID="12256"SQL: Database Procedure CreationStored TERM1="procedures" TERM2="stored - in Oracle"proceduresOracle supports stored procedures. These procedures are written in PL/SQL and stored in the database. For every table definition that is generated, stored procedures are generated that handle the database operations delete, insert and update.The names of these stored procedures are:n pdel_table_name n pins_table_name n pupd_table_name PL/SQL procedures generally consist of a basic query, which can be preceded by referential integrity checks that are not enforced by the database engine. An example of a basic query is:DELETEFROM personWHERE p_number=numberReferential TERM1="referential integrity" TERM2="in Oracle"TERM1="Oracle" TERM2="referential integrity"Integrity (RI)To implement referential integrity that is not enforced by the database engine, ObjectTeam generates PL/SQL procedures. Referential integrity rules are obtained from the SQL Model (see the ObjectTeam Programming Interface Guide), where they are specified by links between tables. If a rule cannot be implemented, the procedure that should contain the rule is not generated and a warning message is issued. In that case, you have to implement the procedure manually.For a number of rules checked during the delete operation, all fields must be available. If such a rule occurs, the following code is generated:<definition of extra local variables>SELECT <nonkeys>INTO <extra local variables>FROM <table to delete from>WHERE <key=passed key>;Supported RI rulesOn the following pages, every referential integrity rule is briefly discussed:n Reject on not exist expkey in detail. This rule cannot be implemented. Oracle prohibits the occurrence of foreign keys that do not exist in the master table. n Reject on not exist impkey in master. This rule is enforced by Oracle through FOREIGN KEY CONSTRAINT.n Reject on exist expkey in detail. This rule is enforced by Oracle (FOREIGN KEY CONSTRAINT). n Reject on exist impkey in master. This rule must be executed before the query. To check this rule, the entire row is needed. Because Oracle enforces the existence of a non-NULL imported key, you only need to test if the impkey is NULL. The following code is generated: IF <impkey> IS NOT NULL THENRAISE DUP_VAL_ON_INDEX;END IF;In the case of an update, you test if the old impkey is not NULL. This means that for an update you need to fetch the old row. n Reject on last impkey in current table. This rule needs the entire row and is checked before the query. The following code is generated: BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECLAREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INT;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SELECTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'COUNT(*)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FROMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<currentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'table>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHEREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<table.impkeyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'row.impkey>;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RAISEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DUP_VAL_ON_INDEX;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IF;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'END;END;n Reject on last impkey in master. This rule is implemented in the same way as in the Reject on exist impkey in master rule.n Insert in master impkey. The following code is generated: BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECLAREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INT;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SELECTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'COUNT(*)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FROMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<currentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'table>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHEREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<table.impkeyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'row.impkey>;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INSERTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<currentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'table>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VALUESname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<values>;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IF;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'END;END;To process this rule, non-key columns in the master table must be nullable. This cannot be checked during generation, but Oracle will give a runtime error. Besides, this cascade-insert is an operation that is subject to other referential integrity rules. The following rules are applicable for insert: - reject on not exist expkey in detail As already mentioned, it is not possible to support this operation. - reject on exist impkey in master This is handled by Oracle.- insert in master impkey This action can only be supported if the impkey is equal to the key. If this is not the case, it will result in a runtime Oracle error. n Delete in detail expkey. This rule is forced through an ALTER TABLE statement. Oracle will take care of the rest. ALTER TABLE <master>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT <constraint name>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FOREIGN KEY <foreign key> REFERENCES <detail> ON DELETE CASCADE;Using ON DELETE CASCADE statements, a loop of cascade deletes may occur. If a loop is detected during generation, a warning message is given and no ON DELETE CASCADE statements are generated for these links. n Delete in master impkey. This is a special case: the rule should be executed after the query, otherwise references from the detail to the master may still exist. For this rule, the entire tuple is needed. The following code is generated: DELETEFROM <master>WHERE <key = master.impkey>;n Update in detail expkey. Updating of key values is not supported.n Nullify expkey in detail. This rule is executed in the exception block. The following code is generated: UPDATE <detail>SET <expkey> = NULLWHERE <key = detail.expkey>;TERM1="Oracle" TERM2="ESQL features"TERM1="ESQL generation" TERM2="for Oracle"ID="25953"ESQL FeaturesTERM1="Pro*C 2.0"Pro*C 2.0The ESQL code generated for the Oracle target can only be used with Pro*C version 2.0. The generated code does not work with earlier versions. Fields from structsIn Oracle ESQL, no fields from structs can be passed to queries. To solve this, the code generator generates a dummy pointer for each field in a struct it needs.Retrieving character stringsWhen character strings are retrieved, Oracle determines the length of the destination string by calling strlen(). The destination buffer is padded with spaces if the result string has less characters than the destination buffer. To avoid this, character strings are retrieved in an Oracle VARCHAR struct and then copied to the destination pointer.TERM1="database" TERM2="accessing - in Oracle"Database passwordCalls to stored procedures are made from within the generated Embedded SQL. The Oracle preprocessor needs to connect to the target database to check if such a call is valid. Therefore, schema_name/password must be passed to the Oracle preprocessor. The user can do this by passing the password to the make command, for example:TERM1="make PASSWORD" TERM2="in Oracle"make PASSWORD=my_passwordGenerated ESQL filesThe following files are generated in your user environment by the ESQL generator:TERM1="Tcl commands" TERM2="Oracle specific built-in"ID="40306"Specific Built-in Tcl CommandsIntroductionA number of built-in Tcl commands specific to Oracle SQL are available:is_sequenceTERM1="is_sequence" TERM2="Oracle-specific built-in Tcl command"TERM1="Oracle" TERM2="built-in commands"Returns 1 if the type is an Oracle sequence, a 0 if it is not. Returns status.is_sequence type get_ora_type_4glReturns the 4gl type for a column. If there is a sequence type, it will be mapped to NUMBER. Returns a stringget_ora_type_4gl column gen_ora_checkTERM1="get_ora_type_4gl" TERM2="Oracle-specific built-in Tcl command"TERM1="Oracle" TERM2="built-in commands"Generates$prefixCHECK(<constraint for $object>)if object has a constraint. The default for prefix is an empty string.gen_ora_check section object ?prefix? gen_ora_col_defTERM1="get_ora_type_4gl" TERM2="Oracle-specific built-in Tcl command"TERM1="Oracle" TERM2="built-in commands"Generates column definitions for all columns in table that meet the selector criterion.gen_ora_col_def section table selector gen_ora_prim_key_defTERM1="get_ora_type_4gl" TERM2="Oracle-specific built-in Tcl command"TERM1="Oracle" TERM2="built-in commands"Generates the primary key definition for a table.gen_ora_prim_key_def section table gen_ora_tbl_defTERM1="get_ora_type_4gl" TERM2="Oracle-specific built-in Tcl command"TERM1="Oracle" TERM2="built-in commands"Generates column definitions, the table constraint and the primary key definition for table.gen_ora_tbl_def section table gen_ora_for_key_defTERM1="get_ora_type_4gl" TERM2="Oracle-specific built-in Tcl command"TERM1="Oracle" TERM2="built-in commands"Generates foreign key definitions for table.gen_ora_for_key_def section table ID="17338"Specific Features of TERM1="Sybase"Sybase (E)SQLIntroductionSybase 10.0 is one of the Relational Database Management Systems (RDBMS) supported by the persistent code generation of ObjectTeam. In this section, some special features of Sybase SQL and ESQL are discussed.Note: Make sure Sybase is configured properly before using it in combination with ObjectTeam. Supported platformsPersistent code generation for Sybase applies to:n Unix-based platformsn PC platformsIn this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12731" TYPE="XREF-TEXTCOPY"SQL: Database Table Creation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'72COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34313" TYPE="XREF-TEXTCOPY"SQL: Database Procedure Creation Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'73COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13679" TYPE="XREF-TEXTCOPY"ESQL Features Dname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'77TERM1="Sybase" TERM2="SQL features"TERM1="SQL generation" TERM2="for Sybase"ID="12731"SQL: Database Table CreationFeaturesWhen using Sybase, you should be aware of the following notes regarding the generation of table definitions in ObjectTeam:n Column constraints can be added to column definitions.n Table constraints can be added to table definitions.n The PRIMARY KEY constraint is generated as part of the table definition. n In the create_tables.sql script, ALTER TABLE statements are generated to add the FOREIGN KEY constraints. n No Transact-SQL code is generated to check on column and table constraints. Because the column and table constraints are included in the column and table definition, the database engine will enforce these constraints. n No Transact-SQL code is generated for referential integrity constraints that are enforced by the database engine (through FOREIGN KEY constraints).Numbering TERM1="key fields" TERM2="numbering - in Sybase"TERM1="identity" TERM2="standard type for Sybase"key fields (identify)Identity columns in Sybase can be used for the automatic generation of numbers for key fields. ObjectTeam offers the standard type identity to support this feature.During code generation, the SQL generator translates the standard type identity into IDENTITY if it is applied to a column that is not imported from another table. Whenever a new tuple is inserted in the database, this identity is used to generate the value of the associated database column. If applied to a column that is imported from another table, the standard type identity is translated into the NUMERIC type. Each table in a database can have one Identity column. Identity columns cannot be updated and do not allow NULLs. ID="34313"SQL: Database Procedure CreationStored TERM1="procedures" TERM2="stored - in Sybase"proceduresSybase supports stored procedures. These procedures are written in Transact-SQL and stored in the database. For every table definition that is generated, stored procedures are generated that handle the database operations delete, insert and update.The names of these stored procedures are:n pdel_table_name n pins_table_name n pupd_table_name Transact-SQL procedures generally consist of a basic query, which can be preceded by referential integrity checks that are not enforced by the database engine. An example of a basic query is:DELETEFROM personWHERE p_number = numberReferential TERM1="referential integrity" TERM2="in Sybase"TERM1="Sybase" TERM2="referential integrity"Integrity (RI)To implement referential integrity that is not enforced by the database engine, ObjectTeam generates Transact-SQL procedures. Referential integrity rules are obtained from the SQL Model (see the ObjectTeam Programming Interface Guide), where they are specified by links between tables. If a rule cannot be implemented, the procedure that should contain the rule is not generated and a warning message is issued. In that case, you have to implement the procedure manually.For a number of rules checked during the delete operation, all fields must be available. If such a rule occurs, the following code is generated:<definition of extra local variables>SELECTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<extra local variable_1> = <nonkey_1>,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<extra local variable_2> = <nonkey_2>, ...FROM <table to delete from>WHERE <key = passed key>Supported RI rules On the following pages, every referential integrity rule is briefly discussed:n Reject on not exist expkey in detail. This rule cannot be implemented. Sybase prohibits the occurrence of foreign keys that do not exist in the master table.n Reject on not exist impkey in master. This rule is enforced by Sybase (FOREIGN KEY CONSTRAINT). n Reject on exist expkey in detail. This rule is enforced by Sybase (FOREIGN KEY CONSTRAINT). n Reject on exist impkey in master. This rule must be executed before the query. To check this rule, the entire row is needed. Because Sybase enforces the existence of an imported key with nullability of NOT NULL, the code generator only needs to test if the impkey is NULL. The following code is generated: IF <impkey> IS NOT NULLBEGIN RAISEERROR 99998 "Referential integrity violated"ENDIn case of an update, the code generator tests if the old impkey is NOT NULL.n Reject on last impkey in current table. This rule needs the entire row and is checked before the query. The following code is generated: BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECLAREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SELECTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'COUNT(*)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FROMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<currentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'table>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHEREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<table.impkeyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'row.impkey>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(@countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RAISEERRORname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'99997name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Referentialname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'integrityname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'violated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDENDn Reject on last impkey in master. This rule is implemented in the same way as the Reject on exist impkey in master rule.n Insert in master impkey. The following code is generated: BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECLAREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SELECTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'COUNT(*)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FROMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<currentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'table>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHEREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<table.impkeyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'row.impkey>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(@countername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pins_<currentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'table>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<values>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDENDThis rule can only be processed when non-key columns in the master table are nullable. This cannot be checked during generation, but Sybase will issue a runtime error if they are not.Moreover, this cascade-insert operation is subject to other RI rules as well. The following rules are applicable for the insert operation: - reject on not exist expkey in detail As already mentioned, it is not possible to support this operation. - reject on exist impkey in master This is handled by Sybase. - insert in master impkey This action is only supported if the impkey is equal to the key. If this is not the case, it will result in a runtime Sybase error. n Delete in detail expkey. This rule is executed prior to the deletion of the master. The following code is generated: BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<definitionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'localname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECLAREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<detail>_Crsrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CURSORname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FORname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SELECTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<detail.key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FROMname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<detail>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHEREname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<detail.impkeyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'master.key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'OPENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<detail>_Crsrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FETCHname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<detail>_Crsrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<localname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHILEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(@@sqlstatusname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'EXECname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pdel_<detail>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<localname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FETCHname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<detail>_Crsrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<localname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'key>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CLOSEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<detail>_CrsrENDn Delete in master impkey. This is a special case: the rule should be executed after the query, otherwise references from the detail to the master may still exist. For this rule, the entire tuple is needed. The following code is generated: DELETEFROM <master>WHERE <key = master.impkey>n Update in detail expkey. Updating of key values is not supported. n Nullify expkey in detail. This rule is executed before the query. The following code is generated: UPDATE <detail>SET <expkey> = NULLWHERE <key = detail.expkey>TERM1="Sybase" TERM2="ESQL features"TERM1="ESQL generation" TERM2="for Sybase"ID="13679"ESQL FeaturesGenerated ESQL filesThe following files are generated in your user environment by the persistent code generator:Runtime TERM1="Sybase" TERM2="runtime environment variables"featuresThe executable isql is used by ObjectTeam to create, delete and fill databases. On PC platforms, isql is invoked with the argument -J.To be able to execute an application that was compiled to work with a Sybase database, the following environment variables must be set properly:n TERM1="SYBASE" TERM2="runtime environment variable for Sybase"SYBASE. The path to the Sybase directory, for example: /usr/sybase or c:\sql10 n TERM1="DSQUERY" TERM2="runtime environment variable for Sybase"DSQUERY. The name of the server your database runs on.n TERM1="DBPASSWD" TERM2="runtime environment variable for Sybase"DBPASSWD. The password required to connect to the database.n TERM1="DBUSERNAME" TERM2="runtime environment variable for Sybase"DBUSERNAME (PC platforms only). The name of the user as whom you connect to the database. This variable is only needed when you want to connect to the database under a different user name as specified by the variable USERNAME.n TERM1="USERNAME" TERM2="runtime environment variable for Sybase"USERNAME (PC platforms only). The name of the user as whom you connect to the database.Appendix E Customizing Persistent ID="13285"C++ Code GenerationTERM1="persistent code generation"TYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++IntroductionThis chapter contains an overview of the areas in ObjectTeam code generation that can be customized and configured.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22291" TYPE="XREF-TEXTCOPY"How Tcl is Used in Code Generation Ename='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'80COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15250" TYPE="XREF-TEXTCOPY"Customizing Tcl Scripts Used for Code Generation Ename='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'83COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14052" TYPE="XREF-TEXTCOPY"Customizing Data Types Ename='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'87COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11865" TYPE="XREF-TEXTCOPY"Customizing Referential Integrity Policies Ename='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'94ID="22291"How Tcl is Used in Code GenerationID="37266"IntroductionThis entry focuses on the use of Tcl (Tool command language) in ObjectTeam. It does not provide an introduction to Tcl itself. If you want to familiarize yourself with Tcl, we recommend the following introductory book on Tcl:Ousterhout, John K. Tcl and the Tk Toolkit. (Reading, Massachusetts: Addison---Wesley Publishing Company, 1994)What is Tcl?Tcl (Tool Command Language) is an interpretive command language that resembles C. By default all arguments are passed as strings. These strings are C-compatible. Tcl consists of:n A library of C proceduresn An interpretern The Tcl coreThe Tcl core is a simple language that can be completely programmed. It provides a collection of commonly used features such as:n Variablesn Conditional and looping commandsn Proceduresn Associative arraysn Listsn Expressionsn File manipulationHow is Tcl used in the code generation?When the ObjectTeam shell executes a Tcl script file, it translates information from the repository, internal models, and TERM1="code generation model" TERM2="and Tcl"TERM1="model" TERM2="code generation"Code Generation models into source code. The following picture shows this process schematically:FILENAME="00563.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/cpp/cmz611.fm5.mif"Types of Tcl usedIn the procedures of the default Tcl script files used for code generation, different levels of Tcl are used:COLS="2"COLNAME="1" COLWIDTH="168p"COLNAME="2" COLWIDTH="280p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"descriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Standard TclCOLNAME="2" VALIGN="TOP" MOREROWS="0"Refer to general Tcl documentation for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to other Tcl proceduresCOLNAME="2" VALIGN="TOP" MOREROWS="0"These procedures are stored in other Tcl files. They become available when the file in which the procedure is defined is sourced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to methods of classes in the ObjectTeam modelsCOLNAME="2" VALIGN="TOP" MOREROWS="0"The classes of the ObjectTeam models (including the OOPL model and SQL model) are documented in ObjectTeam Repository Interface Guide. COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in ClassesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Besides methods of classes belonging to the ObjectTeam models, methods belonging to built-in classes can also be called. Refer to the ObjectTeam Repository Interface Guide for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in ObjectTeam commandsCOLNAME="2" VALIGN="TOP" MOREROWS="0"These commands are built-in in otsh. You can use these commands, but you cannot edit or view them like Tcl procedures. Refer to the ObjectTeam Repository Interface Guide for details. ID="35220"Which Tcl files are used?Tcl procedures used for code generation are stored in procedural Tcl script files. During code generation, these scripts are interpreted and executed by the ObjectTeam Shell (otsh). When you select Utilities | Generate C++ in the Browser on Implementation System level, otsh interprets the procedures in the Tcl file TERM1="import.tcl"import.tcl. These procedures use procedures defined in other Tcl scripts, and they also activate other Tcl script files.The Tcl files used for non-persistent and persistent code generation can be found in the following directories:COLS="3"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="90p"COLNAME="3" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Directory under M4_homeCOLNAME="2" VALIGN="TOP" MOREROWS="0"FileCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"legacy.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"Legacy file for 3.x compatibilityCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="gensqlomt.tcl"gensqlomt.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"OMT specific target independent gensql proceduresCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="wmt_util.tcl"wmt_util.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectTeam TCL utilitiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="tdbop.tcl"tdbop.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"Perform TDB OperationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"modules\pers-cplusplus\tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"all filesCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"modules\pers-cpp-inf\tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"all filesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Tcl files for generating persistent code for Informix databasesCOLNAME="1" VALIGN="TOP" MOREROWS="0"modules\pers-cpp-ing\tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"all filesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Tcl files for generating persistent code for CA-Ingres databasesCOLNAME="1" VALIGN="TOP" MOREROWS="0"modules\pers-cpp-mss\tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"all filesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Tcl files for generating persistent code for Microsoft SQL Server databasesCOLNAME="1" VALIGN="TOP" MOREROWS="0"modules\pers-cpp-ora\tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"all filesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Tcl files for generating persistent code for Oracle databasesCOLNAME="1" VALIGN="TOP" MOREROWS="0"modules\pers-cpp-syb\tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"all filesCOLNAME="3" VALIGN="TOP" MOREROWS="0"Tcl files for generating persistent code for Sybase databasesID="15250"ID="15580"Customizing Tcl Scripts Used for TERM1="code generation" TERM2="adapting"Code GenerationUser-defined Tcl filesBecause of the open character of Tcl, you are free to rewrite the Tcl procedures of the Tcl scripts, if you feel like adapting the code generation to your specific needs and circumstances. You can include your own properties, control flow keywords and section keywords in the code generation this way. You can even build your own code generator by creating your own Tcl scripts. Which Tcl files can you customizeTo customize a Tcl script, you must create a user-defined customization file. These are the ObjectTeam Tcl script files that you can extend with a user-defined customization file:n TERM1="check.tcl"check.tcln TERM1="gencpp.tcl"gencpp.tclThe most obvious way to extend these default script is by creating a customization file u_fileName.tcl. If you want to overrule any of the Tcl procedures in the following default Tcl files, Cayenne recommends that you include them in the customization file TERM1="u_gencpp.tcl"u_gencpp.tcl as well:n TERM1="cpp_disp.tcl"cpp_disp.tcl n TERM1="cpp_funcs.tcl"cpp_funcs.tcl n TERM1="cpp_regen.tcl"cpp_regen.tcl n TERM1="gen_db_fnc.tcl"gen_db_fnc.tcl The file TERM1="check_conf.tcl"check_conf.tcl contains several configurable procedures like the definition of DBObject. These procedures can also be redefined using a customization file calledTERM1="u_check.tcl" u_check.tcl.ID="37212"Where to Store User-defined Tcl ProceduresThe Tcl script files used for the default code generation are stored in the file system. They can be found in the following directories under M4_home:n tcln modules\pers-cplusplus\tcl n the tcl directory in the module directory of type PersistentCppn the tcl directory in the module directory of type DevelEnvn the tcl directory in the module directory of type PersCppClassLibIf you want to adapt the default code generation, you can edit the Tcl files in this directory, but it is better to leave the original files untouched. You can make otsh use user-defined files by: n Storing Tcl files as customization file in the repositoryn Storing Tcl files as External File Versions in the same System as where the code is generatedn Storing Tcl files as External File Versions in a System called Tcln Creating and activating a user-defined ObjectTeam module.You can overrule existing Tcl files or you can create new Tcl files with new user-defined Tcl procedures and thus extending the default code generation. Each of the storing methods listed above are discussed below.Storing Tcl files as customization file in the repositoryThe Browser level in which you store the customization file determines the extent to which the Tcl file must be used by otsh. A customization file stored on System level for instance, won't affect the code generation for another system in the same Configuration. However, a customization file stored on Phase level will, provided there are no Tcl customization files of the same name stored on Implementation System level.The Tcl file which is stored the closest in hierarchy to the current level (for example, System level) overrules all higher customization files by the same name.Σ To store a Tcl file:1 Make the Browser level of your choice the current Browser level.2 Check your access rights to see if you are allowed to create customization files on the current Browser level.3 Open the <customization files> Browser object.<customization files> is now the current Browser object.4 Select File | New | Customization File Version... from the menu bar.5 Enter a name for the tcl file (include the extension .tcl).- If you want to replace an existing file, enter the exact name of the default Tcl file you want to replace (for example, cpp_regen.tcl). The default Tcl file of the corporate level will be ignored in that case.- If you want to create a customization file in which you either redefine procedures from the default file or extend the default file with new procedures, enter the name of the default file with the prefix u_ (for example, u_gencpp.tcl). The default Tcl file on corporate level will be sourced and will be complemented by the customization file.6 Open the new customization file.7 Enter the required Tcl code.If you are replacing an existing default Tcl file, you might include the contents of the default Tcl file first and make all the necessary changes later.8 Save the customization file.The next time you generate code, the new Tcl customization file is sourced by otsh.Storing Tcl files in the same System as where the code is generatedOne of the available file types on Implementation system level is Tcl. You can create new files of this type and define user-defined Tcl procedures in such a file. During code generation, otsh sources all files of the type Tcl in the current system, regardless of their name.Σ To create a new file of type Tcl:1 Open the Implementation System.2 Select File | New | Tcl.3 Enter a name for the tcl file (without the extension .tcl).4 Edit and save the new Tcl file.The next time you generate code, the new Tcl file is sourced by otsh.Storing Tcl files in a System TclIf you don't want to store user-defined Tcl files in the same system in which your code is generated, you can decide to create a system called Tcl and store your user-defined Tcl files in that system. Any Tcl file that is defined in such a system is sourced during code generation. You can use this mechanism for new user-defined Tcl files or for user-defined Tcl files that are meant to replace existing ones.Σ To create a new system named Tcl, and a new file of Tcl in that system:1 Make sure the Browser is on Implementation level.2 Select File | New | System Version.3 Enter Tcl as system name (be sure to use the case shown here).4 Open the system Tcl.5 Select File | New | Tcl.6 Enter a name for the Tcl file (without the extension .tcl).You can enter the name of an existing Tcl file used for code generation (e.g. cpp_regen.tcl) or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.7 Edit and save the new Tcl file.The next time you generate code, the new Tcl file is sourced by otsh.Creating a user-defined moduleBesides storing customized Tcl files as customization files or as External File Version, you can create a user-defined ObjectTeam module. You can then copy over all the files from the corresponding default module directory provided by Cayenne to your user-defined module, and edit the customization files directly. Finally, you activate it.Note: In a user-defined module, you cannot extend the default files with your own procedures or redefine existing procedures through an u_ *.tcl file. You have to edit the Tcl files directly.TERM1="Tcl" TERM2="script files, testing"Testing Tcl filesIf you want to test a customized Tcl file before you insert it into the repository of ObjectTeam, you can decide to create the Tcl file in your file system and feed it to otsh outside the ObjectTeam environment. See the ObjectTeam Customization Guide for details on how to start otsh from the command line.When the Tcl file has reached its final state, you can decide to incorporate it in the repository, as described above. ID="14052"Customizing Data TERM1="data type" TERM2="customizing"TypesStandard data typesIn the Object Design phase you can use standard types to define data types of data attributes and parameters. All the valid standard types are stored in the following file:M4_home\modules\pers-cpp-RDBMS\etc\TERM1="lang_types"lang_types.lang_typesThis file also contains minimum and maximum values for the standard types.Whenever you generate code or check a diagram's contents, the data types used in the diagram are checked against the data types in the standard types file. This checking is always carried out, even when you don't generate persistent code.During code generation, the standard types are mapped to:n C++ types (see REFID="37444" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Ename='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'90)n SQL types (REFID="23446" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Ename='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'92)What does the stand_types file look like?Here is an example of a stand_types.stand_types file for the Generic package. The columns Min 1, Max 1 and Min 2 and Max 2 can be used to specify constraints on array size or format values of the standard types.#---------------------------------------------------------------------------##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Copyrightname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(c)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1992-1996name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'byname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cayenne Software, Inc.##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'softwarename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'furnishedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'undername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'licensename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'usedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'onlyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'in#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'accordancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'withname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'termsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'suchname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'licensename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'withname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'inclusionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'of#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'abovename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'copyrightname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'notice.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'softwarename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'orname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'anyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'othername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'copiesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thereof#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'notname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'providedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'orname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'otherwisename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'madename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'availablename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'toname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'anyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'othername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person.#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Noname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'titlename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'toname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ownershipname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'softwarename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'herebyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'transferred.##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Thename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'informationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'inname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'softwarename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'subjectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'toname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'changename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'withoutname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'notice#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'shouldname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'notname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'construedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'asname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'commitmentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'byname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cayenne Software, Inc.##--------------------------------------------------------------------------##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@(#)stand_typesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1.4#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Originalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'7-1992#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Descriptionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Configurationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'forname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'standardname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'GENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'datatypes#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'givenname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'valuesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'arename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'examples##--------------------------------------------------------------------------##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@(#)stand_typesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1.4\t12/24/93name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Copyrightname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1992-1996 Cayenne Software##--------------------------------------------------------------------------#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'StandardTypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Minname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Maxname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Minname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Maxname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2#--------------------------------------------------------------------------charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32767name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32767name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0varcharname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|254name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32decimalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32double_precisionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|13name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|13name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0unsignedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0longname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_longname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0numericname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32realname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0smallintname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0genptrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0notypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0flagname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0flag_tname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0object_idname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0enumname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0ID="18910"Customizing the default stand_types file You can create a customization file stand_types.stand_types if you want to extend or change the default stand_types.stand_types file. You can do that by selecting File | New on the Browser level of your choice with the pseudo object <customization files> as the current object. The name of the new customization file must be stand_types.stand_types. After you have created the file, you can edit it and save it.The next time you generate code, your user-defined customization file is evaluated instead of the customization file on Corporate level. The nearest customization file overrules all other customization files that might be defined on higher levels. So if you have, for instance, a user-defined customization file stand_types.stand_types defined on Configuration level, Project level, and System level, the one on System level overrules all the other ones.Customizing TERM1="C++ types"ID="37444"C++ TypesMapping standard types to C++ typesC++ types are data types that are supported by the ESQLC++ implementation of the Relational Database System (RDBMS) used. If you are not using an RDBMS, the standard types are mapped to standard C++ types.The mapping is taken care of by the following customization file:M4_home\modules\pers-cpp-RDBMS\etc\TERM1="lang_types"lang_types.lang_typesWhat does the lang_types file look like?Here is an example of a stand_types.stand_types file for the Informix package. The first column in this file lists the standard types. These must be consistent with the types in the stand_types.stand_types file. The second column lists the C types the standard types must be mapped upon. In the column range the type of brackets used in the target language is indicated.#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@(#)lang_typesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1.5name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(1.7)#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Originalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'7-1992#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Descriptionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Translatesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'standardname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intoname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'C++name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'types##---------------------------------------------------------------------##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@(#)lang_typesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1.5\t24name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1993name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Copyrightname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1996name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cayenne Softwarename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'##---------------------------------------------------------------------#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Standardname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Informixname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'range#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|#---------------------------------------------------------------------bytename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'loc_tname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[]uns_charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'unsignedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[]datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'longname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_year_to_dayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'char[30]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_hour_to_minutename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'char[30]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_year_to_fractionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'char[30]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*decimalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*double_precisionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*uns_shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'unsignedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'longname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*Customizing the default lang_types file You can also create customization files for the lang_types.lang_types file. The way to do that is analogous to creating a customization file for the stand_types.stand_types file (see REFID="18910" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Ename='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'88).Customizing TERM1="SQL types"ID="23446"SQL TypesMapping standard types to SQL typesSQL types are data types that are supported by the SQL implementation of the RDBMS used. If you are not using an RDBMS, the standard types are mapped to ANSI SQL types.The mapping is taken care of by the following configuration file:M4_home\modules\pers-cpp-RDBMS\etc\db_types.db_typesWhat does the db_types file look like?Here is an example of a db_types.db_types file for the Informix package. The first column in this file lists the standard types. These must be consistent with the types in the stand_types.stand_types file. The second column lists the SQL types the standard types must be mapped upon. In the column has range the type of brackets used in the target language is indicated.#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@(#)db_typesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1.2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(1.9)#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Originalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Junename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'6,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1992#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Descriptionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Configurationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'usedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'forname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mapping#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'standardname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'datatypesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'toname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Informixname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4GL(SQL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'datatypes##---------------------------------------------------------------------------##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@(#)db_typesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1.2\t29name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Julname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1993name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Copyrightname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1990,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1992name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cayenne Software##---------------------------------------------------------------------------#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'standardname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Informixname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'range?#---------------------------------------------------------------------------bytename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BYTEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'somename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'examplesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEdatetime_year_to_dayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'YEARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_hour_to_minutename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HOURname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MINUTEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_year_to_fractionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'YEARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FRACTIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()decimalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECIMALname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()double_precisionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DOUBLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRECISIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FLOATname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*Customizing the default db_types file You can also create customization files for the db_types.db_types file. The way to do that is analogous to creating a customization file for the stand_types.stand_types file (see REFID="18910" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Ename='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'88).ID="11865"Customizing TERM1="referential integrity" TERM2="SQL generation"Referential Integrity PoliciesSQL rules fileObjectTeam offers the possibility to incorporate rules for referential integrity checking in the database. The default Referential Integrity rules are specified in the following customization file:M4_home\etc\TERM1="sqlrules"sqlrules In this file, a rule is specified for every type of association, aggregation and generalization. The rules, specified in the last column of the file, refer to Tcl procedures. During persistent code generation, the Tcl procedure specified for the specific type of relation is called. The SQL code that is generated by this procedure is inserted in the SQL script create_procs. See the ObjectTeam Repository Interface Guide for an overview of the mapping of the different types of relations to the SQL model.What does the sqlrules file look like?Here is an example of the customization file sqlrules:COLS="9"COLNAME="1" COLWIDTH="64p"COLNAME="2" COLWIDTH="58p"COLNAME="3" COLWIDTH="60p"COLNAME="4" COLWIDTH="67p"COLNAME="5" COLWIDTH="67p"COLNAME="6" COLWIDTH="61p"COLNAME="7" COLWIDTH="67p"COLNAME="8" COLWIDTH="72p"COLNAME="9" COLWIDTH="103p"COLNAME="1" VALIGN="TOP" MOREROWS="0"#rela#tion#typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"operationCOLNAME="3" VALIGN="TOP" MOREROWS="0"table typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"mastertypeCOLNAME="5" VALIGN="TOP" MOREROWS="0"detailtypeCOLNAME="6" VALIGN="TOP" MOREROWS="0"sourcetypedetailCOLNAME="7" VALIGN="TOP" MOREROWS="0"policyCOLNAME="8" VALIGN="TOP" MOREROWS="0"allowedCOLNAME="9" VALIGN="TOP" MOREROWS="0"ruleCOLNAME="1" VALIGN="TOP" MOREROWS="0"#-----COLNAME="2" VALIGN="TOP" MOREROWS="0"------COLNAME="3" VALIGN="TOP" MOREROWS="0"------COLNAME="4" VALIGN="TOP" MOREROWS="0"-------COLNAME="5" VALIGN="TOP" MOREROWS="0"-------COLNAME="6" VALIGN="TOP" MOREROWS="0"------COLNAME="7" VALIGN="TOP" MOREROWS="0"-------COLNAME="8" VALIGN="TOP" MOREROWS="0"-------COLNAME="9" VALIGN="TOP" MOREROWS="0"-----------COLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"none COLNAME="8" VALIGN="TOP" MOREROWS="0"default COLNAME="9" VALIGN="TOP" MOREROWS="0"noneCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"restrict COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"rej_not_existCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"cascade COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"not_applicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"#-----COLNAME="2" VALIGN="TOP" MOREROWS="0"------COLNAME="3" VALIGN="TOP" MOREROWS="0"------COLNAME="4" VALIGN="TOP" MOREROWS="0"-------COLNAME="5" VALIGN="TOP" MOREROWS="0"-------COLNAME="6" VALIGN="TOP" MOREROWS="0"------COLNAME="7" VALIGN="TOP" MOREROWS="0"-------COLNAME="8" VALIGN="TOP" MOREROWS="0"-------COLNAME="9" VALIGN="TOP" MOREROWS="0"-----------COLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"none COLNAME="8" VALIGN="TOP" MOREROWS="0"default COLNAME="9" VALIGN="TOP" MOREROWS="0"noneCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"restrict COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"rej_not_existCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"cascade COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"not_applicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"#-----COLNAME="2" VALIGN="TOP" MOREROWS="0"------COLNAME="3" VALIGN="TOP" MOREROWS="0"------COLNAME="4" VALIGN="TOP" MOREROWS="0"-------COLNAME="5" VALIGN="TOP" MOREROWS="0"-------COLNAME="6" VALIGN="TOP" MOREROWS="0"------COLNAME="7" VALIGN="TOP" MOREROWS="0"-------COLNAME="8" VALIGN="TOP" MOREROWS="0"-------COLNAME="9" VALIGN="TOP" MOREROWS="0"-----------COLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"none COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"not_applicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"restrict COLNAME="8" VALIGN="TOP" MOREROWS="0"default COLNAME="9" VALIGN="TOP" MOREROWS="0"rej_not_existCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"cascade COLNAME="8" VALIGN="TOP" MOREROWS="0"yes COLNAME="9" VALIGN="TOP" MOREROWS="0"ins_in_masterCOLNAME="1" VALIGN="TOP" MOREROWS="0"#-----COLNAME="2" VALIGN="TOP" MOREROWS="0"------COLNAME="3" VALIGN="TOP" MOREROWS="0"------COLNAME="4" VALIGN="TOP" MOREROWS="0"-------COLNAME="5" VALIGN="TOP" MOREROWS="0"-------COLNAME="6" VALIGN="TOP" MOREROWS="0"------COLNAME="7" VALIGN="TOP" MOREROWS="0"-------COLNAME="8" VALIGN="TOP" MOREROWS="0"-------COLNAME="9" VALIGN="TOP" MOREROWS="0"-----------COLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"none COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"noneCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"restrict COLNAME="8" VALIGN="TOP" MOREROWS="0"default COLNAME="9" VALIGN="TOP" MOREROWS="0"rej_not_existCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"insert COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"cascade COLNAME="8" VALIGN="TOP" MOREROWS="0"yes COLNAME="9" VALIGN="TOP" MOREROWS="0"ins_in_masterCOLNAME="1" VALIGN="TOP" MOREROWS="0"#-----COLNAME="2" VALIGN="TOP" MOREROWS="0"------COLNAME="3" VALIGN="TOP" MOREROWS="0"------COLNAME="4" VALIGN="TOP" MOREROWS="0"-------COLNAME="5" VALIGN="TOP" MOREROWS="0"-------COLNAME="6" VALIGN="TOP" MOREROWS="0"------COLNAME="7" VALIGN="TOP" MOREROWS="0"-------COLNAME="8" VALIGN="TOP" MOREROWS="0"-------COLNAME="9" VALIGN="TOP" MOREROWS="0"-----------COLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"none COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"noneCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"restrict COLNAME="8" VALIGN="TOP" MOREROWS="0"default COLNAME="9" VALIGN="TOP" MOREROWS="0"rej_existCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"nullify COLNAME="8" VALIGN="TOP" MOREROWS="0"yes COLNAME="9" VALIGN="TOP" MOREROWS="0"nullify_detailCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"cascade COLNAME="8" VALIGN="TOP" MOREROWS="0"yes COLNAME="9" VALIGN="TOP" MOREROWS="0"upd_in_detailCOLNAME="1" VALIGN="TOP" MOREROWS="0"#-----COLNAME="2" VALIGN="TOP" MOREROWS="0"------COLNAME="3" VALIGN="TOP" MOREROWS="0"------COLNAME="4" VALIGN="TOP" MOREROWS="0"-------COLNAME="5" VALIGN="TOP" MOREROWS="0"-------COLNAME="6" VALIGN="TOP" MOREROWS="0"------COLNAME="7" VALIGN="TOP" MOREROWS="0"-------COLNAME="8" VALIGN="TOP" MOREROWS="0"-------COLNAME="9" VALIGN="TOP" MOREROWS="0"-----------COLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"none COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"noneCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"restrict COLNAME="8" VALIGN="TOP" MOREROWS="0"default COLNAME="9" VALIGN="TOP" MOREROWS="0"rej_existCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"nullify COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"not_applicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"master COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"relation COLNAME="7" VALIGN="TOP" MOREROWS="0"cascade COLNAME="8" VALIGN="TOP" MOREROWS="0"yes COLNAME="9" VALIGN="TOP" MOREROWS="0"upd_in_detailCOLNAME="1" VALIGN="TOP" MOREROWS="0"#-----COLNAME="2" VALIGN="TOP" MOREROWS="0"------COLNAME="3" VALIGN="TOP" MOREROWS="0"------COLNAME="4" VALIGN="TOP" MOREROWS="0"-------COLNAME="5" VALIGN="TOP" MOREROWS="0"-------COLNAME="6" VALIGN="TOP" MOREROWS="0"------COLNAME="7" VALIGN="TOP" MOREROWS="0"-------COLNAME="8" VALIGN="TOP" MOREROWS="0"-------COLNAME="9" VALIGN="TOP" MOREROWS="0"-----------COLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"none COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"not_applicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"restrict COLNAME="8" VALIGN="TOP" MOREROWS="0"default COLNAME="9" VALIGN="TOP" MOREROWS="0"rej_not_existCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"update COLNAME="3" VALIGN="TOP" MOREROWS="0"detail COLNAME="4" VALIGN="TOP" MOREROWS="0"optional COLNAME="5" VALIGN="TOP" MOREROWS="0"optional COLNAME="6" VALIGN="TOP" MOREROWS="0"table COLNAME="7" VALIGN="TOP" MOREROWS="0"nullify COLNAME="8" VALIGN="TOP" MOREROWS="0"no COLNAME="9" VALIGN="TOP" MOREROWS="0"not_applicableWhat does the sqlrules file doIn the SQL rules file, a rule is specified for every combination of:n relation type:The relation type is determined by the (combination of) the master type and the detail type:- associative: when the detail type is associative- optional: when both the master type and the detail type are optional- total: when the detail type is not associative and either the master type or the detail type is total- supersubtype: when the master type is supertype and the detail type is subtypen database operation:insert, update, or delete n table type:master or detail n master type:optional, total (i.e. mandatory), or supertype n detail type:optional, total (i.e. mandatory), subtype, or associative n TERM1="policies" TERM2="for referential integrity"TERM1="referential integrity" TERM2="policies"policy:- NoneTERM1="none" TERM2="policy for referential integrity": no checks are carried out when the database operation is executed.- CascadeTERM1="cascade" TERM2="policy for referential integrity": referential integrity is maintained by propagating the database operation across the association. The most obvious use is for delete.- RestrictTERM1="restrict" TERM2="policy for referential integrity": the database operation is cancelled if a problem regarding referential integrity occurs.- NullifyTERM1="nullify" TERM2="policy for referential integrity": when an object is removed, the foreign key value is changed to NULL, indicating that no link exists. This policy cannot be selected for insert.n allowed:- default: whether or not referential integrity is checked for this type of relation is determined by what is indicated at the top of the SQL rules file: on or off- yes: referential integrity is checked- no: referential integrity is not checkedn rule:- rej_not_exist: this rule is only valid for the database operations insert and update and for the policy Restrict. The database operation is cancelled if a tuple exports or imports keys and the tuple to which it export keys or from which it imports keys doesn't exist.- rej_exist: this rule is only valid for the database operations update and delete and for the policy Restrict. The database operation is cancelled if the tuple export or imports keys.- rej_last: this rule is only valid for the database operation delete and the table type is detail.- ins_in_master: this rule is only valid for the database operations insert and update and for the policy Cascade. If a tuple is inserted in the detail table and the corresponding keys do not exist in the master table, they are inserted in the master table.- upd_in_detail: this rule is only valid for the database operation update and for the policy Cascade. If keys in the master table are updated, the corresponding keys in the detail table are also updated.- del_in_detail: this rule is only valid for the database operations update and delete and for the policy Cascade. If a tuple in the master table is deleted, all the detail tuples are also deleted.- nullify_detail: this rule is only valid for the database operations delete and update, for the table type master, and for the policy Nullify. If a tuple in the master table is deleted, all the corresponding keys in the detail table are set to NULL.- none: no rule is executed.- not_applicable Customizing Referential Integrity globallyIf you want to change anything regarding Referential Integrity policies that must affect all relations of a particular type, you should create a customization file with the name sqlrules on the Browser level of your choice.You can create customization files on Project level, Configuration level, Phase level, and System level. These files are stored in the repository. The customization files on Corporate level are not stored in the repository, but in the etc directory under M4_home.The Tcl files that are used during code generation first check if there are any customization files present in the repository. If there aren't, the customization file from corporate level (i.e. the file stored in the etc directory under M4_home) is used. If the same customization file is stored on more than one Browser level, the file on the Browser level closest in hierarchy is evaluated.Customizing Referential Integrity locallyThe default policy for a particular type of relation is specified in the SQL rules file. For every type of relation a certain rule is defined. However, for individual associations, aggregations or generalizations, you can overrule the following settings from the sqlrules file:n The policy for a particular operation n Whether or not referential integrity must be checked You can do that in the Class Association Diagram by editing the properties of the association, aggregation, or generalization you want to overrule the default settings for. The following figure shows the Edit Properties dialog box that you would use:FILENAME="00564.unk" ORIGFILE="pics/prpriloc.gif" ORIGTYPE="X" ORIGDOC="../../sources/cpp/cmz611.fm5.mif"CORBA IDL Code Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Corba IDLAbout this manualThe ObjectTeam Code Generation Guide for CORBA IDL contains information specific to the CORBA IDL code generator. The code generator automates the process of generating CORBA IDL specifications from systems in the Object Design phase. This guide describes the mapping of the ObjectTeam model to CORBA IDL. Refer to the ObjectTeam Modeling Guide for general information about the code generation process.PrerequisitesThis guide is intended for experienced users of ObjectTeam and the analysis and design method it supports. Knowledge of CORBA IDL is also required. To customize or extend the capabilities of the CORBA IDL code generator, you must have a thorough understanding of the ObjectTeam Shell, the Object-Oriented Programming Language (OOPL) model structure, and the Tool Command Language (Tcl) commands.Chapter 1 Preparing ID="30937"Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for CORBA IDLIntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.Corba IDL module requiredThe ObjectTeam module CORBA IDL Code Generation provides the menu items, the properties and the Tcl code required to use the CORBA IDL Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="41422" TYPE="XREF-TEXTCOPY"Chapter 2, Generating CORBA IDL, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19276" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40198" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00565.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/corba/corbobjd.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="37761" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to CORBA IDL, describes how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 ID="41422"Generating CORBA IDLTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for CORBA IDLIntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details that not specified in the model.Prerequisitesn The ObjectTeam module CORBA IDL Code generation must be active from Object Design Phase and Implementation Phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="30937" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Steps in code generationThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate CORBA IDL files. During this step, ObjectTeam creates CORBA IDL specification files on System level in the Implementation phase.Note: System level in the Implementation phase is fundamentally different than System level in other phases. The System files in the Implementation phase are specification files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Edit the specification files, if necessaryNote: Any changes you make to the specification files will be lost when you regenerate. TERM1="code regeneration"TERM1="regeneration" TERM2="code"TERM1="otsh" TERM2="code regeneration"COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Using your ORB implementation, generate code. If necessary: correct the model, and regenerate the code files.Illustration of code generationThe following illustration shows how ObjectTeam generates code, including the names of the Tcl scripts that it uses. The CDs and CDMs shown at the top are in the Object Design phase.FILENAME="00566.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/corba/corbcodg.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15736" TYPE="XREF-TEXTCOPY"Introduction 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16679" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38108" TYPE="XREF-TEXTCOPY"Generating CORBA IDL Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37977" TYPE="XREF-TEXTCOPY"CORBA IDL Limitations 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7ID="15736"IntroductionA Brief Description of CORBA IDL The Object Management Group (OMG) developed specifications for interactions between distributed objects. These specifications are referred to as the Common Object Request Broker Architecture (CORBA). As part of its specifications, CORBA defines the Interface Definition Language (IDL). CORBA IDL describes an object's interface which enables objects to communicate their methods and attributes to other objects. This is done without individual objects needing to know each other's location or how they accomplish their tasks. Communication is handled by an Object Request Broker (ORB). ORBs negotiate requests (messages) between clients and servers and their related data sets. CORBA IDL is a separate language within the CORBA specification. Its lexical rules are similar to those of C++ with some new keywords added. Using CORBA IDL statements, you can define the kind of objects and their attributes and operations that your client uses or your server provides.Note: CORBA IDL only defines the interface to the objects. An implementation mapping between the interface and the actual object data and procedures is required. The ObjectTeam CORBA IDL code generator does not support this mapping.ID="16679"Components of Code GenerationCode generation resultsThe CORBA IDL code generator automatically generates CORBA IDL specifications for ObjectTeam systems. It interprets classes, associations, and generalization (inheritance) and translates them into the appropriate CORBA IDL constructs. One file is produced per system with a file extension of .idl.In contrast to the other ObjectTeam code generators, the CORBA IDL code generator produces only CORBA IDL specifications. To produce executable code, you normally compile the CORBA IDL specifications into a target language such as C++ or Java. Refer to your ORB vendor's documentation for information on mapping CORBA IDL to client or server objects.Regenerating specification filesThe ObjectTeam CORBA IDL code generator produces ASCII format CORBA IDL files. Do not edit these files since any edits you make will not be maintained. They are overwritten each time you generate code.Tcl scripts for code generationThe scripts written for code generation retrieve information from the code generation models, format this information and write the results to source code files. Code generation models are built from the CDs in the Object Design phase.The default TERM1="Tcl" TERM2="script files used for code generation"Tcl scripts used by otsh to generate CORBA IDL source code can be found under the M4_home/tcl directory tree. TERM1="Implementation" TERM2="importing systems"TERM1="importing" TERM2="in Implementation Phase"ID="38108"Generating CORBA IDL CodeResult of generatingWhen you generate code for a system in the Implementation phase, the code generator transforms the CDs and CDMs of the Object Design phase into CORBA IDL source files. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are CORBA IDL files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate code for systems on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate CORBA.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet.- Select Specific Systems to select the systems from the Object Design phase for which you want to generate code. You can select only systems for which no code has been generated yetObjectTeam opens a Monitor window for displaying log messages, then generates the source files.ID="10881"How to generate code on System levelΣ To generate code for a system, or selected system files on the System level:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate CORBA File.ObjectTeam opens a Monitor window for displaying log messages, then generates code for the files. The following illustration shows the Monitor window after generating code for a system that contains only one class.FILENAME="00567.unk" ORIGFILE="pics/imp_impl.gif" ORIGTYPE="X" ORIGDOC="../../sources/corba/corbcodg.fm5.mif"Location of the source filesSource files are stored in the repository as external files. They are also written to the user environment. (See the ObjectTeam Project Management Guide for more information about the user environment.)ID="37977"CORBA IDL LimitationsIntroductionThe objects and their characteristics specified in ObjectTeam do not always map exactly to the language of a particular ObjectTeam code generator.CORBA IDL code generation limitations Please note the following limitations of the CORBA IDL code generator. They are described in detail in the following chapter.n TypesObjectTeam only allows single-dimensioned arrays.n Mapping attributesAttributes must have either their Read Access or Write Access property set to Public to be placed in the generated CORBA IDL file. (Class and instance attributes are treated the same way.)n Mapping operationsOnly operations with a value of Public for their Method Access property are represented in the generated CORBA IDL file. (Class and instance operators are treated the same way.) Constructors are not represented in CORBA IDL, so they are ignored.n Mapping inheritanceCORBA IDL only permits inheritance with an Inheritance Access property value of Public.Although CORBA IDL has inheritance, it is illegal to overload a function in a derived class.n Union classesAlthough any enumerable type is allowed for the discriminator in CORBA IDL, ObjectTeam forces the discriminator to be of type long. There is no default case.n SequencesAlthough you can specify an optional second argument to indicate the sequence's size in CORBA IDL, there is no way to specify it in ObjectTeam. Appendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for CorbaCorba code generation propertiesThe following table lists the properties that effect Corba IDL code generation. These are available in the CD in the Object Design phase.Note: The asterisks next to certain property values indicate the values that must be selected to generate code.COLS="4"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="99p"COLNAME="3" COLWIDTH="117p"COLNAME="4" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateProtectedNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="13462" TYPE="XREF-TEXTCOPY"Mapping AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"*PublicPrivateProtectedNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17844" TYPE="XREF-TEXTCOPY"Translating Data Attribute SyntaxCOLNAME="1" VALIGN="TOP" MOREROWS="0"Case LabelCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39850" TYPE="XREF-TEXTCOPY"Union ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"ExceptionInterfaceSequenceStructureUnionCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17829" TYPE="XREF-TEXTCOPY"Handling Special ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConstCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31773" TYPE="XREF-TEXTCOPY"Editing Attribute PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"ContextCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="37828" TYPE="XREF-TEXTCOPY"Constructors, Exceptions and ContextCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="16870" TYPE="XREF-TEXTCOPY"Implementing Qualified AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"InOutInOutCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="26272" TYPE="XREF-TEXTCOPY"Editing Operation ParametersCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiscriminatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39850" TYPE="XREF-TEXTCOPY"Union ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"External Class DefinitionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31621" TYPE="XREF-TEXTCOPY"Editing Class PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Inheritance accessCOLNAME="2" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="3" VALIGN="TOP" MOREROWS="0"*PublicProtectedPrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="41483" TYPE="XREF-TEXTCOPY"Mapping InheritanceCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"*PublicProtectedPrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="25909" TYPE="XREF-TEXTCOPY"Mapping OperationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oneway InvokationCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"AutomaticOffCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21601" TYPE="XREF-TEXTCOPY"Translating Operation SyntaxCOLNAME="1" VALIGN="TOP" MOREROWS="0"RaisesCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="37828" TYPE="XREF-TEXTCOPY"Constructors, Exceptions and ContextCOLNAME="1" VALIGN="TOP" MOREROWS="0"Text COLNAME="2" VALIGN="TOP" MOREROWS="0"All objectsCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"--Delphi Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for C++About this manualObjectTeam provides code generation tools that enable you to generate object-oriented code for a range of object-oriented programming languages. This guide focuses on Delphi as target language. This manual explains the following things:n Which steps to take to generate Delphi code n How certain constructions in the Class Diagrams (CDs) are translated into Delphi coden How you use reverse and round-trip engineeringn How you can customize the default code generation processPrerequisitesThis book assumes a basic knowledge of ObjectTeam, including familiarity with the information provided in the ObjectTeam Getting Started and ObjectTeam Modeling Guide. Furthermore, knowledge of Delphi is necessary to understand the Delphi constructions generated from the CDs. You also need this knowledge to complete the generated source files.If you plan to customize the default code generation process, you should be familiar with Tcl and the object-oriented extensions to Tcl supplied with ObjectTeam. For details on Object Tcl, refer to the ObjectTeam Programming Interface Guide.Chapter 1 Preparing ID="30937"Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for DelphiIntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.Delphi module requiredThe ObjectTeam module Delphi Code Generation provides the menu items, the properties and the Tcl code required to use the Delphi Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="27382" TYPE="XREF-TEXTCOPY"Chapter 2, Generating Code, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23235" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11520" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00568.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/delphi/dlphobjd.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="33269" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Classes to Units, and REFID="20051" TYPE="XREF-TEXTCOPY"Chapter 4, Modeling Forms and Data Modules, describe how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 Generating ID="27382"CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for DelphiIntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details that are not specified in the model.Prerequisitesn The ObjectTeam module Delphi Code generation must be active from Object Design Phase and Implementation Phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="30937" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Steps in code generationThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Configure the Delphi environment, copying required source files from the ObjectTeam installation directories to the appropriate user environment directories.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate Delphi files. During this step, ObjectTeam creates Delphi source files name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' project (.dpr), unit (.pas), and form (.txt/.dfm) files name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' on System level in the Implementation phase.Note: System level in the Implementation phase is fundamentally different than System level in other phases. The System files in the Implementation phase are source files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Convert ASCII form (.txt) files to Delphi form (.dfm) files.The code generator creates forms and data modules as ASCII (.txt) files. To open these files in Delphi, you must first convert them to Delphi form (.dfm) files.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Edit the source files in Delphi or in ObjectTeam. ObjectTeam generates a large portion of your application code, but not all of it. In this step, you finish writing the application code.TERM1="code regeneration"TERM1="regeneration" TERM2="code"Changes you make to the source files are not lost. When you regenerate the source files, the code generator recognizes your changes and transfers them to the newly generated files. COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"In the Delphi environment, test the application. If necessary, correct the generated source files, the ObjectTeam model, or both.COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Regenerate the Delphi files and return to step 3.Illustration of code generationThe following illustration shows how ObjectTeam generates code, including the names of the Tcl scripts that it uses.FILENAME="00569.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/delphi/dlphcodg.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24328" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10153" TYPE="XREF-TEXTCOPY"Configuring Your Delphi Environment 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21382" TYPE="XREF-TEXTCOPY"Generating Delphi Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16756" TYPE="XREF-TEXTCOPY"Editing Generated Unit (.pas) Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24486" TYPE="XREF-TEXTCOPY"Editing Generated Project (.dpr) Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12172" TYPE="XREF-TEXTCOPY"Regenerating Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19ID="24328"Components of Code GenerationGenerated Delphi filesYou use ObjectTeam to model classes and forms, as well as the associations among them. From that ObjectTeam model, you generate Delphi unit, form, data module, and project files. In Delphi, you open the project, complete the application, and test it.OOPL ModelWhen you generate code, ObjectTeam converts the CDs and CDMs of the Object Design phase into an intermediate model: the OOPL Model. The Delphi code generator then generates the Delphi source files based on the OOPL Model.For more informationThe ObjectTeam Programming Interface Guide provides a detailed description of the classes in the OOPL Model.Tcl scripts for code generationThe Tcl script import.tcl activates other Tcl scripts that contain Tcl procedures to retrieve information from internal models, format it and write it to Delphi files.The default TERM1="Tcl" TERM2="script files used for code generation"Tcl scripts used to generate Delphi files can be found in the directory modules\delphi\tcl under M4_home.Code TERM1="otsh" TERM2="code regeneration"regenerationCode generation is an automated process that generates Delphi files. ObjectTeam ensures that n You can regenerate the Delphi files when you change your ObjectTeam model. n Changes that you make to the generated files, even changes made in Delphi, are preserved when you regenerate them.For more information, see REFID="16756" TYPE="XREF-TEXTCOPY"Editing Generated Unit (.pas) Files and REFID="12172" TYPE="XREF-TEXTCOPY"Regenerating Code.ID="10153"Configuring Your Delphi EnvironmentFour tasksIn ObjectTeam, configuring your Delphi environment involves four tasks, which can be done in any order:1 Configure your Delphi environment in the Object Design phase.2 Configure your Delphi environment in the Implementation phase.3 Rename Delphi's convert.exe file to formconv.exe.4 Make sure the Delphi bin directory is in your path.What happens in the Object Design phaseWhen you configure your Delphi environment in the Object Design phase, ObjectTeam adds a new system to this phase of your project: the DelphiVCL system. This system defines the most commonly used classes in the Delphi Visual Component Library (VCL). You use these classes to model forms and their components.For more information, see REFID="20051" TYPE="XREF-TEXTCOPY"Chapter 4, Modeling Forms and Data Modules, and REFID="36394" TYPE="XREF-TEXTCOPY"Chapter 6, Editing the DelphiVCL System.If you skip this taskIf you have no DelphiVCL system in the current Object Design phase, the ObjectTeam classes used for modeling Delphi forms are not defined. When you generate Delphi source files, forms and data modules are not generated. A form is generated for each ObjectTeam class that is a subclass of the TForm class. A data module is generated for each ObjectTeam class that is a subclass of the TDataModule class. The TForm and TDataModule classes are defined in the DelphiVCL system. If these classes are not defined, no forms or data modules are generated.How to configure the environment in Object DesignNote: This operation creates the DelphiVCL system. It can take a few minutes.Σ To configure the Delphi environment in the Object Design phase:1 Move to Object Design Phase level, or System level in the Object Design phase.2 Select Utilities | Configure Delphi Environment.ObjectTeam creates the DelphiVCL system in the Object Design phase.What happens in the Implementation phaseWhen you configure your Delphi environment in the Implementation phase, ObjectTeam copies the ClassDict.pas file to the user_environment\src directory, where user_environment is the file path for your generated files. For more information on the user environment, see the ObjectTeam Project Management Guide.The Delphi ClassDict class is automatically included in all generated Delphi projects. It is referenced in the Delphi code generated for qualified associations. For more information on how the ClassDict class is used, see REFID="24359" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations.If you skip this taskIf you have not configured your Delphi environment in the Implementation phase, when you compile the generated Delphi code, an error occurs because the ClassDict class is not available.How to configure the environment in ImplementationΣ To configure the Delphi environment in the Implementation phase:1 Move to Implementation Phase level, or System level in the Implementation phase.2 Select Utilities | Configure Delphi Environment.ObjectTeam copies the ClassDict.pas file to the user_environment\src directory.Rename convert.exe to formconv.exeIn Delphi, forms and data modules can be stored as ASCII (.txt) files or as Delphi form (.dfm) files. The ObjectTeam code generator creates forms and data modules as ASCII (.txt) files. To open the forms and data modules in Delphi, you must first convert the ASCII (.txt) files to Delphi form (.dfm) files.Delphi provides a conversion utility (convert.exe) to convert between .txt and .dfm formats. In the Implementation phase of the Browser, two menu items (Delphi | Convert Text to Forms and Delphi | Convert Forms to Text) invoke the Delphi conversion utility.Because convert.exe is a common file name, it is possible to have other files of that name in your path. To avoid potential problems:1 Rename the convert.exe file to formconv.exe. The file is in the bin subdirectory of your Delphi installation directory.2 The ObjectTeam commands Delphi | Convert Text to Forms and Delphi | Convert Forms to Text invoke formconv.exe instead of convert.exe.If you skip this taskIf you do not rename the convert.exe file, the ObjectTeam commands display an error message indicating that the formconv.exe file cannot be found.Add the Delphi bin directory to your pathIn the Implementation phase of the Browser, the ObjectTeam commands Delphi | Run Delphi and Delphi | Run Delphi With Project start Delphi by invoking the Delphi executable. If you skip this taskIf the Delphi bin directory is not in your path, the ObjectTeam commands display an error message indicating that the Delphi executable cannot be found.ID="21382"Generating Delphi Source FilesResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create Delphi source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are Delphi files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate source files on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate Delphi.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet. Do not select this option unless you want to generate code for the DelphiVCL system.- Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files.How to generate code on System levelΣ To generate (selected) source files for a system from System level of the Implementation phase:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate Delphi.A cascading menu appears.3 Select New, Selected, or All:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files. Location of the source filesThe Delphi files are stored in the repository as external files. They are also written to the user_environment\system-name directory, where user_environment is the file path for your generated files. For more information on the user environment, see the ObjectTeam Project Management Guide.The following illustration shows how the source files appear in the Browser.FILENAME="00570.unk" ORIGFILE="pics/srcfiles.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphcodg.fm5.mif"TERM1="user environment" TERM2="updating"TERM1="Update User Environment (Utilities menu)"Update user environmentUtilities | Update User Environment synchronizes your user environment with the repository. This can be particularly useful if you are working on two machines, and the user environment of each is set to a local drive. When you move between machines, you can use Utilities | Update User Environment to update the local drive of the current machine.Generated filesThe Delphi code generator generates the following files:TERM1="Visual Basic" TERM2="generating files"TERM1="generating Visual Basic files"TERM1=".bas file"TERM1=".frm file"TERM1=".vbp file"TERM1=".cls file"TERM1=".bas file"TERM1=""TERM1=".cls file"TERM1=""TERM1=".vbp file"TERM1=""TERM1=".frm file"COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"File TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"systemname.dpr COLNAME="2" VALIGN="TOP" MOREROWS="0"One per system. This is the Delphi project file, which lists all other files in the system.COLNAME="1" VALIGN="TOP" MOREROWS="0"classnameUnit.pas COLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that represents a Delphi class, form unit, or data module container. Each file contains the code generated for the attributes, operations, and associations of the class.COLNAME="1" VALIGN="TOP" MOREROWS="0"classnameUnit.txt (.dfm)COLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that represents a Delphi form unit or data module container. Each file contains the definition of the form or data module.Note: The code generator generates forms and data modules as ASCII (.txt) files. To open these files in Delphi, you must convert them to Delphi form (.dfm) files. See REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files.ID="16756"Editing Generated Unit (.pas) FilesIntroductionThis section describes the changes you can make to generated unit (.pas) files and how to edit the generated files.See REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files and REFID="24486" TYPE="XREF-TEXTCOPY"Editing Generated Project (.dpr) Files for information about editing other types of generated files.Changes to procedure bodies are preservedThe procedures in the generated Delphi unit (.pas) files reflect the information in the ObjectTeam model. They do not contain all of the code necessary for the application. Comments in the generated procedures indicate where you should add code to complete the application.n TERM1="Visual Basic" TERM2="editing generated files"TERM1="editing generated files"TERM1="generated files" TERM2="editing"A method is generated for each operation defined in an ObjectTeam class. You must add the code that implements the method. The body of each generated method contains the following comment. Add code below the comment.//Implement this function!n Most generated unit (.pas) files include constructor and destructor methods. The body of the generated constructor and destructor method might contain generated code, as well as the following comments. Optionally, add code between the comments.//Start user section//End user sectionn Other generated procedures (such as the Get, Set, Add and Remove methods that implement associations) contain generated code but no comments indicating where to add additional code. Changes you make to these procedures are lost when you regenerate the file.Changes that change the modelIf you make the following changes to unit (.pas) files, you must use round-trip engineering (see REFID="17037" TYPE="XREF-TEXTCOPY"Chapter 5, Reverse and Round-Trip Engineering) to update the matching attributes and operations in the ObjectTeam model before regenerating the files.n Add, modify, or delete variablesn Add and delete proceduresn Modify the header of a procedureExplanationThe code generator generates code based on the ObjectTeam model. If you do not update the model, the regenerated code reflects the model. Your changes are not preserved. ExampleYou add a variable to a generated unit (.pas) file by editing the file. You do not add the matching attribute to the ObjectTeam model. When you regenerate the file, the code generator assumes that you deleted the matching attribute from the ObjectTeam model. This makes the Delphi variable obsolete, so ObjectTeam removes it from the generated source file.Do not delete regeneration markersTERM1="code regeneration" TERM2="regeneration markers"TERM1="regeneration markers"Generated files often contain special comments called regeneration markers:// Do not delete this line -- regeneration markerThe code generator uses these comments to preserve the changes you have made to the generated file. Do not delete these comments.Two ways to edit generated filesYou can edit the generated unit (.pas) files in ObjectTeam or in Delphi.ID="26511"How to edit generated files in ObjectTeamΣ To edit the generated files in ObjectTeam:1 Move to System level in the Implementation phase.2 In the Information area, double-click on the source file that you want to edit, or select the source file and then select File | Edit.ObjectTeam opens the file in your default text editor. When you save the file, ObjectTeam updates both the repository and the user environment.ID="35795"How to edit generated files in DelphiΣ To edit the generated files in Delphi:1 If you have generated forms or data modules, convert the .txt files to .dfm files, as described in REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files.2 Select Delphi | Run Delphi With Project, or select Delphi | Run Delphi and then open the project in Delphi.Editing the Delphi project updates the generated files.3 After editing the Delphi project, convert the .dfm files to .txt files, as described in REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files.ID="24431"Editing Generated Form (.txt/.dfm) FilesIntroductionThis section describes the changes you can make to generated form and data module (.txt/.dfm) files and how to edit the generated files.See REFID="16756" TYPE="XREF-TEXTCOPY"Editing Generated Unit (.pas) Files and REFID="24486" TYPE="XREF-TEXTCOPY"Editing Generated Project (.dpr) Files for information about editing other types of generated files.Two formats: .txt and .dfmForms and data modules can be stored as ASCII (.txt) files or as Delphi form (.dfm) files. ObjectTeam generates .txt files.n Convert from .txt to .dfm when you have (re)generated forms or data modules and want to bring them into Delphi.n Convert from .dfm to .txt when you have edited the forms or data modules in Delphi and want to work with them in ObjectTeam.How to convert between formatsNote: Before converting files, you must have renamed convert.exe to formconv.exe, as described in REFID="10153" TYPE="XREF-TEXTCOPY"Configuring Your Delphi Environment.Σ To convert from .txt to .dfm:1 Move to System level in the Implementation phase.2 Select Delphi | Convert Text to Forms | All.Alternative: Select one or more of the generated .txt files and then select Delphi | Convert Text to Forms | Selected.Σ To convert from .dfm to .txt:1 Move to System level in the Implementation phase.2 Select Delphi | Convert Forms to Text | All.Alternative: Select one or more of the generated .txt files and then select Delphi | Convert Forms to Text | Selected.Automatic conversionTo make .txt/.dfm conversion easier, Cayenne provides an automatic conversion option. When automatic conversion is enabled, ObjectTeam automatically converts between formats as follows:n (Re)generating. If you are regenerating files, ObjectTeam converts .dfm files to .txt files before generating. After generating files, ObjectTeam converts .txt files to .dfm files.n Reverse engineering. After reverse engineering files (see REFID="21085" TYPE="XREF-TEXTCOPY"Reverse Engineering), ObjectTeam converts .txt files to .dfm files.n Round-trip engineering. Before round-trip engineering (see REFID="15125" TYPE="XREF-TEXTCOPY"Round-Trip Engineering), ObjectTeam converts .dfm files to .txt files. After round-trip engineering, ObjectTeam converts .txt files to .dfm files.Σ To enable automatic conversion, select Delphi | Auto Form Convert.A check mark appears next to the menu item and automatic conversion is enabled.Σ To disable automatic conversion, select Delphi | Auto Form Convert.The check mark disappears and automatic conversion is disabled.How to edit forms and data modulesTypically, you edit generated forms and data modules in Delphi, as described in REFID="35795" TYPE="XREF-TEXTCOPY"How to edit generated files in Delphi. Alternatively, you can edit the .txt files in ObjectTeam, as described in REFID="26511" TYPE="XREF-TEXTCOPY"How to edit generated files in ObjectTeam.Changes that are preservedMost changes that you make to a form or data module, such as repositioning elements or changing their properties, are preserved when you regenerate the file. Changes that change the modelIf you add or remove elements from a generated form or data module, you must update the ObjectTeam model before regenerating the files. You can use round-trip engineering (see REFID="17037" TYPE="XREF-TEXTCOPY"Chapter 5, Reverse and Round-Trip Engineering) to add elements to the ObjectTeam model. You cannot use it to delete elements from the model.ExplanationThe code generator generates code based on the ObjectTeam model. If you do not update the model, the regenerated code reflects the model. Your changes are not preserved. ExampleYou add an element to a generated form. You do not add the matching class to the ObjectTeam model. When you regenerate the file, the code generator assumes that you deleted the matching class from the ObjectTeam model. This makes the Delphi element obsolete, so ObjectTeam removes it from the generated source file.ID="24486"Editing Generated Project (.dpr) FilesIntroductionThis section describes how to edit generated project (.dpr) files.See REFID="16756" TYPE="XREF-TEXTCOPY"Editing Generated Unit (.pas) Files and REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files for information about editing other types of generated files.Maintaining project filesEach ObjectTeam system maps to a Delphi project. When you generate code for a system, the code generator also generates a Delphi project file, systemName.dpr.If your Delphi project contains several ObjectTeam systems, you might find it easier to create and maintain a project file in Delphi, rather than using the generated project file.Generated project fileThe code generator creates a project file by copying the default.dpr customization file to the systemName.dpr file and then updating the systemName.dpr file. The generated project file contains:n The project type and namen The uses clausesBy default, the uses clause lists only the units generated from the current ObjectTeam system. If the current system references classes defined in other systems, you must add to the current project file the units generated from the other systems.n The application initialize and run clausesIn Delphi, by default, all forms are automatically created. In ObjectTeam, only the main form is automatically created. The main form is the form that maps to the ObjectTeam class whose Main Form class property is set, as described in described in REFID="17659" TYPE="XREF-TEXTCOPY"Editing Class Properties. You cannot compile or run a Delphi project that does not have a main form.n The regeneration marker blockThis block contains the names of all units generated by the ObjectTeam code generator. It serves as a checklist for the code generator to remove obsolete units from the project.How to edit a project fileTypically, you edit a generated project file in Delphi, as described in REFID="35795" TYPE="XREF-TEXTCOPY"How to edit generated files in Delphi. Alternatively, you can edit the project file in ObjectTeam, as described in REFID="26511" TYPE="XREF-TEXTCOPY"How to edit generated files in ObjectTeam.default.dpr fileYou can edit the default.dpr customization file, as described in REFID="10944" TYPE="XREF-TEXTCOPY"Editing the default.dpr Customization File, but it is rarely necessary.Changes that are preservedWhen you regenerate an existing project file, with the following exceptions, all changes are preserved.n The code generator regenerates the uses clause. If you have added lines to the user-defined section of the uses clause, those additions are preserved.n The code generator removes all Application.CreateForm statements except the one defined for the main form.ID="10944"Editing the default.dpr Customization Filedefault.dpr customization fileWhen you install ObjectTeam, there is an default.dpr customization file on Corporate level. You can edit the customization file on Corporate level, or create a new customization file on a lower level, as described in this section.For more informationFor general information about customization files, see the ObjectTeam Customization Guide.Levels of customizationFrom high to low, the levels for customization files are:n Corporaten Projectn Configurationn Implementation Phasen System in Implementation PhaseNote: The default.dpr customization file must be available when you generate the Delphi files. Therefore, creating this customization file at System level in a phase other than Implementation has no effect.Which customization file is usedIf you have more than one default.dpr customization file, the code generator uses the lowest-level customization file. For example, a System-level customization file is used before a Phase-level customization file.How to create a new default.dpr fileΣ To create a new default.dpr customization file:1 In Delphi, create the project file that you want to use:a Create a new project.b Delete the form that is automatically added to the project.c Make the desired changes.d Save the project.The project (.dpr) file created by Delphi is the project file that you want to use.2 In ObjectTeam, create a default.dpr customization file:a Move to the level on which you want to create the customization file. For example, to create a Project-level customization file, move to Project level.b Select View | Pseudo and open the <customization files> pseudo object.c Select File | New | Customization File Version.d In the entry field, type default.dpr.Note: You must type the name of this customization file in the entry field because the default.dpr customization file does not appear in the list of customization files.e Select Edit to create the customization file and open it for editing.3 Edit the default.dpr customization file:Tip: In the previous step, if you selected OK instead of Edit, double-click on the default customization file to open it.a Open the project (.dpr) file that you created in step 1.b Copy the contents of the project file into the default.dpr customization file.c Save the customization file.d Close both files.How to edit an default.dpr fileCustomization files, except those on Corporate level, are in the Cayenne repository. They are not available as files in the file system. Therefore, if you have an default.dpr customization file and you want to modify it, use the following procedure.Σ To edit an existing default.dpr customization file:1 Open the default.dpr customization file and save it to a temporary project file; for example, tempproj.dpr.2 Close the default.dpr customization file without saving it.3 In Delphi:a Open the temporary project file.b Make the desired changes.c Save the project.The modified project file is the project file that you want to use.4 Open the default.dpr customization file.5 Replace the contents of the default.dpr customization file with the contents of the temporary project file.6 Save and close the default.dpr customization file.7 Delete the temporary project file.ID="12172"Regenerating CodeDesign changes and code changesObjectTeam supports incremental development. You can generate code from your models, edit that code, and regenerate the code without losing your changes. You can work with ObjectTeam models or Delphi source files, shifting your focus between the two as necessary. It is, however, important that you make changes where appropriate.n Change the model when you are changing the structure of the model (for example, if you are changing the class hierarchy or class associations), or when you are making global changes to the code (for example, if you are changing the name of a class, attribute, or operation).n Change the code when you are adding code that is not generated by ObjectTeam (for example, adding method bodies), or when you are making local changes to the code (for example, adding a missing variable, procedure, or form element).Editing the ObjectTeam modelThe ObjectTeam model is always used as the source for generating the Delphi files. If you change the ObjectTeam model, you generally want to regenerate the Delphi files.If, in the model, you rename, delete, or change the declaration of an operation, the matching procedure in the generated file is no longer correct. ObjectTeam preserves the original method and you can choose whether to correct it, move it to another file, or delete it.n When you rename or delete an operation, the code generator moves the original method to the end of the generated file and marks it as OBSOLETE_CODE.// Obsolete code section{$IFDEF OBSOLETE_CODE}function account.quarterlyReport(): Integer;begin // !! Implement this method !![ text that you added to the method body ]end;{$ENDIF}n When you change the declaration of an operation, the code generator leaves the method in place, but marks the method body as OLD_CODE. procedure account.printAccount;begin{$IFDEF OLDCODE} // !! Implement this method !![ text that you added to the method body ]{$ELSE} // !! Implement this method !!{$ENDIF}end;Editing generated filesThe generated Delphi files are framework files that you need to complete. Comments in the file indicate where you should add code.Always edit the generated files in accordance with the guidelines described in REFID="16756" TYPE="XREF-TEXTCOPY"Editing Generated Unit (.pas) Files, REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files, and REFID="24486" TYPE="XREF-TEXTCOPY"Editing Generated Project (.dpr) Files. This ensures that your changes are preserved when you regenerate the Delphi files.Before you beginBefore you regenerate Delphi files:n Remove any OBSOLETE_CODE or OLD_CODE sections.n If necessary, update the ObjectTeam model to reflect changes that you have made to the generated files. See REFID="16756" TYPE="XREF-TEXTCOPY"Editing Generated Unit (.pas) Files and REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files.n If necessary, convert .dfm files to .txt files. See REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files.How to regenerate codeΣ To regenerate Delphi source files:1 In the Implementation phase, move to the System that contains the files that you want to regenerate.2 Select Utilities | Generate Delphi | All.Alternative: Select one or more files and then select Utilities | Generate Delphi | Selected.ObjectTeam opens a Monitor window for displaying log messages, then generates the files.For more informationSee REFID="21382" TYPE="XREF-TEXTCOPY"Generating Delphi Source Files for more information about the Generate Delphi command.Chapter 3 Mapping ID="33269"Classes to UnitsTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for DelphiUnits, forms, and data modulesA Delphi project consists of separately compiled modules of code called units (.pas files). Delphi form units are units that have forms (.dfm files) associated with them. Delphi data module containers are units that have data modules (.dfm files) associated with them. Delphi data modules are similar to forms, but contain only nonvisual components.Two chapters of informationYou can use ObjectTeam to generate units, form units, and data module containers.n This chapter describes the Delphi units generated by ObjectTeam. Unless otherwise noted, all of the information in this chapter applies to units, form units, and data module containers.n Chapter 4, Modeling Forms and Data Modules, describes the forms and data modules generated by ObjectTeam.ExamplesFor simplicity, the examples in this chapter generate units (.pas files) without forms or data modules.Similar code is generated for a unit that has an associated form or data module. The form or data module (.dfm file) is generated in addition to the unit (.pas file). In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11889" TYPE="XREF-TEXTCOPY"Mapping Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13392" TYPE="XREF-TEXTCOPY"Mapping Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37299" TYPE="XREF-TEXTCOPY"Mapping Operations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40371" TYPE="XREF-TEXTCOPY"Mapping Inheritance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'35COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21676" TYPE="XREF-TEXTCOPY"Mapping Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'36ID="11889"Mapping ClassesIntroductionBy default, an ObjectTeam class maps to a Delphi class. Depending on the supertype of the ObjectTeam class, it can instead map to a TForm class, a TDataModule class, or a TComponent.DelphiVCL systemIn ObjectTeam, the classes in the DelphiVCL system represent commonly used Delphi classes, such as TForm and TDataModule. You can indicate the type of Delphi object that you want to create by making your ObjectTeam class a subclass of a DelphiVCL class. For example, to model a form, you create an ObjectTeam class that is a subclass of the TForm class.The DelphiVCL system is added to the Object Design phase of your project when you configure your Delphi environment, as described in REFID="10153" TYPE="XREF-TEXTCOPY"Configuring Your Delphi Environment. You can add additional Delphi classes to the DelphiVCL system, as described in Chapter 6, Editing the Delphi VCL System.ID="17092"Delphi classesAn ObjectTeam class that is not a subclass of the TComponent class maps to a Delphi class. The code generator creates a unit (.pas) file to implement the class. The generated file includes:+ Is it subclass of TComponent, or subclass of ANY class in the DelphiVCL system?n Variable declarations and accessor methods (see REFID="13392" TYPE="XREF-TEXTCOPY"Mapping Attributes and REFID="21676" TYPE="XREF-TEXTCOPY"Mapping Associations)n Procedures and functions (see REFID="37299" TYPE="XREF-TEXTCOPY"Mapping Operations)n Constructors and destructors (see REFID="12004" TYPE="XREF-TEXTCOPY"Generating Class Constructors and Destructors)n Inheritance information (see REFID="40371" TYPE="XREF-TEXTCOPY"Mapping Inheritance)Delphi forms and data modulesAn ObjectTeam class that is a subclass of the TForm class maps to a Delphi form unit. An ObjectTeam class that is a subclass of the TDataModule class maps to a Delphi data module container. The TForm and TDataModule classes are subclass of TComponent; all three classes are defined in the DelphiVCL system.To implement a form or data module, the code generator creates:n A unit (.pas) file that is similar to the unit file for any other classn A form (.txt/.dfm) file for the associated form or data moduleFor more informationSee Chapter 4, Modeling Forms and Data Modules.ID="32628"Delphi componentsAn ObjectTeam class that is a subclass of the TComponent class maps to a Delphi component. Many of the TComponent subclasses, such as TRadioButton and TListBox, are defined in the DelphiVCL system.Typically, a component is not generated as a separate class. Instead, the code generator defines the component in the .txt/.dfm file that defines the form or data module that contains the component. If you want to generate the component as a separate class, you can do so by setting the class property Component Class Declaration (see REFID="17659" TYPE="XREF-TEXTCOPY"Editing Class Properties).For more informationSee Chapter 4, Modeling Forms and Data Modules.Delphi type declarationsAn ObjectTeam class can also map to a Delphi type declaration, as described in REFID="31687" TYPE="XREF-TEXTCOPY"Mapping Special Classes. In this case, the code generator creates unit (.pas) files that contain only the type declaration sections.Class namesCayenne strongly recommends that you follow the Delphi convention of beginning each class name with a capital T. This is mandatory for forms and data models.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12004" TYPE="XREF-TEXTCOPY"Generating Class Constructors and Destructors 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17659" TYPE="XREF-TEXTCOPY"Editing Class Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22880" TYPE="XREF-TEXTCOPY"Sample Unit Files 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9ID="12004"Generating Class Constructors and DestructorsConstructors and destructorsThe Delphi code generator includes a constructor and destructor in each unit (.pas) file that implements a Delphi class.$create operation and constructorObjectTeam uses the $create operation of a class to determine whether to create a default constructor or a user-defined constructor.Note: The name of the $create operation is case sensitive.Default constructorIf the ObjectTeam class has no $create operation, or has a $create operation without parentheses or parameters, the code generator creates a default constructor named Create. ObjectTeam maintains the parameter list and body of a default constructor. Cayenne strongly recommends that you use default constructors.Parameter listThe parameter list of a default constructor contains the following:n All key attributes (attributes prefixed with *).n The association attribute of each association that has, at the far end, a multiplicity of exactly one and a role name.BodyObjectTeam uses the body of a default constructor to initialize and maintain variables as necessary. Comments in the body of the constructor indicate where you can additional code.User-defined constructorsIf the ObjectTeam class has a $create operation that includes a parameter list, even an empty parameter list, the code generator creates a user-defined constructor named Create. You are responsible for maintaining the parameter list and body of a user-defined constructor.ExampleThe generated code that implements associations uses the constructor to initialize and maintain the association variables. If you use default constructors, ObjectTeam provides this code for you. If you use user-defined constructors, you must write it yourself.DestructorThe code generator creates a default destructor named Destroy. ObjectTeam uses the body of the default destructor to destroy objects and reset variables as necessary. Comments in the body of the destructor indicate where you can additional code.Multiple constructors and destructorsObjectTeam generates one constructor and one destructor for each class. Delphi allows multiple constructors and destructors for each class. If you use Delphi to add additional constructors or destructors to the generated files, ObjectTeam preserves them when you regenerate the edited files.ID="26603"ExampleThe following code excerpt shows the default constructor and destructor created for the Customer class. FILENAME="00571.unk" ORIGFILE="pics/asscuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...type ... public ... // Default constructor/destructor constructor Create; destructor Destroy; override; ...implementation...constructor Customer.Create; // Start user section // End user sectionbegin inherited Create; // Start user section // End user sectionend;destructor Customer.Destroy; // Start user section // End user sectionbegin // Start user section // End user section inherited Destroy;end;...ID="17659"Editing Class PropertiesHow to edit class propertiesTERM1="Edit Properties (Item menu)" TERM2="for class"TERM1=""TERM1="class property" TERM2="editing"Σ To edit properties of a class:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select the class name.The class properties appear on the right side of the dialog box.FILENAME="00572.unk" ORIGFILE="pics/clasprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"4 Select the desired properties:COLS="4"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="45p"COLNAME="3" COLWIDTH="180p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Maps the ObjectTeam class to a Delphi class (default) or type declaration.COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31687" TYPE="XREF-TEXTCOPY"Mapping Special ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main FormCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"If set, generates this ObjectTeam class as the main form for the Delphi project. Set this property for exactly one subclass of TForm or TDataModule.COLNAME="4" VALIGN="TOP" MOREROWS="0"Chapter 4, Modeling Forms and Data ModulesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Component Class DeclarationCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"If set, generates this component as a Delphi class; otherwise, defines the component in the .txt/.dfm file that defines the form or data module that contains the component. Applies only to subclasses of TComponent.COLNAME="4" VALIGN="TOP" MOREROWS="0"Chapter 4, Modeling Forms and Data ModulesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Library UnitCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Identifies the dynamic-linked library (DLL), if any, that contains this class.COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="33960" TYPE="XREF-TEXTCOPY"Library unitsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Interface IdentifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Identifier for the interface. Applies only when Class Type is Identifier.COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31687" TYPE="XREF-TEXTCOPY"Mapping Special ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Comment that appears before the class declaration in the generated code.COLNAME="4" VALIGN="TOP" MOREROWS="0"5 Select OK.ID="33960"Library unitsWhen one unit (.pas file) references another, the name of the referenced unit must appear in the uses clause of the referencing unit. The Library Unit property of the referenced class specifies the unit name that is added to the uses clause of the referencing unit. By default, Library Unit is None and the name added to the uses clause is referenced-classnameUnit.The Library Unit property is most often used when you are adding classes to the DelphiVCL system. See Chapter 6, Editing the Delphi VCL System.ID="22880"Sample Unit FilesIntroductionThis section shows the complete unit (.pas) file generated for a Delphi unit and for a form unit. For an example of a unit (.pas) file generated for a Delphi type declaration, see REFID="31687" TYPE="XREF-TEXTCOPY"Mapping Special Classes.Class unitThe following illustration shows an ObjectTeam class that represents a Delphi class. The generated unit (.pas) file follows the illustration.FILENAME="00573.unk" ORIGFILE="pics/custclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"//// File : CustomerUnit.pas//// Project : DelphiProj// Configuration : main 1// Phase : Implementation 1// System : AssocSystem 1//unit CustomerUnit;interface // Start user include section // End user include sectiontype Customer = class private // User defined attributes name: Char; // User defined methods // Properties protected // User defined attributes // User defined methods // Properties public // User defined attributes // Default constructor/destructor constructor Create; destructor Destroy; override; // User defined methods // Access methods procedure setName(newName: Char); function getName: Char; // Properties published // User defined attributes // User defined methods // Properties end;implementation // Start user include section // End user include sectionconstructor Customer.Create; // Start user section // End user sectionbegin inherited Create; // Start user section // End user sectionend;destructor Customer.Destroy; // Start user section // End user sectionbegin // Start user section // End user section inherited Destroy;end;// Do not delete this line -- regeneration markerprocedure Customer.setName(newName: Char);begin name := newName;end;function Customer.getName: Char;begin getName := name;end;end.FormThe following illustration shows an ObjectTeam class that represents a Delphi form. The generated unit (.pas) file follows the illustration. For an example of the associated form (.txt/.dfm) file, see Chapter 4, Modeling Forms and Data Modules.The generated unit for the form is almost identical to the generated unit for the class. Bold text highlights where the generated form unit is different.FILENAME="00574.unk" ORIGFILE="pics/custform.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"//// File : CustomerUnit.pas//// Project : DelphiProj// Configuration : main 1// Phase : Implementation 1// System : AssocSystem 1//unit CustomerUnit;interfaceuses // Start user include section // End user include section Forms, Classes;type Customer = class(TForm) // Visual Components // Events methods private // User defined attributes name: Char; // User defined methods // Properties protected // User defined attributes // User defined methods // Properties public // User defined attributes // Default constructor/destructor constructor Create(AOwner: TComponent); destructor Destroy; override; // User defined methods // Access methods procedure setName(newName: Char); function getName: Char; // Properties published // User defined attributes // User defined methods // Properties end;// Class feature attributesvar ustomer: Customer (* Form attribute *);implementation // Start user include section // End user include section{$R *.DFM}constructor Customer.Create(AOwner: TComponent); // Start user section // End user sectionbegin inherited Create(AOwner); // Start user section // End user sectionend;destructor Customer.Destroy; // Start user section // End user sectionbegin // Start user section // End user section inherited Destroy;end;// Do not delete this line -- regeneration markerprocedure Customer.setName(newName: Char);begin name := newName;end;function Customer.getName: Char;begin getName := name;end;end.ID="13392"Mapping AttributesAttributes map to variablesTERM1="attribute" TERM2="mapping of"TERM1="mapping" TERM2="attribute"TERM1="Visual Basic" TERM2="variables"ObjectTeam data attributes map to Delphi variables. Typically, accessor functions for the variables are also generated.Attribute syntaxUse the following syntax to specify data attributes for an ObjectTeam class:[ * | $ | / ] name : type [ = initial-value ]wheren * indicates a key attribute. A key attribute maps to a private variable. It is included in the parameter list of the default constructor. n $ indicates a class attribute. A class attribute maps to a global variable.n / indicates a derived attribute. Delphi does not support derived attributes; therefore, the code generator ignores this indicator.TERM1="derived attribute"TERM1="/ (derived attribute)"n type must be a standard type or the name of another class, as described in REFID="26856" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types.n initial-value, if specified, is an initial value that is assigned to the variable in the default constructor.TERM1="attribute" TERM2="default value"TERM1="default value, for attribute"TERM1="initial value, for attribute"How to edit attribute propertiesTERM1="Edit Properties (Item menu)" TERM2="for attribute"TERM1=""TERM1="attribute property" TERM2="editing"Σ To edit attribute properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an attribute name from the list on the left side of the dialog box.The attribute properties appear on the right side of the dialog box.FILENAME="00575.unk" ORIGFILE="pics/attrprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"4 Select the desired properties:COLS="4"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="63p"COLNAME="3" COLWIDTH="180p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies a type modifier for the variable in a typedef class. Applies only to the attribute in a typedef class. COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31687" TYPE="XREF-TEXTCOPY"Mapping Special ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute VisibilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies attribute visibility (public, private, protected, published).COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="40016" TYPE="XREF-TEXTCOPY"Specifying Visibility of a VariableCOLNAME="1" VALIGN="TOP" MOREROWS="0"Access MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies read and write access for the variable.COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="16861" TYPE="XREF-TEXTCOPY"Specifying Access Methods for VariablesCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyProperty Read ValueProperty Write ValueProperty IndexProperty DefaultDefault ValueProperty StorageCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Maps the attribute to a property rather than to a variable.COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Comment that appears before the attribute declaration in the generated file.COLNAME="4" VALIGN="TOP" MOREROWS="0"5 Select OK.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26856" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40016" TYPE="XREF-TEXTCOPY"Specifying Visibility of a Variable 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16861" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Variables 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="26856"Specifying Attribute Data TypesData typesTERM1="data type" TERM2="for attribute"TERM1="attribute" TERM2="data type"Specify the data type of an attribute with either a standard data type, such as integer, or the name of another class. For example:attr:integerStandard data typesThe standard data types are defined by the TERM1="stand_types customization file"etc\stand_types customization file in the Delphi module directory. These are the data types that are valid in the Object Design phase.The translation between standard data types and Delphi data types is defined by the TERM1="lang_types customization file"etc\lang_types customization file. These are the translations used by the Delphi code generator.Customizing the standard data typesYou can add additional data types to the list of standard types by editing the stand_types customization file. If you add additional standard types, you must also provide translations for those data types by editing the lang_types customization file.By default, the stand_types and lang_types customization files are defined on Corporate level. You can edit the customization files at Corporate level, or create and edit them at a lower level, such as Project level. The customization files at the lower level override the customization files at the higher level.For more informationThe ObjectTeam Customization Guide describes how to create and edit customization files. The stand_types and lang_types customization files are ASCII files that can be edited using any text editor.Data structures and pointersTo generate data structures and pointers, use special classes. See REFID="31687" TYPE="XREF-TEXTCOPY"Mapping Special Classes.ArraysThe Delphi code generator does not support specification of arrays in ObjectTeam; that is, you cannot use the ObjectTeam notation attrName:type[x]. However, variant variables can hold arrays in Delphi. To create a variable that can hold an array, use the Variant data type:attrName : variantID="40016"Specifying Visibility of a VariableAttribute Visibility propertyUse the Attribute Visibility property on the Misc tab of the Edit Properties dialog box to specify the visibility of the generated variable.n Public. The variable has no special restrictions on its visibility.n Protected. The variable is visible to the class in which it is declared and to descendants of that class.n Private (default). The variable is visible only to the class in which it is declared.n Published. The variable has no special restrictions on its visibility. Delphi generates runtime type information for published components, but not for public components. See the Delphi documentation for more information.ExampleThe code excerpt below shows the variable declarations generated for the customerID and name attributes of the Customer class. The Attribute Visibility property is set to Public for customerID and to Private (the default) for name....typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// User defined attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name: Char;...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'publicname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// User defined attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'customerID: Integer;...ID="16861"Specifying Access Methods for VariablesAttribute Access propertiesTERM1="attribute" TERM2="access method"TERM1="attribute property" TERM2="access method"TERM1="access property" TERM2="for attribute access method"TERM1=""TERM1="Visual Basic" TERM2="attribute access method"TERM1="attribute access method"TERM1="method" TERM2="attribute access"An access method is a special type of procedure that gets (reads) and sets (writes) an attribute's value. Use the Attribute Access group box on the Misc tab of the Edit Properties dialog box to specify the visibility of the generated methods and to prevent access methods from being generated.Read and Write fieldsThe Attribute Access group box allows you to specify the access methods for both read and write. The setting you specify in the Read field affects the Get attribute access method. The setting you specify in the Write field affects the Set attribute access method.Access functionsThe following values are allowed for both Read and Write fields. You can enter the same or different values in the two fields.n Public (default). The generated method has no special restrictions on its visibility.n Protected. The generated method is accessible only to the class in which it is declared and to descendants of that class.n Private. The generated method is accessible only to the class in which it is declared.n None. The method is not generated.ExampleThe code excerpt below shows the access methods generated for the name attribute of the Customer class. In the Attribute Access group box, the Write field is specified as Private and the Read field is specified as Public (the default)....type ... private ... // Access methods procedure setName(newName: Char); ... public ... // Access methods function getName: Char;...implementation...procedure Customer.setName(newName: Char);beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name := newName;end;function Customer.getName: Char;beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'getName := name;end;...ID="23727"Mapping Attributes to Delphi PropertiesTwo attributes to model a Delphi propertyIn Delphi, you typically store property data in a class field. Therefore, in ObjectTeam, you generally model a property using two attributes:n One attribute represents the property. n The second attribute has the same data type as the property and maps to the class field that holds the property data.Read and write specifiersIn Delphi, the property declaration includes read and write specifiers that define how you read and write the property values.n A field name in a read or write specifier indicates that you access the property value directly from the specified field.n A method name in read or write specifier indicates that you access the property value using the specified method. The specified methods are generally private or public, virtual methods.- The read method must be a function that takes no parameters (or a single index value parameter) and returns a value of the same type as the property.- The write method must be a procedure that takes a single parameter of the same type as the property (and, optionally, a second index value parameter).See the Delphi documentation for more information about reading and writing property values.How to model a Delphi propertyΣ To model a Delphi property in ObjectTeam:1 Create two attributes, one for the property and one for the property value.2 Optionally, create operations for the read and write methods.3 Edit the attribute properties of the attribute that represents the Delphi property. Use the Property check box on the Property tab of the Edit Properties dialog box to specify that the attribute maps to a Delphi property. Use the remaining properties on the Property tab to specify additional information.COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Maps the attribute to a property rather than to a variable. Note: ObjectTeam does not generate access methods for a property.COLNAME="1" VALIGN="TOP" MOREROWS="0"Read Property ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"Field or method for the read specifier of the property declaration. Specify either the attribute that represents the class field that holds the property value or the operation that represents the read method.COLNAME="1" VALIGN="TOP" MOREROWS="0"Write Property ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"Field or method for the write specifier of the property declaration. Specify either the attribute that represents the class field that holds the property value or the operation that represents the write method.COLNAME="1" VALIGN="TOP" MOREROWS="0"IndexCOLNAME="2" VALIGN="TOP" MOREROWS="0"Index specifier that is passed to the read and write property methods. Use index specifiers to create a read or write method that is shared by several properties. For more information, see the Delphi documentation.COLNAME="1" VALIGN="TOP" MOREROWS="0"Default UsageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether the property has a default value:n Default. Appends the default directive to the property's declaration. Use the Property Default box to specify the default value.n No Default. Appends the nodefault directive to the property's declaration.n None (default). Appends no directive to the property's declaration.COLNAME="1" VALIGN="TOP" MOREROWS="0"Property DefaultCOLNAME="2" VALIGN="TOP" MOREROWS="0"Default value for the property. Applies only when Default Usage is Default.COLNAME="1" VALIGN="TOP" MOREROWS="0"Property StorageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether the property value is stored:n True. Appends the stored True directive to the property's declaration.n False. Appends the stored False directive to the property's declaration.n None (default). Appends no directive to the property's declaration.4 Edit the attribute properties of the attribute that represents the class field that stores property value. On the Misc tab, set the Read and Write fields in the Attribute Access group box to None. This prevents ObjectTeam from generating read and write access methods for this attribute.5 Edit the operation properties of the operations that represent the read and write methods. Set the Method Visibility property to Private or Protected. Set the Method Modifier property to Virtual.Complete the read and write methodsAfter generating the Delphi unit (.pas) files, you must complete the read and write methods by filling in the method bodies.ExampleThe following example models a count property for the Book class. The class field that stores the property value is FCount. The property is read directly. It is written using the SetCount write method.Book classFILENAME="00576.unk" ORIGFILE="pics/prpcd.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Attribute properties for countFILENAME="00577.unk" ORIGFILE="pics/prpprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Generated codeFollowing are excerpts from the generated code. The highlighted text in the write method shows the text that you might add to complete the method.type Book = class private // User defined attributes title: Char; FCount: Integer; // User defined methods procedure setCount(cnt: Integer); virtual; ... public ... // Access methods function getTitle: Char; procedure setTitle(newTitle: Char); // Properties property count: Integer read FCount write setCount; ...implementation ...procedure Book.setCount(cnt: Integer);begin // !! Implement this method !!if cnt <> FCount then begin FCount := cnt; Update; end;end;...ID="37299"Mapping OperationsOperation maps to event handler, function, or procedureAn operation defined for an ObjectTeam class maps to an event handler, function, or procedure.n If you select the Event property, the operation maps to an event handler. An ObjectTeam class can contain events if the class represents a Delphi form, data module, or component; that is, if it is a subclass of TComponent.n If you clear the Event property, and the operation has- a return type, the operation maps to a function.- no return type, the operation maps to a procedure.An ObjectTeam class can contain functions and procedures if the class generates a unit (.pas) file. An ObjectTeam class that represents a component does not generate a unit (.pas) file unless you select the Component Class Declaration property (see REFID="17659" TYPE="XREF-TEXTCOPY"Editing Class Properties).Operation syntaxUse the following syntax to specify operations for an ObjectTeam class:[ $ ] name ( [ parameter-list ] ) [ : return_type ] [ {abstract} ]wheren $ indicates a class operation.n name is the operation name.Tip: Delphi does not support overloaded methods. If an ObjectTeam class has two operations with the same name, the code generator displays an error message.n parameter-list is a comma-separated list of parameters, where each parameter is specified as follows:parameter_name: typeThe type of a parameter must be either a standard type or a class modeled in the CD. Specifying the data type of a parameter is similar to specifying the data type of an attribute (see REFID="26856" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types).n return_type is either a standard type or a class modeled in the CD. Specifying the return type for a procedure is similar to specifying the data type of an attribute (see REFID="26856" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types).n {abstract} indicates an abstract operation.How to edit operation propertiesTERM1="Edit Properties (Item menu)" TERM2="for operation"TERM1=""TERM1="operation property" TERM2="editing"Σ To edit operation properties:1 Select one or more class symbols in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an operation from the list on the left side of the dialog box.The method properties appear on the right side of the dialog box.+ New pic when Method Access changes to Method Visibility.FILENAME="00578.unk" ORIGFILE="pics/operprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"4 Select the desired properties:COLS="4"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="63p"COLNAME="3" COLWIDTH="180p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method VisibilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies attribute visibility (public, private, protected, published). Ignored for class operations; class operations are always published.COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="40398" TYPE="XREF-TEXTCOPY"Specifying Method VisibilityCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the dispatch mechanism for the method (static, vitural, dynamic, abstract).COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24451" TYPE="XREF-TEXTCOPY"Specifying Method DispatchCOLNAME="1" VALIGN="TOP" MOREROWS="0"Calling ConventionCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the calling convention for the method (register, pascal, cdecl, stdcall, safecall).COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="36073" TYPE="XREF-TEXTCOPY"Specifying Method Calling ConventionCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"If selected, generates the operation as an event.COLNAME="4" VALIGN="TOP" MOREROWS="0"Chapter 4, Modeling Forms and Data ModulesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Comment that appears before the method implementation in the generated file.COLNAME="4" VALIGN="TOP" MOREROWS="0"5 Select OK.How to edit parameter propertiesTERM1="Edit Properties (Item menu)" TERM2="for parameter"TERM1=""TERM1="parameter property" TERM2="editing"Σ To edit parameter properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a parameter from the list on the left side of the dialog box.The operation properties appear on the right side of the dialog box.FILENAME="00579.unk" ORIGFILE="pics/parmprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"4 Select the desired properties: COLS="4"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="63p"COLNAME="3" COLWIDTH="180p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Parameter PassingCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the type of parameter (value, constant, variable, out).COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35664" TYPE="XREF-TEXTCOPY"Specifying ParametersCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the type of array parameter (open-array, variant open-array).COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35664" TYPE="XREF-TEXTCOPY"Specifying ParametersCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Comment that does not appear in the generated code.COLNAME="4" VALIGN="TOP" MOREROWS="0"5 Select OK.Special proceduresThe Delphi code generator generates the following special procedures, which you do not have to specify as operations in an ObjectTeam class:n Class constructors and destructors, as described in REFID="12004" TYPE="XREF-TEXTCOPY"Generating Class Constructors and Destructors. Class constructors can be specified as $create operations on an ObjectTeam class, but do not have to be.n Attribute access methods, as described in REFID="16861" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Variables. Do not specify access methods as operations on an ObjectTeam class.n Association access methods, as described in REFID="20174" TYPE="XREF-TEXTCOPY"Mapping Unidirectional and Bidirectional Associations. Do not specify access methods as operations on an ObjectTeam class.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40398" TYPE="XREF-TEXTCOPY"Specifying Method Visibility 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'29COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24451" TYPE="XREF-TEXTCOPY"Specifying Method Dispatch 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36073" TYPE="XREF-TEXTCOPY"Specifying Method Calling Convention 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'32COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35664" TYPE="XREF-TEXTCOPY"Specifying Parameters 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'33ID="40398"Specifying Method VisibilityMethod Visibility propertyUse the Method Visibility property on the Misc tab of the Edit Properties dialog box to specify the visibility of the operation.n Public (default). The operation has no special restrictions on its visibility.n Private. The operation is visible only to the class in which it is declared.n Protected. The operation is visible to the class in which it is declared and to descendants of that class.n Published. The operation has no special restrictions on its visibility. Delphi generates runtime type information for published components, but not for public components. See the Delphi documentation for more information.Special charactersYou can display the visibility of methods in your diagram by checking Options | Show Visibility in the Class Diagram Editor. Method names will then be displayed with the following leading characters indicating the method's access level:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="318p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special characterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"+COLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"#COLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"-COLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateNote: No leading character is displayed for methods with a visibility of Published.These special characters can also be used to set the access level of methods. Typing a hatch sign (#) before a method name will set the access level of the method to Protected, for example. Warning: The special characters only work if the menu entry Options | Show Visibility in the Class Diagram Editor has been checked. Otherwise, the special characters will just be regarded as part of the method name.ExampleThe code excerpt below shows the operation declarations generated for the checkCredit and printCustomer operations of the Customer class. The Method Visibility property for checkCredit is set to Private. The same property for printCustomer is set to Public (the default)....type...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// User defined methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure checkCredit();...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// User defined methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'procedure printCustomer(copies: Integer);...ID="24451"Specifying Method DispatchMethod Modifier propertyUse the Method Modifier property on the Misc tab of the Edit Properties dialog box to specify the dispatch mechanism for the method:n Static (None, the default). The compiler determines the exact address of the method and links the method at compile time. You cannot override static methods; if you declare a method in a derived class with the same name as a static method in the ancestor class, the new method replaces the inherited method.n Virtual. The address of a virtual method is stored in the Virtual Method Table (VMT) of the owner object. The address of the method is found at runtime.n Dynamic. Similar to virtual methods. Dynamic methods use less memory because their addresses are not stored in the VMT; they are dispatched more slowly because the address is found at runtime by searching the inheritance tree.n Abstract. A virtual or dynamic method whose implementation is deferred to descendant classes.n Override. Extends or redefines an inherited virtual or dynamic method.ExamplesThe following table shows how the Method Modifier property and the {abstract} keyword affect the generated method declaration:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Method modifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Code ExampleCOLNAME="1" VALIGN="TOP" MOREROWS="0"None (default)COLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper();COLNAME="1" VALIGN="TOP" MOREROWS="0"VirtualCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); virtual;COLNAME="1" VALIGN="TOP" MOREROWS="0"DynamicCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); dynamic;COLNAME="1" VALIGN="TOP" MOREROWS="0"Virtual abstractCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); virtual; abstract;COLNAME="1" VALIGN="TOP" MOREROWS="0"Dynamic abstractCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); dynamic ; abstract;COLNAME="1" VALIGN="TOP" MOREROWS="0"OverrideCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); override;COLNAME="1" VALIGN="TOP" MOREROWS="0"{abstract}COLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); virtual; abstract;Note: The Method Modifier property, unless specified as None, overrides the {abstract} keyword.ID="36073"Specifying Method Calling ConventionCalling Convention propertyUse the Calling Convention property on the Misc tab of the Edit Properties dialog box to specify the calling convention for the method. The calling convention determines how parameters are passed to the method:n Register (default). Parameters are passed left-to-right. The called method removes the parameters from the stack upon returning. This convention uses up to 3 registers to pass parameters; the remaining parameters are passed on the stack.n Pascal. Parameters are passed left-to-right. The called method removes the parameters from the stack before the call returns.n CDecl. Parameters are passed right-to-left. The caller must remove the parametes from the stack when the call returns.n StdCall. Parameters are passed right-to-left. The called method removes the parameters from the stack before the call returns.n SafeCall. Parameters are passed right-to-left. The called method removes the parameters from the stack before the call returns.Note: Avaliable only in Delphi 3. Must be used to implement methods of dual interfaces.ExamplesThe following table shows how the Calling Convention property affects the generated method declaration:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Calling ConventionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Code ExampleCOLNAME="1" VALIGN="TOP" MOREROWS="0"Register (default)COLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper();COLNAME="1" VALIGN="TOP" MOREROWS="0"PascalCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); pascal;COLNAME="1" VALIGN="TOP" MOREROWS="0"CDeclCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); cdecl;COLNAME="1" VALIGN="TOP" MOREROWS="0"StdCallCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); stdcall;COLNAME="1" VALIGN="TOP" MOREROWS="0"SafeCallCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(); safecall;ID="35664"Specifying ParametersParameter propertiesUse the Parameter Passing and Type Modifier properties on the Misc tab of the Edit Properties dialog box for a parameter to specify the kind of parameter that you want to use.Parameter Passing propertyn Value (default). Value parameters allow expressions to be passed into the method. Within the method, value parameters are similar to local variables.n Constant. Constant parameters allow expressions to be passed into the method. Within the method, constant parameters are similar to read-only local variables.n Variable. Variable parameters are passed by reference. The caller and the called method reference the same variable.n Out. Out parameters are used only to return data to the caller.Type Modifier propertyn Default (default). Adds no directive to the parameter declaration.n Untyped. Adds no type information to the parameter declaration. This allows the actual parameter to be any variable or constant reference.n Open-array. Open-array parameters allow arrays of varying sizes to be passed into the method.n Variant open-array. Type variant open-array parameters allow arrays of varying sizes and types to be passed into the method.ExamplesThe following tables show how the Parameter Passing and Type Modifier properties effect the generated declaration for the following ObjectTeam operation:oper(test:integer)Parameter Passing propertyCOLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Parameter PassingCOLNAME="2" VALIGN="TOP" MOREROWS="0"Code ExampleCOLNAME="1" VALIGN="TOP" MOREROWS="0"Value (default)COLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(test:integer);COLNAME="1" VALIGN="TOP" MOREROWS="0"ConstantCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(const test:integer);COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(var test:integer);COLNAME="1" VALIGN="TOP" MOREROWS="0"OutCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(out test:integer);Type Modifier propertyCOLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"Code ExampleCOLNAME="1" VALIGN="TOP" MOREROWS="0"DefaultCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(test:integer);COLNAME="1" VALIGN="TOP" MOREROWS="0"UntypedCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(test);COLNAME="1" VALIGN="TOP" MOREROWS="0"Open-arrayCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(test:array of integer);COLNAME="1" VALIGN="TOP" MOREROWS="0"Variant open-arrayCOLNAME="2" VALIGN="TOP" MOREROWS="0"procedure oper(test:array of const);ID="40371"Mapping InheritanceInheritance The Delphi code generator provides support for inheritance among ObjectTeam classes that represent class units, form units, and data module containers.Disjoint and overlapping inheritanceTERM1="disjoint inheritance"TERM1="overlapping inheritance"In ObjectTeam, you can specify either disjoint or overlapping inheritance. The Delphi code generator does not distinguish between the two types of inheritance.Multiple inheritanceDelphi does not support multiple inheritance; therefore, the code generator displays an error if you attempt to generate code for a class that has more than one parent.ExampleThe following code excerpt shows how the code generated for the Rectangle subclass references the Shape superclass.FILENAME="00580.unk" ORIGFILE="pics/inher.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"unit RectangleUnit;interfaceuses // Start user include section // End user include section ShapeUnit;type Rectangle = class(Shape)...ID="21676"Mapping AssociationsAssociation maps to variable and methodsAn ObjectTeam association maps to a Delphi variable (the association attribute) and a set of accessor methods (the association methods). The association methods use the association attribute to implement and maintain the association.Association propertiesUse the properties of an association to effect the n Visibility and data type of the generated association attributen Visibility of the generated association methodsSee REFID="31507" TYPE="XREF-TEXTCOPY"Specifying Association Properties.Supported associationsTERM1="mapping" TERM2="association"TERM1="association" TERM2="mapping of"ObjectTeam and the Delphi code generator support the following:n Binary association (associations between two classes)n Qualified associations (associations that include a qualifier)n Association classes (class used to define an association)Note: The Delphi code generator also supports OMT link attributes, which are similar to association classes.TERM1="n-ary association"TERM1="association" TERM2="n-ary"N-ary associationsN-ary associations are ignored by the Delphi code generator. Code is generated for the classes involved, but no code is generated for the n-ary association.AggregationsTERM1="aggregation"The Delphi code generator translates aggregations like associations, unless the aggregrations are being used to model forms or data module containers. See Chapter 4, Modeling Forms and Data Modules, for more information.Ordered associationsThe {ordered} indicator on an association is ignored by the Delphi code generator. In lists of associations generated by the Delphi code generator, new elements are always added to the front of the list.+ is this true?In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20174" TYPE="XREF-TEXTCOPY"Mapping Unidirectional and Bidirectional Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'38COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39817" TYPE="XREF-TEXTCOPY"Mapping Associations Based on Multiplicity 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'43COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24359" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'49COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18809" TYPE="XREF-TEXTCOPY"Mapping Association Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'54COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31507" TYPE="XREF-TEXTCOPY"Specifying Association Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'61ID="20174"Mapping Unidirectional and Bidirectional Associations IntroductionThis section describes how the Delphi code generator implements the following simple associations between the Customer class and the Book class.Unidirectional associationFILENAME="00581.unk" ORIGFILE="pics/asscuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Bidirectional associationFILENAME="00582.unk" ORIGFILE="pics/asscbi.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Unidirectional and bidirectionalTERM1="association" TERM2="unidirectional"TERM1="unidirectional association"TERM1="association" TERM2="bidirectional"TERM1="bidirectional association"TERM1="one-to-one association"TERM1="association" TERM2="one-to-one"The direction of an association is defined by the role names on the association. A role name at the far end of the association indicates an association from the class at the near end to the class at the far end.If an association has a role name at only one end, it is a unidirectional association (implemented in one direction). If an association has role names at both ends, it is a bidirectional association (implemented in both directions).Mapping a unidirectional associationTERM1="Visual Basic" TERM2="association attribute"TERM1="Visual Basic" TERM2="association attribute access method"The Delphi code generator implements a unidirectional association by adding an association attribute and a set of association methods to the code generated for the class at the near end of the association. This allows the class at the near end of the association (Customer) to access the class at the far end (Book); the class at the far end of the association cannot access the class at the near end.Mapping a bidirectional associationThe Delphi code generator implements a bidirectional association by adding an association attribute and a set of association methods to the code generated for both classes. This allows each class to access the other. To ensure integrity of a bidirectional association, the update method for a bidirectional association always maintains the association in both directions.Example of a unidirectional associationFollowing is an excerpt from the code generated for the Customer class in the unidirectional association. Because this is a unidirectional association, the Book class does not contain any code related to the association.Notice the following:n The association attribute, Customer.possessionRef, implements the association between the Customer and the Book.n The remove, set, and get methods manage the association:- The removePossession method can be used to remove the association name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the Customer no longer owns the Book.- The setPossession method can be used to add the association name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the Customer purchases the Book.- The getPossession method can be used to retrieve the association name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' which Book (if any) the Customer owns....type Customer = class private ... // Association attributes possessionRef: Pointer; ... public ... // Association methods function getPossession: Pointer; procedure setPossession(newBook: Pointer); procedure removePossession; ...implementation...function Customer.getPossession: Pointer;begin getPossession := possessionRef;end;procedure Customer.setPossession(newBook: Pointer);begin possessionRef := newBook;end;procedure Customer.removePossession;begin possessionRef := NIL;end;end.Example of a bidirectional associationFollowing is an excerpt from the code generated for the Customer class in the bidirectional association. Because this is a bidirectional association, the Book class contains similar code.Notice the following:n As in the previous example, the remove, set, and get methods update the association attribute Customer.possessionRef to reflect the association between the Customer and the Book.n Because this is a bidirectional association, the remove and set methods also update the complementary association between the Book and the Customer. To update the complementary association, the association methods defined in the Customer class use the association methods defined in the Book class.n Because this is a bidirectional association, when a Customer is deleted, if the Customer is associated with a Book, the association between the Book and the Customer must also be deleted. The destructor for Customer removes that association....type Customer = class private ... // Association attributes possessionRef: Pointer; ... public ... // Association methods function getPossession: Pointer; procedure setPossession(newBook: Pointer); procedure removePossession; ...implementation...destructor Customer.Destroy; // Start user section // End user sectionbegin // Start user section // End user section removePossession; inherited Destroy;end;...function Customer.getPossession: Pointer;begin getPossession := possessionRef;end;procedure Customer.setPossession(newBook: Pointer);begin if (newBook <> NIL) then begin if (newBook <> possessionRef) then begin if (possessionRef <> NIL) then begin Book(possessionRef).removeOwner; end; possessionRef := newBook; Book(newBook).setOwner(SELF); end; end else begin removePossession; end;end;procedure Customer.removePossession;var oldBook: Book;begin if (possessionRef <> NIL) then begin oldBook := possessionRef; possessionRef := NIL; oldBook.removeOwner(); end;end;end.ID="39817"Mapping Associations Based on MultiplicityIntroductionThe code generated for an association depends on the multiplicity of the association. This section shows an example of the code generated for each type of association. For simplicity, all of the associations shown in this section are unidirectional associations.Warning: The Delphi code generator does not support mandatory-mandatory bidirectional associations. Such associations cause a code generation error.PrerequisiteThis section assumes that you are familiar with the information in REFID="20174" TYPE="XREF-TEXTCOPY"Mapping Unidirectional and Bidirectional Associations.ID="19832"Zero or oneIn the following example, each Customer can have zero or one Books:FILENAME="00583.unk" ORIGFILE="pics/asscuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Following is an excerpt from the code generated for this Customer class. Notice the following:n The get method retrieves the association (if any).n The set method creates an association between the Customer and a Book. A Customer can have at most one Book; therefore, if the Customer already has a Book, the set method replaces the old Book with the new one.n The remove method removes the association (if any) between this Customer and a Book.type Customer = class private ... // Association attributes possessionRef: Pointer; ... public ... // Association methods function getPossession: Pointer; procedure setPossession(newBook: Pointer); procedure removePossession; ...implementation...function Customer.getPossession: Pointer;begin getPossession := possessionRef;end;procedure Customer.setPossession(newBook: Pointer);begin possessionRef := newBook;end;procedure Customer.removePossession;begin possessionRef := NIL;end;...Exactly oneIn the following example, each Customer must have exactly one Book:FILENAME="00584.unk" ORIGFILE="pics/asscone.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Following is an excerpt from the code generated for this Customer class. Notice the following:n A Customer must have a Book, therefore, the class constructor creates the association between the Customer and a Book.n The get method retrieves the association (if any).n The set method creates an association between the Customer and a Book. A Customer must have exactly one Book; therefore, the set method replaces the old Book with the new one.n The association cannot be removed, therefore, no remove method is generated.n The association attribute, Customer.possessionRef, is public rather than private. See REFID="30500" TYPE="XREF-TEXTCOPY"Visibility of an association attribute.type Customer = class ... public ... // Association attributes possessionRef: Pointer; ... // Association methods function getPossession: Pointer; procedure setPossession(newBook: Pointer); ...implementation...constructor Customer.Create(newpossession: Book); // Start user section // End user sectionbegin if (newpossession <> NIL) then begin possessionRef := newpossession; end else raise EInvalidOp.Create('Object newpossession has mandatory relation. NIL object reference not allowed.'); inherited Create; // Start user section // End user sectionend;...function Customer.getPossession: Pointer;begin getPossession := possessionRef;end;procedure Customer.setPossession(newBook: Pointer);begin if (newBook <> NIL) then begin possessionRef := newBook; end;end;...ManyIn the following example, each Customer can have zero or more Books:FILENAME="00585.unk" ORIGFILE="pics/asscmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Following is an excerpt from the code generated for this Customer class. Notice the following:n The association attribute is a TList object, which allows the attribute to store and maintain the list of associated objects. The Customer class constructor creates the TList object; the class destructor destroys it.n The add method adds an association to the set of associations. If the association is already in the set, the add method does nothing.n The get method retrieves the set of associations.n The remove method removes an association from the set. If the association is not in the set, the remove method does nothing.type Customer = class private ... // Association attributes possessionSet: TList; ... public ... // Association methods procedure addPossession(newBook: Pointer); function getPossession: TList; procedure removePossession(oldBook: Pointer); ...implementation...constructor Customer.Create; // Start user section // End user sectionbegin inherited Create; possessionSet := TList.Create; // Start user section // End user sectionend;destructor Customer.Destroy; // Start user section // End user sectionbegin // Start user section // End user section possessionSet.Destroy; inherited Destroy;end;...procedure Customer.addPossession(newBook: Pointer);begin if (possessionSet.IndexOf(newBook) = -1) then begin possessionSet.Add(newBook); end;end;function Customer.getPossession: TList;begin getPossession := possessionSet;end;procedure Customer.removePossession(oldBook: Pointer);begin if (possessionSet.IndexOf(oldBook) <> -1) then begin possessionSet.Remove(oldBook); end;end;...Many, numerically specifiedIn the following example, each Customer can have at most 10 Books. The Delphi code generator ignores the more specific value. The code generated for this association is the same as that shown above.FILENAME="00586.unk" ORIGFILE="pics/asscnum.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"ID="24359"Mapping Qualified AssociationsIntroductionTERM1="association" TERM2="qualified"TERM1="qualified association"TERM1="mapping" TERM2="qualified association"The mapping of a qualified association, is similar to that of an association with multiplicity of many. For a qualified association, however, the qualifier (bookID, in the following example) is used to identify each association in the set of associations.PrerequisiteThis section assumes that you are familiar with the information in REFID="39817" TYPE="XREF-TEXTCOPY"Mapping Associations Based on Multiplicity.Qualified associationThis section describes how the Delphi code generator implements the following associations between the Customer class and the Book class. FILENAME="00587.unk" ORIGFILE="pics/asscqual.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Maintained from the qualified classA qualified association must be a bidirectional association. The association can be retrieved from either class. The association is created, deleted, and updated from the qualified class (in this example, the Customer class).How to edit qualifier propertiesTERM1="Edit Properties (Item menu)" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="editing properties"You must specify the data type of the qualifier by editing the association properties.Σ To specify the data type of the qualifier:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a qualifier from the list on the left side of the dialog box.The qualifier properties appear on the right side of the dialog box.4 Select the desired properties:COLS="3"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="63p"COLNAME="3" COLWIDTH="243p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Mandatory. Data type of the qualifier.COLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Comment that does not appear in the generated code.5 Select OK.ClassDict classFor a qualified association, the association attribute is a ClassDict object. The ClassDict class, which is supplied with the Delphi code generator, includes special methods for handling qualifiers. The association methods use the ClassDict methods to access the qualifier.Note: ObjectTeam copies the ClassDict class to your user environment when you configure your Implementation environment, as described in REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your PowerBuilder Environment.Generated Customer codeFollowing is an excerpt from the code generated for the Customer class shown above. Notice the following:n The Customer.possession association is managed using an association attribute of type ClassDict and the bookID index.n The Customer class constructor creates the ClassDict object that is the association attribute.n The Customer class destructor removes all associations from Books to this Customer class, then deletes the ClassDict object that is the association attribute.n Because this is a bidirectional association, the add and remove methods update both the Customer-Book and Book-Customer associations.n The get method uses the bookID index to retrieve the set of associated Books....type Customer = class private ... // Association attributes possessionDict: TClassDict; ... public ... // Association methods procedure addPossession(bookID: Integer; newBook: Pointer); function getPossession(bookID: Integer): TList; procedure removePossession(bookID: Integer; oldBook: Pointer); ...implementation...constructor Customer.Create; // Start user section // End user sectionbegin inherited Create; possessionDict := TClassDict.Create; // Start user section // End user sectionend;destructor Customer.Destroy;var tmppossessionSet: TList; tmppossession: Book; // Start user section // End user sectionbegin // Start user section // End user section while (possessionDict.Count <> 0) do begin tmppossessionSet := possessionDict.First; while (tmppossessionSet.Count > 0) do begin tmppossession := tmppossessionSet.First; tmppossession.ownerRef := NIL; tmppossessionSet.Remove(tmppossession); end; possessionDict.Remove(tmppossessionSet); end; possessionDict.Destroy; inherited Destroy;end;...procedure Customer.addPossession(bookID: Integer; newBook: Pointer);var temppossessionSet: TList;begin Book(newBook).ownerRef := SELF; if (possessionDict.Item(bookID) <> NIL) then begin temppossessionSet := possessionDict.Item(bookID); end else begin temppossessionSet := TList.Create; possessionDict.Add(bookID, temppossessionSet) end; temppossessionSet.Add(newBook);end;function Customer.getPossession(bookID: Integer): TList;begin getPossession := possessionDict.Item(bookID);end;procedure Customer.removePossession(bookID: Integer; oldBook: Pointer);var temppossessionSet: TList;begin temppossessionSet := possessionDict.Item(bookID); if temppossessionSet <> NIL then begin Book(oldBook).ownerRef := NIL; temppossessionSet.Remove(oldBook); if (temppossessionSet.Count = 0) then begin possessionDict.RemoveUsingKey(bookID); end; end;end;...Generated Book codeFollowing is an excerpt from the code generated for the Book class shown above. Notice the following:n The get method retrieves the owner of the Book.n No add or remove methods are generated. The association is created, updated, and deleted from the Customer class.n The association attribute, Book.ownerRef, is public rather than private. See REFID="30500" TYPE="XREF-TEXTCOPY"Visibility of an association attribute....type Book = class ... public ... // Association attributes ownerRef: Pointer; ... // Association methods function getOwner: Pointer; ...implementation...function Book.getOwner: Pointer;begin getOwner := ownerRef;end;...ID="18809"Mapping Association ClassesID="33544"Classes on associationsYou can specify information about an association by linking a class to the association, as shown in the following diagram:FILENAME="00588.unk" ORIGFILE="pics/assclnk.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"ID="19936"Association mapped as two associationsDuring code generation, an association with an association class is transformed (internally only, the model is not changed). The generated code is then based on the transformed association. The transformation replaces the original association with associations from the association class to the two other classes.FILENAME="00589.unk" ORIGFILE="pics/assccnv.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"Role names are requiredAs with all associations, role names are required. If a role name is omitted, the association attributes and methods that would map to that role name are not generated.OMT notation and link attributesIf you are using OMT notation, you can use either an association class or link attributes. The code generated for a link attribute is similar to that generated for an association class.When ObjectTeam transforms a link attribute association, it creates a new class for the link attributes. The name of the new class is the name of the association. Therefore, an association that has a link attribute must have an association name.Generated Purchase codeFollowing is the code generated for the Purchase class. The code reflects the transformed CD (REFID="19936" TYPE="XREF-TEXTCOPY"Association mapped as two associations).n The Purchase class constructor creates the two mandatory associations: Purchase-to-Customer and Purchase-to-Book. Because the associations are bidirectional, it also creates the complementary associations: Customer-to-Purchase and Book-to-Purchase.n The Purchase class destructor removes the Customer-to-Purchase and Book-to-Purchase associations.n Two get methods retrieve the associated Customer and associated Book.n Two set methods update the two mandatory associations: Purchase-to-Customer and Purchase-to-Book. Because the associations are bidirectional, they also update the complementary associations: Customer-to-Purchase and Book-to-Purchase.n The associations are mandatory. They cannot be removed. Therefore, no remove methods are generated.n The association attributes, ownerRef and possessionRef, are public rather than private. See REFID="30500" TYPE="XREF-TEXTCOPY"Visibility of an association attribute....type ... public ... // Association attributes ownerRef: Pointer; possessionRef: Pointer; ... // Association methods function getPossession: Pointer; procedure setPossession(newBook: Pointer); procedure setOwner(newCustomer: Pointer); function getOwner: Pointer; ...implementation...constructor Purchase.Create(newowner: Customer; newpossession: Book); // Start user section // End user sectionbegin if (newowner <> NIL) then begin ownerRef := newowner; Customer(ownerRef).purchaseofpossessionSet.Add(SELF); end else raise EInvalidOp.Create('Object newowner has mandatory relation. NIL object reference not allowed.'); if (newpossession <> NIL) then begin possessionRef := newpossession; Book(possessionRef).purchaseofownerRef := SELF; end else raise EInvalidOp.Create('Object newpossession has mandatory relation. NIL object reference not allowed.'); inherited Create; // Start user section // End user sectionend;destructor Purchase.Destroy; // Start user section // End user sectionbegin // Start user section // End user section Customer(ownerRef).purchaseofpossessionSet.Remove(SELF); Book(possessionRef).purchaseofownerRef := NIL; inherited Destroy;end;...function Purchase.getPossession: Pointer;begin getPossession := possessionRef;end;procedure Purchase.setPossession(newBook: Pointer);begin if (newBook <> NIL) then begin if (Book(newBook).getPurchaseofowner = NIL) then begin Book(possessionRef).purchaseofownerRef := NIL; possessionRef := newBook; Book(newBook).purchaseofownerRef := SELF; end; end;end;procedure Purchase.setOwner(newCustomer: Pointer);begin if (newCustomer <> NIL) then begin if (newCustomer <> ownerRef) then begin if (ownerRef <> NIL) then begin Customer(ownerRef).purchaseofpossessionSet.Remove(SELF); end; ownerRef := newCustomer; Customer(newCustomer).addPurchaseofpossession(SELF); end; end;end;function Purchase.getOwner: Pointer;begin getOwner := ownerRef;end;...Generated Customer codeFollowing is the code generated for the Customer class. The code reflects the transformed CD (REFID="19936" TYPE="XREF-TEXTCOPY"Association mapped as two associations).n The Customer class constructor creates the TList object that is the association attribute for the many association: Customer-to-Purchase. n The Customer class destructor destroys the TList object. Because of the mandatory relationship from Purchase to Customer, the Customer class destructor raises an error if a Purchase has an association with this Customer.n The get method retrieves the set of associated Purchases.n The add method adds a Purchase to the set of associated Purchases. Because this is a bidirectional association, it also sets the complementary association: Purchase-to-Customer.n No remove method is generated because a Purchase must have a Customer.n The association attribute, Customer.purchaseofpossessionSet, is public rather than private. See REFID="30500" TYPE="XREF-TEXTCOPY"Visibility of an association attribute....type Customer = class ... public ... // Association attributes purchaseofpossessionSet: TList; ... // Association methods function getPurchaseofpossession: TList; procedure addPurchaseofpossession(newPurchase: Pointer); ...implementation...constructor Customer.Create; // Start user section // End user sectionbegin inherited Create; purchaseofpossessionSet := TList.Create; // Start user section // End user sectionend;destructor Customer.Destroy; // Start user section // End user sectionbegin // Start user section // End user section if (purchaseofpossessionSet.Count <> 0) then raise EInvalidOp.Create('Illegal object destruction. Mandatory relation purchaseofpossessionSet not empty.'); purchaseofpossessionSet.Destroy; inherited Destroy;end;...function Customer.getPurchaseofpossession: TList;begin getPurchaseofpossession := purchaseofpossessionSet;end;procedure Customer.addPurchaseofpossession(newPurchase: Pointer);begin if (purchaseofpossessionSet.IndexOf(newPurchase) = -1) then begin purchaseofpossessionSet.Add(newPurchase); Purchase(newPurchase).setOwner(SELF); end;end;...Generated Book codeFollowing is the code generated for the Book class. The code reflects the transformed CD (REFID="19936" TYPE="XREF-TEXTCOPY"Association mapped as two associations).n Because of the mandatory relationship from Purchase to Book, the Book class destructor raises an error if a Purchase has an association with this Book.n The get method retrieves the associated Purchase.n No remove method is generated because a Purchase must have a Book.n No set method is generated because the association is maintained by the Purchase class.n The association attribute, Book.purchaseofownerRef, is public rather than private. See REFID="30500" TYPE="XREF-TEXTCOPY"Visibility of an association attribute....type Book = class ... public ... // Association attributes purchaseofownerRef: Pointer; ... // Association methods function getPurchaseofowner: Pointer; ...implementation...destructor Book.Destroy; // Start user section // End user sectionbegin // Start user section // End user section if (purchaseofownerRef <> NIL) then raise EInvalidOp.Create('Illegal object destruction. Object purchaseofowner with mandatory relation exists.'); inherited Destroy;end;...function Book.getPurchaseofowner: Pointer;begin getPurchaseofowner := purchaseofownerRef;end;...ID="31507"Specifying Association PropertiesIntroductionUse the properties of an association to effect the visibility and data type of the generated association attribute, and the visibility of the generated association methods.How to edit association attribute propertiesTERM1="Edit Properties (Item menu)" TERM2="for association"TERM1=""TERM1="association attribute property" TERM2="editing"Σ To edit association properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a role name from the list on the left side of the dialog box.Note: For a qualified attribute, you can select either a role name or the qualifier. REFID="24359" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations describes the qualifier properties.The association properties appear on the right side of the dialog box.FILENAME="00590.unk" ORIGFILE="pics/asscprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"4 Select the desired properties:COLS="4"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="63p"COLNAME="3" COLWIDTH="180p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies attribute visibility (public, private, protected, published).COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="30500" TYPE="XREF-TEXTCOPY"Visibility of an association attributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Access MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies visibility of the association methods (public, private, protected, published).COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="11796" TYPE="XREF-TEXTCOPY"Visibility of association methodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association ImplementationCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the data type of the association attribute (pointer, object reference). Ignored for qualified associations and associations with multiplicity of many.COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="33250" TYPE="XREF-TEXTCOPY"Data type of an association attributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Comment that does not appear in the generated code.COLNAME="4" VALIGN="TOP" MOREROWS="0"5 Select OK.ID="30500"Visibility of an association attributeBy default, the code generator creates private association attributes. You can use the Association Access property to change the visibility of an association attribute. Changing the visibility of an association attribute is similar to changing the visibility of an attribute. See REFID="40016" TYPE="XREF-TEXTCOPY"Specifying Visibility of a Variable.Public association attributesIn the following cases, the code generator ignores the Association Access property and creates public association attributes:n Mandatory (exactly one) associationsn Qualified associationsn Class associationsIn these cases, the current class does not include all the association methods; instead, the associated class updates the association attribute. The association attribute is public so that the associated class can update it.ID="11796"Visibility of association methodsBy default, the code generator creates public association methods. You can use the Access Methods group box to specify the visibility of the generated methods and to prevent association methods from being generated. Changing the visibility of association methods is similar to changing the visibility of the access methods for an attribute. See REFID="16861" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Variables.Public association methodsThe association methods for bidirectional associations must be public. Therefore, for bidirectional associations, the code generator ignores the Access Methods group box and creates publc association methods.ID="33250"Data type of an association attributeFor an association that has a maximum multiplicity of one, you can generate the association attribute as a Pointer (default) or as an instance of the associated class. Use the Association Implementation property to select the data type that you want to use.For an association with a multiplicity of many, the generated association attribute is a TList object (see REFID="39817" TYPE="XREF-TEXTCOPY"Mapping Associations Based on Multiplicity). The Association Implementation property of the association is ignored.For a qualified association, the generated association attribute is a ClassDict object (see REFID="24359" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations). The Association Implementation property of the association is ignored.ExampleIn the following example, the Association Implementation property of the association is set to Object Reference. In code generated for the Customer class, the association attribute is a Book. REFID="19832" TYPE="XREF-TEXTCOPY"Zero or one shows the same example with the Association Implementation property of the association set to Pointer (the default).FILENAME="00591.unk" ORIGFILE="pics/asscuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...type Customer = class private ... // Association attributes possessionRef: Book; ... public ... // Association methods function getPossession: Book; procedure setPossession(newBook: Book); procedure removePossession; ...implementation...function Customer.getPossession: Book;begin getPossession := possessionRef;end;procedure Customer.setPossession(newBook: Book);begin possessionRef := newBook;end;procedure Customer.removePossession;begin possessionRef := NIL;end;...ID="31687"Mapping Special ClassesSpecial classesUse special classes to generate type declarations for records, enumerated types, sets, pointers, and file pointers.Generated unit fileThe generated unit (.pas) file for a special class contains only a type declaration.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36406" TYPE="XREF-TEXTCOPY"Records 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'66COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34171" TYPE="XREF-TEXTCOPY"Enumerated Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'68COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20611" TYPE="XREF-TEXTCOPY"Sets 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'70COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20063" TYPE="XREF-TEXTCOPY"Pointers 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'72ID="36406"RecordsHow to model a recordΣ To generate a record, in ObjectTeam:1 Create an ObjectTeam class. The name of the class is the record name.2 Set the Class Type property to Record.3 Create an attribute to represent each field in the record.The class cannot have operations, associations, superclasses, or subclasses.ExampleThe following illustration shows the customerRecord class. The Class Type property is set to Record. The generated unit (.pas) file follows the illustration.FILENAME="00592.unk" ORIGFILE="pics/cdrec.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...unit customerRecordUnit;interfaceuses // Start user include section // End user include sectiontype customerRecord = record name: String; address: String;end;implementation // Start user include section // End user include section// Do not delete this line -- regeneration markerend.Using the generated recordTypically, you use a generated record by creating a variable of that record type. The code generator automatically adds the unit (.pas) file for the record type declaration to the uses clause of the referencing unit.ExampleThe following illustration shows a class that defines a customerRecord variable. An excerpt of the generated code follows the illustration.FILENAME="00593.unk" ORIGFILE="pics/cdrecu.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...unit accountUnit;interfaceuses // Start user include section // End user include section customerRecordUnit;type account = class private // User defined attributes accountID: Integer; customer: customerRecord;...ID="34171"Enumerated TypesIntroductionEnumerated types are similar to sets.How to model an enumerated typeΣ To generate an enumerated type:1 Create an ObjectTeam class. The name of the class is the name of the enumerated type.2 For each member of the enumerated list, create a class attribute with data type enum.The class cannot have operations, associations, superclasses, or subclasses.ExampleThe following illustration shows the riskTolerance class. The generated unit (.pas) file follows the illustration.FILENAME="00594.unk" ORIGFILE="pics/cdenum.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...unit riskToleranceUnit;interface // Start user include section // End user include sectiontype riskTolerance = (high, medium, low);implementation // Start user include section // End user include section// Do not delete this line -- regeneration markerend.Using the enumerated typeTypically, you use an enumerated type by creating a variable of that type. The code generator automatically adds the unit (.pas) file for the enumerated type to the uses clause of the referencing unit.FILENAME="00595.unk" ORIGFILE="pics/cdenumu.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...unit accountUnit;interfaceuses // Start user include section // End user include section riskToleranceUnit;type account = class private // User defined attributes accountID: Integer; risk: riskTolerance;...In the body of a procedure, you could then set the value of the risk variable as follows:risk:=high;ID="20611"SetsIntroductionSets are similar to enumerated lists.How to model a setΣ To generate a set, in ObjectTeam:1 Create an ObjectTeam class. The name of the class is the name of the set.2 Set the Class Type property to Set.3 For each member of the set, create a class attribute with data type enum.The class cannot have operations, associations, superclasses, or subclasses.ExampleThe following illustration shows the riskTolerance class. The Class Type property is set to Set. The generated unit (.pas) file follows the illustration.FILENAME="00596.unk" ORIGFILE="pics/cdenum.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...unit riskToleranceUnit;interface // Start user include section // End user include sectiontype riskTolerance = set of (high, medium, low);implementation // Start user include section // End user include section// Do not delete this line -- regeneration markerend.Using the generated setReferencing a set is similar to referencing an enumerated type. You use a set by creating a variable of that type. The code generator automatically adds the unit (.pas) file for the set to the uses clause of the referencing unit. See the example in REFID="34171" TYPE="XREF-TEXTCOPY"Enumerated Types.ID="20063"PointersTwo ways to model pointersYou can model a pointer using an attribute or a class.n Attribute. Use an attribute to generate a pointer variable in the unit file generated for the owner class.n Class. Use a class to generate a unit file that contains only the type declaration for the pointer.How to model a pointer using an attributeΣ To model a pointer using an attribute:1 Create an attribute.2 Set the attribute's Type Modifier property to Pointer (or File).Note: Pointer or File are provided in a drop-down list. You can enter any other modifier by typing a value into the Type Modifier field.3 Set both Attribute Access (Read and Write) fields to None. This prevents the code generator from generating the read and write access methods for the attribute.Warning: The code generator displays an error if you attempt to generate attribute access methods for a modified attribute.Attribute examplesThe following table shows a few examples: COLS="4"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="108p"COLNAME="3" COLWIDTH="108p"COLNAME="4" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"TYPE MODIFIERCOLNAME="4" VALIGN="TOP" MOREROWS="0"Generated DeclarationCOLNAME="1" VALIGN="TOP" MOREROWS="0"ptrCOLNAME="2" VALIGN="TOP" MOREROWS="0"IntegerCOLNAME="3" VALIGN="TOP" MOREROWS="0"PointerCOLNAME="4" VALIGN="TOP" MOREROWS="0"ptr: ^Integer;COLNAME="1" VALIGN="TOP" MOREROWS="0"filePtrCOLNAME="2" VALIGN="TOP" MOREROWS="0"IntegerCOLNAME="3" VALIGN="TOP" MOREROWS="0"FileCOLNAME="4" VALIGN="TOP" MOREROWS="0"filePtr: file of Integer;COLNAME="1" VALIGN="TOP" MOREROWS="0"myAttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"IntegerCOLNAME="3" VALIGN="TOP" MOREROWS="0"mymodifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"myAttribute: mymodifier;How to model a pointer using a classΣ To model a pointer using a class:1 Create an ObjectTeam class. The name of the class does not matter.2 Create one attribute for the class.3 Set the attribute's Type Modifier property to Pointer (or File).Note: Pointer or File are provided in a drop-down list. You can enter any other modifier by typing a value into the Type Modifier field.The class cannot have other attibutes, operations, associations, superclasses, or subclasses.Class exampleThe following illustration shows a class that defines a pointer to a customerRecord. The Type Modifier property of the custPtr attribute is set to Pointer. The generated code follows the illustration.FILENAME="00597.unk" ORIGFILE="pics/cdptr.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...unit customerPointerUnit;interfaceuses // Start user include section // End user include section customerRecordUnit;type customerPointer = ^customerRecord;implementation // Start user include section // End user include section// Do not delete this line -- regeneration markerend.Using the generated pointerTypically, you use a generated pointer by creating a variable of that type. The code generator automatically adds the unit (.pas) file for the pointer type declaration to the uses clause of the referencing unit.Warning: In this example, the pointer points to a record. The unit file that defines the record (customerRecordUnit) is not automatically added to the uses clause. You must add it to the user include section. In the following code excerpt, the bolded text was manually added to the generated code....unit accountUnit;interfaceuses // Start user include sectioncustomerRecordUnit, // End user include section customerPointerUnit;type account = class private // User defined attributes accountID: Integer; customer: customerPointer;...ID="34377"InterfacesDelphi 3.0Delphi 3.0 supports object interfaces; Delphi 2.0 does not.How to model an interfaceΣ To generate an interface, in ObjectTeam:1 Create an ObjectTeam class. The name of the class is the name of the set.2 Set the Class Type property to Interface.3 Optionally, use the Interface Identifier property to specify the interface identifier.4 Create attributes and operations to represent the properties and methods of the interface. See REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi Properties and REFID="37299" TYPE="XREF-TEXTCOPY"Mapping Operations for more information.The class cannot have associations, superclasses, or subclasses. All attributes of the class must represent properties.ExampleThe online help for Delphi 3 provides an example of mapping interface methods. The following illustration shows the ObjectTeam class that generates the IMalloc interface shown in that example. The properties are set as shown in the following table. The generated code follows the illustration.COLS="3"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="198p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"IMallocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Interface IdentifierCOLNAME="3" VALIGN="TOP" MOREROWS="0"00000002-...-000000000046COLNAME="1" VALIGN="TOP" MOREROWS="0"All operationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Calling ConventionCOLNAME="3" VALIGN="TOP" MOREROWS="0" StdCallFILENAME="00598.unk" ORIGFILE="pics/cdintf.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgen.fm5.mif"...unit IMallocUnit;interface // Start user include section // End user include sectiontype IMalloc = interface ['{00000002-0000-0000-C000-000000000046}'] // User defined methods function Alloc(Size: Integer): Pointer; stdcall; function DidAlloc(P: Pointer): Integer; stdcall; procedure Free(P: Pointer); stdcall; function GetSize(P: Pointer): Integer; stdcall; procedure HeapMinimize; stdcall; function Realloc(P: Pointer; Size: Integer): Pointer; stdcall; // Properties end;implementation // Start user include section // End user include section// Do not delete this line -- regeneration markerend.Chapter 4 Modeling ID="20051"Forms and Data ModulesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for DelphiFormsA Delphi form is a Delphi unit that has an associated form (.txt/.dfm file). Forms can contain visual and nonvisual components. A form is a subclass of the VCL class TForm.This chapter describes how to model forms. It provides examples of CDs and the results produced when you generate Delphi files.Data module containersA Delphi data module container is a Delphi class that has an associated data module (.txt/.dfm file). Data module containers can contain only nonvisual components. A data module container is a subclass of the VCL class TDataModule.Data module containers and forms are modeled in the same way. This chapter focuses on modeling forms, but the information also applies to modeling data module containers.Attributes, operations, and associationsForms and data module containers are Delphi classes. ObjectTeam classes that represent forms and data modules can, therefore, have attributes, operations, and associations. The code generated for these features is described in REFID="33269" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Classes to Units.For simplicity, the sample classes in this chapter have no attributes, operations, or associations (except those that are used to model the form).Class namesCayenne strongly recommends that you follow the Delphi convention of beginning each class name with a capital T. This is mandatory for forms and data models.PrerequisiteBefore you can model forms and data module containers in ObjectTeam, you must add the DelphiVCL system to the Object Design phase of your project. This system defines ObjectTeam classes that represent the most commonly used classes in Delphi's Visual Component Library (VCL).For more informationSee REFID="10153" TYPE="XREF-TEXTCOPY"Configuring Your Delphi Environment and REFID="36394" TYPE="XREF-TEXTCOPY"Chapter 6, Editing the DelphiVCL System.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33022" TYPE="XREF-TEXTCOPY"Basic Modeling Technique 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27251" TYPE="XREF-TEXTCOPY"Modeling Forms 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42492" TYPE="XREF-TEXTCOPY"Modeling Menus 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16545" TYPE="XREF-TEXTCOPY"Modeling Components 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16521" TYPE="XREF-TEXTCOPY"Reusing Menus and Container Components 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18ID="33022"Basic Modeling TechniqueIntroductionThis section describes the basic technique for modeling forms in ObjectTeam.ID="27817"Sample formThe following form, a TV console, is modeled as an example:FILENAME="00599.unk" ORIGFILE="pics/formend.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgui.fm5.mif"ID="25036"Sample CDThe following CD models the TV console form:FILENAME="00600.unk" ORIGFILE="pics/formcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgui.fm5.mif"In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42715" TYPE="XREF-TEXTCOPY"Modeling the Form 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15442" TYPE="XREF-TEXTCOPY"Adding Events 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27196" TYPE="XREF-TEXTCOPY"Completing the Form 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28117" TYPE="XREF-TEXTCOPY"Alternative Technique 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="42715"Modeling the FormIntroductionThis section describes the construction of the CD shown at the beginning of this section (see REFID="25036" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3).DelphiVCL classesTERM1="vb_gui_lib system"The folded classes in the CD (TImage, TGroupBox, TForm, TButton, and TLabel) are defined in the DelphiVCL system. Notice that every class used to model the form is a subclass of a class defined in the DelphiVCL system.You create a class to represent each component that you want to create. You specify the type of component that you want to create by making your class a subclass of the appropriate DelphiVCL class. For example:n The TConsole class represents a form, therefore, it is a subclass of the TForm class.n The TMonitor class represents an image, therefore, it is a subclass of the TImage class.n The TControls class represents a group box, therefore, it is a subclass of the TGroupBox class.Steps for modeling the formTERM1="Visual Basic" TERM2="forms, modeling"TERM1="form" TERM2="basic modeling"The following table summarizes the steps used to create the CD:COLS="2"COLNAME="1" COLWIDTH="36p"COLNAME="2" COLWIDTH="414p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the TConsole class to represent the form. Also, add the TForm class and make TConsole a subclass of TForm.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Set the Main Form property of the TConsole class. Optionally, add attributes and operations to the TConsole class.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the TControls class to represent the group box that contains the TV controls (the TV monitor and channel buttons). Also, add the TGroupBox class and make TControls a subclass of TGroupBox.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the TMonitor class to represent an image component that can be used as the TV screen. Add the TImage class and make TMonitor a subclass of TImage.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the TUpBtn and TDownBtn classes to represent the command buttons. Add the TButton class and make TUpBtn and TDownBtn subclasses of TButton.COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the TChannel, TBrand, and TTime classes to represent the labels. Add the TLabel class and make TChannel, TBrand, and TTime subclasses of TLabel.COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"The TControls group box contains four components: TMonitor, TChannel, TUpBtn, and TDownBtn. It is an aggregation of these components. Create the four relationships that define the aggregation. Each relationship must have a role name. The role name will be the component name in Delphi; for example, in Delphi, ChannelLbl will be the name of the TChannel component.COLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"The TConsole form is an aggregation of three components: the TControls group box and the TBrand and TTime labels. Create the three relationships that define the aggregation.COLNAME="1" VALIGN="TOP" MOREROWS="0"9COLNAME="2" VALIGN="TOP" MOREROWS="0"Add Click events to the TUpBtn class and TDownBtn class. See REFID="15442" TYPE="XREF-TEXTCOPY"Adding Events for more information.COLNAME="1" VALIGN="TOP" MOREROWS="0"10COLNAME="2" VALIGN="TOP" MOREROWS="0"For each class that is not defined in the DelphiVCL system, select Item | Edit properties. If the Define item button is available, select it to define the class item. See REFID="36562" TYPE="XREF-TEXTCOPY"All classes must be defined items for more information.FormsTERM1="form" TERM2="representing in ObjectTeam"A class that represents a form is similar to a class that represents a class module. It can contain the following features:n Attributes, as described in REFID="13392" TYPE="XREF-TEXTCOPY"Mapping Attributesn Operations, as described in REFID="37299" TYPE="XREF-TEXTCOPY"Mapping Operations and REFID="15442" TYPE="XREF-TEXTCOPY"Adding Eventsn Associations to other classes that represent either forms or class modules, as described in REFID="21676" TYPE="XREF-TEXTCOPY"Mapping AssociationsComponentsTERM1="controls" TERM2="representing in ObjectTeam"A class that represents a component is a special type of class.n It must not have attributes.n It should not have associations, other than the aggregations used to model the form. If specified, they will be ignored by the code generator (or cause errors).n Each of its operations must represent an event, as described REFID="37299" TYPE="XREF-TEXTCOPY"Mapping Operations and REFID="15442" TYPE="XREF-TEXTCOPY"Adding Events.ID="36562"All classes must be defined itemsObjectTeam generates code for class items. It does not generate code for graphical elements that do not have associated class items.When you create a class, ObjectTeam creates a graphical element. When you perform one of the following actions, ObjectTeam creates a class item:n Add an attribute, operation, or association to the classn Set a property on the classn Open the Edit Properties dialog box for the class and select the Define item button.ID="15442"Adding EventsEvents in DelphiVCLClasses in the DelphiVCL system represent the VCL classes available in Delphi. The operations and operation parameters on the DelphiVCL classes represent the events and event parameters defined in the VCL classes.How to model the formAs described in REFID="42715" TYPE="XREF-TEXTCOPY"Modeling the Form, you model a form in ObjectTeam by creating a class to represent each form and component that you want to create. You specify the type of component that you want to create by making each class a subclass of the appropriate DelphiVCL class.How to model eventsΣ To model an event for a form or component, add an operation to the ObjectTeam class that represents the form or component:n Specify the operation name as the event name without the On prefix. n Specify an empty parameter list.n Set the Event property of the operation.ExampleUse the following ObjectTeam operation to model the OnClick event. Remember to set the Event property of the operation.Click()Event parametersEvent parameters are defined on the VCL classes in the DelphiVCL system. By specifying an empty parameter list, you indicate that ObjectTeam should use the event parameters defined for the event in the DelphiVCL system. If you specify parameters, ObjectTeam uses the specified parameters rather than those defined in the DelphiVCL system.ID="27196"Completing the FormIntroductionIn ObjectTeam, you model the form content, not the form layout. When ObjectTeam generates a form for the first time, the form contains all the specified components, but only default property values. Edit the generated formTERM1="form" TERM2="layout information"When you open the generated project in Delphi, the form appears with all its components stacked in the upper left corner, as shown below. To complete the form, reposition the components and specify property values for the form and component properties.FILENAME="00601.unk" ORIGFILE="pics/formini.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgui.fm5.mif"Changes are preservedTERM1="form" TERM2="regenerating"When you regenerate the form, ObjectTeam preserves the changes that you made to the form in Delphi.n You can change the position and size of a form or component.n You can change the properties of a form or component.Note: The Name property defines the name of the form or component. This information is also stored in ObjectTeam; therefore, it is recommended that you not change the Name property.n You can add components to a form; however, you must then use round-trip engineering to add the components to the ObjectTeam model before regenerating the form.Note: If you delete components from a form, you must manually update the ObjectTeam module. Round-trip engineering does not delete the components for you.n You can add code to the body of a generated event.n You can add new events; however, you must then use round-trip engineering to add those events to the ObjectTeam model before regenerating the files.For more informationSee REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files and REFID="39943" TYPE="XREF-TEXTCOPY"Round-Trip Engineering.ID="28117"Alternative TechniqueTwo ways to model formsObjectTeam provides two ways to model forms:n Model the form and componentn Model the form onlyModel the form and componentsAs described in the previous sections, you can use ObjectTeam to model forms and components, then use Delphi to complete the generated form. The benefit of this approach is that, while modeling the application, you remain focused on the functions of the application rather than becoming distracted by the details of the GUI.Model the form onlyAlternatively, you can use the following approach:1 In ObjectTeam, model only the form.2 Generate the form.3 In Delphi, add the components and events.4 In ObjectTeam, use round-trip engineering to add the components and events to the ObjectTeam model.ID="27251"Modeling FormsTForm classTo model a form in ObjectTeam, create a class that represents the form and make it a subclass of the TForm class. Every window in a Delphi application is a form.FormStyle propertyIn Delphi, the FormStyle property of a form determines whether the form is a normal form, an MDI form, an MDI child, or a stay-on-top form. When ObjectTeam generates a form, it sets the FormStyle property to fsNormal. You can modify the FormStyle property in Delphi.Main formA Delphi project must have a main form to execute. To specify the main form in ObjectTeam, select the Main Form class property for exactly one ObjectTeam class that represents a form. (See REFID="17659" TYPE="XREF-TEXTCOPY"Editing Class Properties.)n If you do not set this property for any class, ObjectTeam selects one form as the main form for the generated project.n If you set this property for more than one class, or for a class that does not represent a form, the code generator displays an error message.ExampleSee REFID="33022" TYPE="XREF-TEXTCOPY"Basic Modeling Technique for an example of how to model a form.ID="42492"Modeling MenusTMainMenu and TMenuItem classesTERM1="Menu class"To model menus in ObjectTeam, create the following classes:n A subclass of TMainMenu to represent the menu.n A subclass of TMenuItem to represent each menu item.TMainMenu and TMenuItem are defined in the DelphiVCL system.Menu structureUse aggregations to define the menu structure.n Attach the main menu to a form.n Attach to the main menu the menu items that appear on the menu bar.n Attach to each menu item its child menu items.Note: The role names become the component names in Delphi.Sample menuFollowing is a sample menu that might be used with the TV form:FILENAME="00602.unk" ORIGFILE="pics/tvmnuend.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgui.fm5.mif"Sample CDThe following CD models the menu shown above:FILENAME="00603.unk" ORIGFILE="pics/tvmnucad.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgui.fm5.mif"Separate CD for menusFor clarity, the CD shown above defines only the menu items for the form; it does not define all the other components. Modeling your menus in a separate CD, as shown here, helps keep your CDs readable and makes your model easier to maintain.TConsole classThe CD shown here assumes that the TConsole class is defined in another CD (the CD shown in REFID="33022" TYPE="XREF-TEXTCOPY"Basic Modeling Technique). The TForm superclass is not shown in this CD because the other CD defines the TConsole class as a subclass of TForm.Complete the menu in DelphiWhen ObjectTeam generates a menu for the first time, it uses default property values. Therefore, when you open the generated project in Delphi, the menu is not attached to the form and the menu items do not have captions.FILENAME="00604.unk" ORIGFILE="pics/tvmnuini.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgui.fm5.mif"To complete the menu, in Delphi:n Add the main menu to the form by editing the Menu property of the form.n Edit the Caption property of each menu item to specify the text of the menu item. You can modify other properties, if desired.ObjectTeam preserves these changes when you regenerate the Delphi files.How to use menu templatesDelphi provides menu templates for commonly used menus, such as File, Edit, and so on. If you plan to use Delphi's menu templates, model only the main menu in ObjectTeam.Σ If you plan to use Delphi's menu templates:1 In ObjectTeam:a Model a main menu and use an aggregation to attach it to your form. Do not model the menu items.b Generate the Delphi code.2 In Delphi:a Open the main menu and insert the desired menu templates.b Optionally, add additional menu items.c Save the project.3 In ObjectTeam:a If necessary, create a CDM for the main menu class. (Round-trip engineering ignores classes that do not have CDMs.)Tip: One way to create a CDM: add an operation to the class, save the diagram, delete the operation from the class, and save the diagram again.b Use round-trip engineering to add the template menu items to your ObjectTeam model.For more information: See REFID="15125" TYPE="XREF-TEXTCOPY"Round-Trip Engineering.ID="16545"Modeling ComponentsDefinitionsContainer components are components that can contain other components; for example, TGroupBox and TPanel.Leaf components are components that cannot contain other components; for example, TButton and TImage.All components must be part of a formEvery component must be part of a form. Leaf components can be part of a form, or part of a container component that is part of a form. If a component is not part of a form, no code is generated for that component.How to model componentsΣ To model a component in ObjectTeam:1 Create a class to represent the component. For example, create a class to represent a group box or command button.2 Make it a subclass of the appropriate class in the DelphiVCL system. For example, make your class a subclass of TGroupBox or TButton.3 Use an aggregation to place the component on a form, or to place a leaf component in a container component. The role name becomes the name of the component in Delphi.ExampleSee REFID="33022" TYPE="XREF-TEXTCOPY"Basic Modeling Technique for examples of how to model both container components and leaf components.How to model new component typesIn the VCL, Delphi provides a rich library of component types. Delphi also allows you to create component types. New component types must be derived from existing component types.Σ To model a new type of component in ObjectTeam:1 Create a class to represent the new component.2 Make the new component a subclass of the appropriate class in the DelphiVCL system. 3 Set the Class Component Declaration class property of the new component class.When you generate code, ObjectTeam creates a unit (.pas) file that defines the component.Using the new component typeAdd a component of the new type to a form in the same way you add a component of any other type. Create a class to represent the component, make it a subclass of the new component type, and use an aggregation to place the component on a form.ID="16521"Reusing Menus and Container ComponentsReuseMenus and container components modeled for one form can be reused on other forms.Tip: You might want to create an ObjectTeam system that defines commonly used menus and components. Adding such a system to the Object Design phase of a project allows you to reuse the menus and components on any form in that project.Example of reuseIf the TControls group box is defined in a shared system, the CD used to define the TConsole form can reuse that group box. Compare the following CD with the CD shown in REFID="33022" TYPE="XREF-TEXTCOPY"Basic Modeling Technique.FILENAME="00605.unk" ORIGFILE="pics/reusecad.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlphgui.fm5.mif"Chapter 5 Reverse ID="17037"and Round-Trip EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for DelphiIntroductionThis chapter describes how to use reverse engineering and round-trip engineering with the Delphi code generator.Reverse engineeringReverse engineering Delphi code makes the classes, forms, data structures, and procedures visible in ObjectTeam. This facilitates your understanding of the existing code, thus giving you more opportunity for reusing the code.Round-trip engineeringRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated Delphi source files (.pas and .txt/.dfm). Use round-trip engineering to update the ObjectTeam model before you regenerate the source files. If you add an attribute, procedure, event, or component to the generated source file, but do not add it to the ObjectTeam model, that attribute, procedure, event, or component is lost when you regenerate the source files.ExplanationThe code generator generates code based on the ObjectTeam model. When you regenerate the source file, only the attributes, operations, and form components defined in the model appear in the generated source file.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21085" TYPE="XREF-TEXTCOPY"Reverse Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15125" TYPE="XREF-TEXTCOPY"Round-Trip Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12ID="21085"Reverse EngineeringIntroductionTERM1="project" TERM2="using data from other sources"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="class library, reverse engineering"Reverse engineering parses Delphi unit (.pas) files and builds CDs and CDMs that show the classes and forms defined in those files. It can be particularly useful if you have access to a class library and want to better understand its contents.Purpose Use reverse engineering to capture and display the classes defined in your Delphi files. This serves two primary purposes:n Makes the forms and classes available in ObjectTeam as external classes.n Helps you to understand the structure and functionality of the forms and classes.Not an import utilityReverse engineering is not designed to capture all the information in a Delphi file. Therefore, do not use reverse engineering to import forms or classes in order to maintain them in ObjectTeam. If you generate Delphi files from the CDs and CDMs created by reverse engineering, they will not match the files you used to create those CDs and CDMs.Reverse engineering formsIf the form (and data module) files are in .dfm format, ObjectTeam reverse engineers the forms without reverse engineering their components or events. If the form and data module files are in .txt format, ObjectTeam reverse engineers the forms, their components, and their events.For the clearest view of the code, reverse engineering forms (and data modules) without reverse engineering their components and events.What happens during reverse engineeringReverse engineering uses the following steps to translate Delphi files into CDs and CDMs:1 Parses the Delphi unit (.pas) files, then maps the Delphi elements to ObjectTeam elements.2 Creates CDs and CDMs that define the ObjectTeam elements.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12643" TYPE="XREF-TEXTCOPY"Parsing the Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18753" TYPE="XREF-TEXTCOPY"Creating the Diagrams 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23706" TYPE="XREF-TEXTCOPY"Running Reverse Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="12643"Parsing the FilesParsing the Delphi filesThe parser recognizes the following elements in the Delphi files:n Classes, variables, constants, procedures, functions, constructors, and destructorsn Forms, components, and eventsMapping the elementsTERM1="Visual Basic" TERM2="reverse engineering"TERM1="mapping" TERM2="in reverse engineering"TERM1="reverse engineering" TERM2="mapping"After parsing the Delphi files, reverse engineering maps the Delphi constructs to ObjectTeam elements, as shown in the following table:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Delphi ConstructionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam ElementCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with default class properties.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConstantCOLNAME="2" VALIGN="TOP" MOREROWS="0"As for Variable. The default value of the attribute is set to the value of the constant.COLNAME="1" VALIGN="TOP" MOREROWS="0"Enumerated typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with default class properties. Members of the enumerated type are mapped to class attributes of the class. All attributes have a data type of enum.COLNAME="1" VALIGN="TOP" MOREROWS="0"Event(.txt files only)COLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and parameters. The Event operation property is set. Parameter properties are set appropriately.COLNAME="1" VALIGN="TOP" MOREROWS="0"FormCOLNAME="2" VALIGN="TOP" MOREROWS="0"Subclass of TForm. Default class properties are set.COLNAME="1" VALIGN="TOP" MOREROWS="0"Form component(.txt files only)COLNAME="2" VALIGN="TOP" MOREROWS="0"Subclass of the appropriate TComponent subclass. Default class properties are set. An aggregation association from the component to the class that represents the owner form is created. The class name of the component and the role name of the aggregation association are the same: the name of the Delphi component.COLNAME="1" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with Class Type property set to Interface. Properties and methods are mapped to attributes and operations of the class.COLNAME="1" VALIGN="TOP" MOREROWS="0"Procedure or functionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and parameters. Operation and parameter properties are set appropriately.COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute. Properties on the Property tab of the attribute's Edit Properties dialog box are set appropriately.COLNAME="1" VALIGN="TOP" MOREROWS="0"RecordCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with Class Type property set to Record. Fields are mapped to attributes of the class.COLNAME="1" VALIGN="TOP" MOREROWS="0"Set ofCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with Class Type property set to Set. Members of the set are mapped to class attributes of the class. All attributes have a data type of enum.COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute and data type. Default attribute properties are set.Customizing reverse engineeringThe customization file tcl\rev_assoc.tcl file in the Delphi module defines the reverse engineering rules used to detect associations and attribute accessors. You can modify reverse engineering by editing this customization file, as described in the ObjectTeam Customization Guide.Warning: This customization file is not used unless you select the Reverse Engineer Associations option during reverse engineering.ID="18753"Creating the DiagramsCreating diagramsTERM1="diagrams" TERM2="draft, in reverse engineering"TERM1="reverse engineering" TERM2="draft diagrams"After mapping the Delphi constructs to ObjectTeam elements, reverse engineering creates the CDs and CDMs that define the ObjectTeam elements. It creates the following CDs:n One or more CDs to show the class hierarchyn One or more CDs to show the associations among the classesNaming conventions for CDsEach CD is named for the primary class in the CD; for example, Class1. The word Tree is appended to the name of each CD that defines part of the class hierarchy; for example, SuperClass1Tree.How many diagrams are createdThe number and complexity of the CDs created by reverse engineering depend largely on the following:n The files that you select for reverse engineering, particularly the number and complexity of classes defined in the files.n The reverse engineering options that you select, particularly whether you choose to reverse engineer associations.ID="18986"Options for reverse engineeringDuring reverse engineering, ObjectTeam displays the following dialog box prompting you to select the options that you want to use:FILENAME="00606.unk" ORIGFILE="pics/reoption.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlpheng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box):COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Prefix used to name each generated CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only class structure is generated)n Only CDMs (only class features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering creates a separate reference CD for each class that exceeds the maximum size. The class is folded in all diagrams other than the reference diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class. When a class exceeds this size, it is folded.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree. When a class hierarchy exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram. When a diagram exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Reverse Engineering Associations is selected, specifies the algorithm reverse engineering uses to create the CDs that show the associations:n Simple. Creates a CD for each class that has associations.n Grid. Creates a CD for each n unfolded classes, where n is the number specified in the Number of Classes per CD field.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of Classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Placement Algorithm is Grid, specifies the number of unfolded classes per CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"CaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"Delphi almost always uses lowercase and ObjectTeam is case sensitive. Use this field to specify which case should be used in ObjectTeam.n FirstCase. For each identifier, use the case that is first encountered. (When reverse engineering multiple files, use this option with caution.)n UpperCase. Always use uppercase characters.n LowerCase. Always use lowercase characters.COLNAME="1" VALIGN="TOP" MOREROWS="0"Reverse Engineer AssociationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering examines the attributes and accessor methods defined on each class to determine the associations among classes. It then creates CDs that show those associations.GUI aggregationsReverse engineering always creates CDs that show the aggregations that define the GUI, even if you have not selected the Reverse Engineer Associations option. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box.CDs that show the class hierarchyFollowing are the guidelines used to draw the CDs that show the class hierarchy:n Reverse engineering creates a CD for each top-level parent class. The CD contains the parent class and all subclasses.n If a class has multiple parent classes, reverse engineering creates a CD for each parent. The CD for the first parent class contains the parent class, the child class, and all subclasses of the child class. The CD for each of the other parent classes contains only the parent class and the child class; in these diagrams, the child class is folded.FILENAME="00607.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/delphi/dlpheng.fm5.mif"CDs that show associationsIf you select the Reverse Engineer Associations option in the Reverse Engineer dialog box, reverse engineering creates CDs that show the associations. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box. Both algorithms are described below.If you do not select the Reverse Engineer Associations option, reverse engineering shows associations only as attributes and accessor methods in the appropriate classes.Note: Bidirectional associations are reverse engineered as two unidirectional associations.GUI aggregationsReverse engineering always creates CDs that show the aggregations that define the GUI, even if you have not selected the Reverse Engineer Associations option. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box.Simple algorithmIf you select Simple in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Creates a CD for each class that has one or more associations. 2 Unfolds the main class in each CD and folds all associated classes.ExampleReverse engineering a number of related classes using the simple algorithm creates multiple CDs, as shown below.FILENAME="00608.unk" ORIGFILE="pics/resimp1.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlpheng.fm5.mif"FILENAME="00609.unk" ORIGFILE="pics/resimp2.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlpheng.fm5.mif"FILENAME="00610.unk" ORIGFILE="pics/resimp3.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlpheng.fm5.mif"Grid algorithmIf you select Grid in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Divides all classes into groups of n, where n is the number specified by the Number of Classes per CD field of the Reverse Engineer dialog box. The algorithm attempts to group associated classes.Tip: To create a diagram that contains all classes, specify n as the number of classes being reverse engineered (or greater).2 For each group of classes, creates a CD and adds the classes (unfolded) to the CD. To position the classes, reverse engineering uses a uniform grid whose squares are the size of the largest class in the group and its longest association.3 For each class in each CD, draws all associations from the class to all associated classes. If an associated class is not in the CD, reverse engineering adds it (folded) to the CD.ExampleReverse engineering a number of related classes using the grid algorithm creates one CD, as shown below. (The classes have been rearranged to fit more easily on the page.)FILENAME="00611.unk" ORIGFILE="pics/regrid.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlpheng.fm5.mif"ID="23706"Running Reverse EngineeringIntroductionThis section describes how to run reverse engineering.How to reverse engineerΣ To reverse engineer Delphi files:1 Move to System level in Object Design phase.Note: Typically, you reverse engineer into an empty system. However, name conflicts can still occur since classes are created with scope Phase.2 Select Utilities | Reverse Engineer Delphi.The Reverse Engineer Delphi dialog box appears, prompting you to select the files to be reverse engineered.Tip: Reverse engineering creates CDs and CDMs based on the files that you select. Therefore, you generally want to reverse engineer all related files at the same time.3 Select the files that you want to reverse engineer, then select Open.A second Reverse Engineer Delphi dialog box appears (see REFID="18986" TYPE="XREF-TEXTCOPY"Options for reverse engineering), prompting you to select the options that you want to use. 4 Select the options, then select OK.ObjectTeam reverse engineers the selected file, reporting the results in a Monitoring window.ID="15125"Round-Trip EngineeringIntroductionRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated unit (.pas) files and generated form or data module (.txt) files. Use round-trip engineering to update the ObjectTeam model before you regenerate the source files..txt/.dfmForms and data modules can be stored in .txt or .dfm files. Round-trip engineering examines .txt files. It does not examine .dfm files.PurposeThe code generator generates code based on the ObjectTeam model. If you do not update the ObjectTeam model before regenerating the source files, the new source files do not include your changes. ExampleYou generate Delphi files. You then edit the generated source file, adding a new event to a component on a form. If you do not update the ObjectTeam model, the model does not contain the operation that corresponds to the event. When you regenerate the source file, the code generator assumes that you deleted the operation from ObjectTeam and, therefore, does not include the obsolete event in the newly generated source file.Changes captured by round-trip engineeringIf you have made the following types of changes to the generated Delphi source, round-trip engineering updates the ObjectTeam model based on those changes:n Added or deleted attributes, or edited attribute declarationsn Added or deleted methods or events, or edited method or event declarationsn Added components to a formChanges not captured by round-trip engineeringRound-trip engineering ignores the following types of changes that you might have made to the generated source files. If you have made these types of changes, you must update the ObjectTeam model manually:n Deleted components from a formWhat happens during round-trip engineeringThe following table shows the steps that occur during round-trip engineering:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"You select the generated (edited) unit (.pas) files that you are interested in and start round-trip engineering.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam parses the selected unit (.pas) files and accompanying form or data module (.txt) files, if any. It compares the information in the files with the information in the ObjectTeam model.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"For each difference it finds, ObjectTeam proposes an action and prompts you for confirmation. For example:In class Account : delete attribute Address?COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Based on your answers, ObjectTeam updates the ObjectTeam model.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38092" TYPE="XREF-TEXTCOPY"Parsing the Generated (Edited) Source Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35484" TYPE="XREF-TEXTCOPY"Running Round-Trip Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16ID="38092"Parsing the Generated (Edited) Source FilesIntroductionThis section describes which changes to the generated source files are captured by round-trip engineering. Changes to attributesYou can add, delete, and modify attribute declaration statements in a generated unit (.pas) file. However, all attribute declaration statements must be specified beneath the following comment in the generated source file:// User defined attributesAttribute declarations not in this section of the generated source file are ignored by round-trip engineering.Attribute Access propertyRound-trip engineering determines the value of an attribute's Attribute Access property based on the methods specified beneath the following comment in the generated source file:// Access methodsFor example, if you add an attribute declaration to the source file but do not add attribute access methods, round-trip engineerings sets the Read and Write values of the attribute's Attribute Access property to None.Class constructorThe parameter list of the class constructor (Create) includes key attributes. In the CD, a key attribute is prefixed with an asterisk (*).If you remove an attribute from the parameter list of the constructor, round-trip engineering removes the asterisk (*) from the attribute name in the CD. If you add an attribute to the parameter list of the constructor, round-trip engineering adds an asterisk (*) to the attribute name in the CD.Changes to functionsYou can add, delete, and modify function declaration statements in a generated unit (.pas) file. However, all such declaration statements must be specified beneath the following comment in the generated source file:// User defined methodsFunction declarations not in this section of the generated source file are ignored by round-trip engineering.You can change the code in the body of any function. Such changes are ignored by round-trip engineering, but are preserved by the code generator when you regenerate the source files.Changes to eventsYou can add, delete, and modify event declaration statements in a generated unit (.pas file).You can change the code in the body of any event. Such changes are ignored by round-trip engineering, but are preserved by the code generator when you regenerate the source files.Changes to componentsYou can add components to a generated form. However, if you delete a component, you must edit the ObjectTeam model manually. Round-trip engineering does not delete components from the ObjectTeam model.If you add a component to a generated form, round-trip engineering updates the ObjectTeam model. Round-trip engineering does not modify existing CDs. It creates the following CDs to hold the classes that represent the new components:n A CD for each type of component; these CDs show the superclass of each new component classn A CD for each modified form; these CDs show the associations between the new components and their formsID="35484"Running Round-Trip EngineeringCustomizing round-trip engineeringThe customization file roundtrip.roundtrip in the M4_home\etc directory controls what actions round-trip engineering proposes, as well as the default answers it supplies. To examine or modify the current behavior of round-trip engineering, examine or modify the customization file.Before you beginRound-trip engineering examines .txt files, not .dfm files. Therefore, before running round-trip engineering, convert all forms and data modules from .dfm to .txt format, as described in REFID="24431" TYPE="XREF-TEXTCOPY"Editing Generated Form (.txt/.dfm) Files. How to run round-trip engineeringΣ To run round-trip engineering:1 Move to System level of the Implementation phase.2 Select the Delphi unit (.pas) files on which you want to run round-trip engineering.3 Select Utilities | Round Trip Selected.The following dialog window appears.FILENAME="00612.unk" ORIGFILE="pics/rndtrip1.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlpheng.fm5.mif"4 Optionally, enter a prefix to be used in naming any CDs created by round-trip engineering, then select OK. If you do not enter a prefix, round-trip engineering uses the prefix NewRT.ObjectTeam opens the Roundtrip Selected Files dialog box, compares the classes in the Delphi files to the classes in the Object Design phase, and then begins proposing actions and prompting you for confirmation.FILENAME="00613.unk" ORIGFILE="pics/rndtrip2.gif" ORIGTYPE="X" ORIGDOC="../../sources/delphi/dlpheng.fm5.mif"5 Use the buttons to respond to the proposed actions:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ButtonCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"YesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Make the proposed change.COLNAME="1" VALIGN="TOP" MOREROWS="0"NoCOLNAME="2" VALIGN="TOP" MOREROWS="0"Do not make the proposed change.Note: When you regenerate the Delphi file, the change to the Delphi file will be lost.COLNAME="1" VALIGN="TOP" MOREROWS="0"Default to AllCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use the default response for all remaining questions.COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cancel round-trip engineering. Changes that you have already saved are not backed out.ObjectTeam updates the model based on your responses.Appendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for DelphiDelphi code generation propertiesThe following table lists the properties that effect Delphi code generation. These are available in the CD in the Object Design phase.COLS="4"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="99p"COLNAME="3" COLWIDTH="126p"COLNAME="4" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Access MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublishedPublicPrivateProtectedNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31507" TYPE="XREF-TEXTCOPY"Specifying Association PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublishedPublicPrivateProtectedNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31507" TYPE="XREF-TEXTCOPY"Specifying Association PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association ImplementationCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Pointer Object referenceCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31507" TYPE="XREF-TEXTCOPY"Specifying Association PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublishedPublicPrivateProtectedNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="16861" TYPE="XREF-TEXTCOPY"Specifying Access Methods for VariablesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default Pointer File COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="20063" TYPE="XREF-TEXTCOPY"PointersCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute VisibilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublishedPublicPrivateProtectedNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="40016" TYPE="XREF-TEXTCOPY"Specifying Visibility of a VariableCOLNAME="1" VALIGN="TOP" MOREROWS="0"Calling ConventionCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Register Pascal CDecl StdCall SafeCallCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="36073" TYPE="XREF-TEXTCOPY"Specifying Method Calling ConventionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassInterfaceRecordSetCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="11889" TYPE="XREF-TEXTCOPY"Mapping Classes and REFID="31687" TYPE="XREF-TEXTCOPY"Mapping Special ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Component Class DeclarationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="32628" TYPE="XREF-TEXTCOPY"Delphi componentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24359" TYPE="XREF-TEXTCOPY"Mapping Qualified AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Default UsageCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"OpeationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="37299" TYPE="XREF-TEXTCOPY"Mapping OperationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"IndexCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Interface IdentifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34377" TYPE="XREF-TEXTCOPY"InterfacesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Library UnitCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="33960" TYPE="XREF-TEXTCOPY"Library unitsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main FormCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="20051" TYPE="XREF-TEXTCOPY"Chapter 4, Modeling Forms and Data ModulesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"NoneVirtualDynamicVirtual AbstractDynamic AbstractOverrideCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24451" TYPE="XREF-TEXTCOPY"Specifying Method DispatchCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method VisibilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublishedPublicPrivateProtectedCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="40398" TYPE="XREF-TEXTCOPY"Specifying Method VisibilityCOLNAME="1" VALIGN="TOP" MOREROWS="0"Parameter PassingCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"ValueConstantVariableOutCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35664" TYPE="XREF-TEXTCOPY"Specifying ParametersCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Property DefaultCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Property StorageCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Read PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Text COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default UntypedOpen-ArrayVariant Open-ArrayCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35664" TYPE="XREF-TEXTCOPY"Specifying ParametersCOLNAME="1" VALIGN="TOP" MOREROWS="0"Write PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="23727" TYPE="XREF-TEXTCOPY"Mapping Attributes to Delphi PropertiesForte Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Fort\x8e About this manualThe ObjectTeam Code Generation Guide for FortΘ contains information specific to the FortΘ TOOL programming language. This manual includes all the information that you need to generate FortΘ TOOL code from ObjectTeam. PrerequisitesThis guide is intended for experienced users of ObjectTeam and the analysis and design method it supports. This guide gives you information on how to map ObjectTeam diagrams to FortΘ TOOL code; it does not teach you the FortΘ TOOL language.To customize or extend the capabilities of the FortΘ code generator, you must have a thorough understanding of the ObjectTeam Shell, the Object-Oriented Programming Language (OOPL) model structure, and the Tool Command Language (Tcl) commands.SEE="method" TERM1="operation"SEE="access property" TERM1="public"SEE="access property" TERM1="private"SEE="access" TERM1="protected"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="access property" TERM1="private protected"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="access property" TERM1="read access"SEE="access property" TERM1="write access"SEE="access property" SEEALSO="attribute property" TERM1="attribute"SEE="access property" SEEALSO="attribute property" TERM1=""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="class property" TERM1="class"SEEALSO="class property" TERM1=""SEEALSO="association attribute property" TERM1="association"SEEALSO="association attribute property" TERM1=""SEEALSO="method" TERM1="method"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="inheritance" TERM1="generalization"SEE="inheritance" SEEALSO="interface property" TERM1="interface"SEE="inheritance" SEEALSO="interface property" TERM1=""SEE="code" SEEALSO="interface property" TERM1="source file"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="mapping" TERM1="translation"SEE="code" TERM1="generated source file"SEE="code" SEEALSO="code" TERM1=".java file"Chapter 1 ID="11405"Preparing Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Fort\x8e IntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.FortΘ module requiredThe ObjectTeam module Forte Code Generation provides the menu items, the properties and the Tcl code required to use the Forte Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="40110" TYPE="XREF-TEXTCOPY"Chapter 2, Building a FortΘ Application, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23233" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11506" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00614.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/forte/fortobjd.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. Types are abstracted from the data types recognized by the database system and the OOPL environment. The code generator translates the standard types to the target types. Take care when customizing the files that define standard types. Any additions you make must conform to the target language or the generated code may not be usable.OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="22643" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to FortΘ, describes how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 ID="40110"Building a FortΘ ApplicationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Fort\x8e IntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details that are not specified in the model.Prerequisitesn The ObjectTeam module Forte Code generation must be active from Object Design Phase and Implementation Phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="11405" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Steps for code generationThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="34p"COLNAME="2" COLWIDTH="414p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Configure the FortΘ environment, installing the required systems in the Object Design Phase of your ObjectTeam Project.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate code. During this step, ObjectTeam runs the Tcl scripts that generate the FortΘ source files.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Import the generated classes into a FortΘ Project, fill in the method bodies, and export the classes back to ObjectTeam.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Add or delete operations and attributes and regenerate the code.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Go back to step 2 to regenerate your classes.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30832" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30552" TYPE="XREF-TEXTCOPY"Configuring Your FortΘ Environment 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20421" TYPE="XREF-TEXTCOPY"Generating FortΘ Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40657" TYPE="XREF-TEXTCOPY"Editing Generated Source Files in FortΘ 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14517" TYPE="XREF-TEXTCOPY"Regenerating Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14ID="30832"Components of Code GenerationTcl scripts for code generationThe Tcl script import.tcl activates, among other things, the Tcl script forteimpor.tcl, which contains Tcl code to retrieve information from internal models, format it and write it to FortΘ files. forteimpor.tcl uses other Tcl scripts that use other Tcl scripts as well, and so on.The default TERM1="Tcl" TERM2="script files used for code generation"Tcl scripts used to generate FortΘ files can be found under the M4_home\modules\forte\tcl directory tree. OOPL modelWhen you generate code, ObjectTeam converts the CDs and CDMs of the Object Design phase into an intermediate model: the OOPL model. The FortΘ code generator then generates the FortΘ source files based on the OOPL model.For more informationThe ObjectTeam Repository Interface Guide provides a detailed description of the classes in the OOPL model.TERM1="VisualWorks"FortΘ filesYou use ObjectTeam to model objects, as well as the associations among them. From the ObjectTeam model, you generate a .pex file that can be imported into a FortΘ workspace. Typically, a FortΘ project is created for each ObjectTeam system.For more informationSee REFID="20421" TYPE="XREF-TEXTCOPY"Generating FortΘ Code and REFID="40657" TYPE="XREF-TEXTCOPY"Editing Generated Source Files in FortΘ.TERM1="code regeneration"TERM1="regeneration" TERM2="code"Code TERM1="otsh" TERM2="code regeneration"regenerationCode generation is an automated process that generates FortΘ files. ObjectTeam ensures that n You can regenerate the FortΘ files when you change your ObjectTeam model.n If you make changes to the generated files in FortΘ and then export those changes, your changes are preserved when you regenerate the files.For more informationSee REFID="14517" TYPE="XREF-TEXTCOPY"Regenerating Code.ID="30552"Configuring Your FortΘ EnvironmentWhat is the FortΘ environment?Configuring your FortΘ environment involves the creation of the following two ObjectTeam System Versions:n Frameworkn DisplayProjectYou can configure your FortΘ environment in the following phases:n REFID="26207" TYPE="XREF-TEXTCOPY"Object Design Phasen REFID="39280" TYPE="XREF-TEXTCOPY"Implementation PhaseID="26207"Object Design PhaseWhat is configuredThe following actions are carried out when the FortΘ environment is configured in the Object Design phase:n Creation of the ObjectTeam System Versions Framework and DisplayProjectn Creation of the DCDs and CDMs representing the classes in the FortΘ class libraries Framework and DisplayProject. Bear in mind that his action involves the creation of a few hundred CDMs.Note: Only the FortΘ class hierarchy is made available in ObjectTeam, not the methods of the classes involved. Each class in the Framework and DisplayProject systems only contains a name and a $create method.Configuring your FortΘ environment automatically Each custom class you draw in ObjectTeam must be derived from a FortΘ prefabricated class. The advantage of FortΘ classes being defined as external classes in ObjectTeam is that you can indicate in ObjectTeam from which FortΘ class you derive a custom class, without having to recreate the entire class hierarchy of the FortΘ class in ObjectTeam. In other words, if you derive custom classes from a lot of different prefabricated FortΘ classes, configuring your FortΘ environment will save you time.If you derive your custom classes only from a limited set of FortΘ classes, configuring your FortΘ environment is not recommendable, since hundreds of classes will be created unnecessarily. How to configure your FortΘ environment automaticallyΣ To configure your FortΘ environment automatically:1 Make sure the ObjectTeam Browser is on Object Design Phase level.2 Select Utilities | Configure Forte Environment.The appropriate System Versions are created on the current level. The appropriate CDs and CDMs are created in these System Versions.This action may take a while.Tip: For an overview of the classes created in the Framework and DisplayProject systems, open the system of your choice on Object Design level. Alternatively, you can use Utilities | Reports | On Classes to generate a report of the classes in the system, or use Utilities | Class Browser to start the ObjectTeam class browser.Configuring your FortΘ environment manually If you do not configure your FortΘ environment automatically, you must create the new systems manually and populate them with the appropriate FortΘ classes. The name and the number of the CDs in these systems are unimportant for the FortΘ code generator. What does matter is the following:n A CDM with the name of the FortΘ class exists in a system that has the name of the corresponding FortΘ library.n The top class the FortΘ class is derived from.The FortΘ code generator qualifies a class with the name of the ObjectTeam system it is defined in, so when a generated .cex file is imported into FortΘ, it will recognize the super class as being the prefabricated FortΘ class from the FortΘ library. How to configure your FortΘ environment manuallyΣ To configure your FortΘ environment manually:1 Create in the Object Design phase the systems Framework and DisplayProject.If you are going to use classes from other FortΘ libraries, create corresponding ObjectTeam systems for these libraries as well.Note: To avoid potential problems, it is recommended that you name the ObjectTeam systems exactly after the FortΘ class libraries, so with preservation of case.2 Open the system Framework and create a new CD.The name of this CD is not important.3 Draw the class Object and add the operation $create to this class.4 Do the same for every other class from the FortΘ library Framework that you want to use in your model. Make sure the hierarchy is in synch with the class hierarchy within the Framework library.5 Open the system DisplayProject and create a new CD.6 Draw the class UserWindow and add the operation $create to this class.7 Do the same for every other class from the FortΘ library DisplayProject that you want to use in your model.Make sure the hierarchy is in synch with the class hierarchy within the DisplayProject library.8 If you have created other systems corresponding to FortΘ libraries, add the appropriate classes to these systems as well.ID="39280"Implementation PhaseWhat is configuredWhen the FortΘ environment is configured in the Implementation phase, the following empty ObjectTeam System Versions are created:n Framework n DisplayProjectWhy configuring the FortΘ environmentIf you configure your FortΘ environment in the Object Design phase (see REFID="26207" TYPE="XREF-TEXTCOPY"Object Design Phase) the ObjectTeam System Versions Framework and DisplayProject in the Object Design Phase are populated with CADs and CDMs representing classes from the FortΘ class libraries.The classes in these systems serve as external classes; no code should be generated. However, if you do not configure your FortΘ environment in the Implementation Phase and select Utilities | Generate Forte | New Systems in this phase, the code generator detects the systems FrameWork and DisplayProject in the ObjectDesign phase, and attempts to generate code for the classes defined in these systems. The code generator can be prevented from doing this by creating the System Versions in the Implementation phase before code is generated. Utilities | Configure FortΘ Environment on Implementation Phase level does that for you.How to configure your FortΘ environmentΣ To configure your FortΘ environment:1 Make sure the ObjectTeam Browser is on Implementation Phase level.2 Select Utilities | Configure Forte Environment.The appropriate empty System Versions are created on the current level. You can now generate code for the user-defined System Versions.ID="20421"Generating FortΘ CodeResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create FortΘ source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are FortΘ source files. In other phases, the System files are ObjectTeam diagrams.FILENAME="00615.tif" ORIGSEQ="24" ORIGTYPE="I" ORIGDOC="../../sources/forte/fortcodg.fm5.mif"Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate code on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate FortΘ.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet.- Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then generates the code.How to (re)generate code on System levelΣ To (re)generate code for a system, or selected system files on System level:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate FortΘ.A cascading menu appears.3 Select New, Selected, or All:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then (re)generates the files. The following illustration shows the Monitor window after generating code for a system.FILENAME="00616.unk" ORIGFILE="pics/import.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortcodg.fm5.mif"Generated source filesWhen you generate code, the FortΘ code generator generates the following ASCII files:.cex fileComponent EXport file, the file format used by FortΘ to export data from the FortΘ repository and import data into it. One .cex file is generated for each ObjectTeam class..hex fileThese files contain the same information as .cex files, except for the method implementations. .hex files are generated to avoid conflicts in bidirectional associations (see REFID="21654" TYPE="XREF-TEXTCOPY"Mapping a bidirectional association). One .hex file is generated for each ObjectTeam class.Location of the source filesSource files are stored in the repository as external files. They are also written to the user_environment\system-name directory, where user_environment is the file path for your generated files. For more information on the user environment, see the ObjectTeam Project Management Guide. The following illustration shows how the source files appear in the Browser.FILENAME="00617.unk" ORIGFILE="pics/ftfiles.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortcodg.fm5.mif"TERM1="user environment" TERM2="updating"TERM1="Update User Environment (Utilities menu)"Updating user environmentUse Utilities | Update User Environment in ObjectTeam to update your user environment based on the repository. This can be particularly useful if you are working on two machines, and the user environment of each is set to a local drive. When you move between machines, you can use Utilities | Update User Environment to update the local drive of the current machine.ID="40657"Editing Generated Source Files in FortΘIntroductionIn ObjectTeam you can generate a .pex file containing all the source files in the System or only the selected ones. This .pex file can be imported in the FortΘ Project Workshop.How to export source files to FortΘΣ To export source files:1 In the Browser, move to the System level of the Implementation phase.2 Make sure no files are selected in the Information Area of the Browser.3 Select Forte | Generate pex File | From cex FilesA Monitoring Window appears, reporting on the export action.All files (.cex and .hex) from the system are packed into a pex file, named systemName.pex. This file is stored in your user environment.4 In a FortΘ workspace, select Plan | Import.5 Select the .pex file generated by ObjectTeam.A FortΘ project with the same name as the ObjectTeam system will be created and filled with class components.6 Edit the objects as you would any other FortΘ object.Comments in the files indicate where you should add code.7 When you have finished editing the objects in FortΘ, export the objects to the ObjectTeam user environment, overwriting the originally generated files.You can export classes to .cex files using Component | Export Class in the Project Workshop.The generated files now reflect the changes that you made in FortΘ.Note: The .cex files that are exported from FortΘ may contain many more properties than the originally generated .cex files. Class properties are preserved when you regenerate code in ObjectTeam; component properties are not.Exporting selected filesInstead of packing all .cex and .hex files, you can decide to include only selected files in a .pex file. To do this, first select the files of your choice in the Information Area of the Browser and then select Forte | Generate pex File | From cex Files.Exporting .hex files onlyIn some situations, when dependencies exist across systems, for example, simply generating a .pex file may not work. You then may have to export the .hex files first, in order to make certain classes known to FortΘ.To do this, use Forte | Generate pex File | From hex Files followed by Forte | Generate pex File | From cex Files.Changes are preservedChanges you make to generated FortΘ files are preserved when you regenerate the files, provided that you adhere to the following guidelines:n Add code only where indicated by the following comments:-- !! Implement this method !!or-- Start constructor user sectionn If you have added, deleted, or modified FortΘ attributes or methods, use round-trip engineering (see REFID="21358" TYPE="XREF-TEXTCOPY"Round-Trip Engineering) to update the ObjectTeam model before regenerating the FortΘ files.Note: The code generator generates code based on the ObjectTeam model. If you do not add the new FortΘ objects to the ObjectTeam model, the code generator assumes that you deleted them from ObjectTeam. This makes the FortΘ objects obsolete, so ObjectTeam removes them from the generated source files.ID="14517"Regenerating CodeTERM1="code regeneration" TERM2="edited C++ source file"Design changes and code changesObjectTeam supports incremental development. You can generate code from your models, edit that code, and regenerate the code without losing your changes. You can work with models during design and with code during implementation, shifting your focus between the two as necessary.Code regenerationThe code regeneration process can be depicted as follows:FILENAME="00618.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/forte/fortcodg.fm5.mif"Editing guidelinesThe FortΘ code generator preserves your changes as long as you remember the following:n Use the FortΘ Project Workshop to edit the bodies of methods that were generated by ObjectTeam. When you export the class back to the ObjectTeam user environment, and you then regenerate the corresponding class, these method bodies are preserved.n If you use the FortΘ Project Workshop to add or delete methods and attributes, make sure you add them to or delete them from your ObjectTeam model as well. You can use roundtrip engineering to do this. See REFID="21358" TYPE="XREF-TEXTCOPY"Round-Trip Engineering for details.Obsolete code sectionsIf, in the model, you rename, delete, or change the signature of an operation, the matching method in the generated FortΘ file is no longer correct. When you regenerate the file, ObjectTeam displays a message warning you that the method is being moved to the obsolete code section. It then appends the original method to the end of the generated file, as shown in the following example:/* OBSOLETE_CODE *....* OBSOLETE_CODE */You must delete the obsolete code before you can regenerate the FortΘ file.How to regenerate codeΣ To regenerate one or more FortΘ files:1 In the Implementation phase, move to the System that contains the files that you want to regenerate.2 Select the .cex files that you want to regenerate.Note: Both the .hex and .cex files are regenerated.3 Select Utilities | Generate Forte | Selected.ObjectTeam opens a Monitor window for displaying log messages, then imports the files.Preserving previous versionsIf you want to save the previously generated files, you can, before changing the ObjectTeam model, freeze both the model and the generated FortΘ files. This ensures that you have a stable version of the model and generated files to return to should your changes to the model not give the desired results.Chapter 3 Mapping ID="22643"Modeling Data to TYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Fort\x8e FortΘIntroductionThis chapter describes how ObjectTeam model information maps to FortΘ code. It provides examples of CDs and the results produced when you generate FortΘ code.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26569" TYPE="XREF-TEXTCOPY"Mapping ObjectTeam Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11407" TYPE="XREF-TEXTCOPY"Mapping Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29516" TYPE="XREF-TEXTCOPY"Mapping Operations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'24COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25351" TYPE="XREF-TEXTCOPY"Mapping Inheritance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'44COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34926" TYPE="XREF-TEXTCOPY"Mapping Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'46COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40407" TYPE="XREF-TEXTCOPY"Handling Special Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'64ID="26569"Mapping ObjectTeam ClassesTypes of FortΘ classesAn ObjectTeam class symbol can be used to model the following types of FortΘ classes:COLS="2"COLNAME="1" COLWIDTH="207p"COLNAME="2" COLWIDTH="241p"COLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"see for detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Normal (non-window) classCOLNAME="2" VALIGN="TOP" MOREROWS="0" REFID="18828" TYPE="XREF-TEXTCOPY"Non-Window ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"Window classCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="15994" TYPE="XREF-TEXTCOPY"Window ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"Domain classCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="14039" TYPE="XREF-TEXTCOPY"Domain ClassAll classes are (indirectly) derived from the FortΘ root class Framework.Object.Special FortΘ constructionsObjectTeam classes can also be used to model the following special FortΘ constructions:COLS="2"COLNAME="1" COLWIDTH="163p"COLNAME="2" COLWIDTH="285p"COLNAME="1" VALIGN="TOP" MOREROWS="0"fortΘ elementCOLNAME="2" VALIGN="TOP" MOREROWS="0"see for detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Service ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="30243" TYPE="XREF-TEXTCOPY"Service Object ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"CursorCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="33517" TYPE="XREF-TEXTCOPY"Cursor ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConstantCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="27793" TYPE="XREF-TEXTCOPY"Constant ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="14514" TYPE="XREF-TEXTCOPY"InterfaceCOLNAME="1" VALIGN="TOP" MOREROWS="0"Derived C Data Type:COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"n typedefCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="24618" TYPE="XREF-TEXTCOPY"Typedef ClassREFID="12612" TYPE="XREF-TEXTCOPY"Generic Typedef ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"n enumCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="13941" TYPE="XREF-TEXTCOPY"Enum ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"n structCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="15593" TYPE="XREF-TEXTCOPY"Struct ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"n unionCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="39931" TYPE="XREF-TEXTCOPY"Union ClassThese constructions can be enforced by setting the Class Type property to the appropriate value and by following certain rules, which are discussed in the sections listed above.Initializing attributesFor every FortΘ class, a method Init() is generated. This method is used for the initialization of public attributes of the class. It is automatically invoked on an object immediately after it is constructed. For more informationSee REFID="10437" TYPE="XREF-TEXTCOPY"The Init Method.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18828" TYPE="XREF-TEXTCOPY"Non-Window Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15994" TYPE="XREF-TEXTCOPY"Window Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14039" TYPE="XREF-TEXTCOPY"Domain Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33655" TYPE="XREF-TEXTCOPY"Editing Class Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10ID="18828"Non-Window ClassIntroductionA non-window class is a class that is derived from the FortΘ root class Framework.Object.How to model a non-window class Σ To model a non-window class:1 Draw the non-window class and give it a name.2 Specify its data attributes and operations.3 Draw another class named Object.This FortΘ root class, which is defined in the system Framework, is an external class. The system Framework is added to your ObjectTeam project when you configure your Forte environment.4 Make the first class a subclass of class Object using the Generalization symbol.Note: Here, the non-window class is explicitly derived from the FortΘ root class Framework.Object. However, since every class that is not derived from any other class is considered a subclass of Framework.Object by the FortΘ code generator, it is not necessary to do so.ExampleThe Class Type property of this example class is set to Class, which is the default. The example class is explicitly derived from the class Framework.Object.FILENAME="00619.unk" ORIGFILE="pics/nwclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Author.cex (generated file)begin CLASS;...-- START FORWARD CLASS DECLARATIONSforward TextData;-- END FORWARD CLASS DECLARATIONSclass Author inherits from Framework.Object-- User-defined attributeshas private attribute name: Framework.TextData;has private attribute age: short;-- User-defined methodshas public method Init;-- Attribute accessor methodshas public method getName: copy Framework.TextData;has public method setName(copy input newName: Framework.TextData);has public method getAge: short;has public method setAge(input newAge: short);end class;...end CLASS;ID="15994"Window ClassIntroductionA window class is a class that is directly or indirectly derived from the FortΘ class UserWindow. This abstract class is part of the FortΘ DisplayProject library.A window class provides you with an empty window, which you can further specify using the FortΘ Window Workshop.How to model a window class Σ To model a window class:1 Draw the window class and give it a name.2 Specify its data attributes and operations, if desired.3 Draw another class named UserWindow.This FortΘ class, which is defined in the system DisplayProject, is an external class. The system DisplayProject is added to your ObjectTeam project when you configure your FortΘ environment.4 Make the first class a subclass of class UserWindow.Note: You cannot model window and menu definitions in ObjectTeam. The idea behind modeling window classes in ObjectTeam is to generate basic GUI classes, which can be imported into FortΘ and further refined using the FortΘ Window Workshop.What is generatedEvery window class that is successfully generated contains:n One Init methodn One Display methodn A GUI part in a compiled format (binary ASCII encoded)ExampleThe Class Type property of this example class is set to Class, which is the default. The example class is derived from the class UserWindow.FILENAME="00620.unk" ORIGFILE="pics/wdclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"myWindowClass.cexbegin CLASS;-- generated by ObjectTeam Forte code generator...-- START FORWARD CLASS DECLARATIONSforward UserWindow is mapped;-- END FORWARD CLASS DECLARATIONSclass myWindowClass is mapped inherits from DisplayProject.UserWindowhas public method Init;has public method Display;has+5151463100000111000000ec9fe4010100002101020000000002020600940800+1d009fff010104210f1011120101011700009fff000000000900000bb80fa000+000000000000000000010160600000000000000000009d0bb89d0fa000000105+030301fffd0000000000000c0405000600000201000100000b000001000b0300+0021010200000000050400001c01000506007a08004d009fff010101010f1011+120101011700009fff0100000009000007d007d0000000000303030300020202+a0a00000000000000000009d07d09d07d000000105066b010000000000000000+060006000021000200000000061a7e898f9ce29cec12191a385e5f6b7e88898d+8f9cad9cd39cd49ce09ce29cec9cec0000-001e986bend class;...end CLASS;ID="14039"Domain ClassIntroductionA Domain Class is a class that is a subclass of a FortΘ nullable DataValue subclass. The following nullable DataValue subclasses classes are defined in the system Framework. This system is added to your ObjectTeam project when you configure your Forte environment: COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"BinaryNullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"ImageNullableCOLNAME="1" VALIGN="TOP" MOREROWS="0"BooleanNullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"IntegerNullableCOLNAME="1" VALIGN="TOP" MOREROWS="0"DateTimeNullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"IntervalNullableCOLNAME="1" VALIGN="TOP" MOREROWS="0"DecimalNullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextNullableCOLNAME="1" VALIGN="TOP" MOREROWS="0"DoubleNullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"For more informationRefer to your FortΘ documentation for more information on these classes.Importing and exporting domain classesA domain class is not very different from a non-domain class as far as the FortΘ code generation in ObjectTeam is concerned. However, in FortΘ, domain classes have many special properties, which are set when you import a generated .cex file containing a domain class.When you export a domain class from FortΘ, import it into ObjectTeam, and regenerate the .cex file, properties that were set by FortΘ are preserved.How to model a domain class Σ To model a domain class:1 Draw the domain class and give it a name.2 Specify its data attributes and operations, if desired.3 Draw another class and name it after the desired FortΘ nullable DataValue subclass.4 Make the first class a subclass of the DataValue class.ExampleThe Class Type property of this example class is set to Class, which is the default. The example class is derived from the class TextNullable.FILENAME="00621.unk" ORIGFILE="pics/domclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"myDomainClass.cexbegin CLASS;-- generated by ObjectTeam Forte code generator...-- START FORWARD CLASS DECLARATIONSforward TextNullable;forward TextData;-- END FORWARD CLASS DECLARATIONSclass myDomainClass inherits from Framework.TextNullablehas private attribute id: short;has private attribute name: Framework.TextData;has public method Init;has public method getId: short;has public method setId(input newId: short);has public method getName: copy Framework.TextData;has public method setName(copy input newName: Framework.TextData);end class;...end CLASS;ID="33655"Editing Class PropertiesIntroductionIn the Object Design phase, you define properties of a class that control its implementation and accessibility within FortΘ. The code generated for a class is based on its properties. How to edit class propertiesTERM1="Edit Properties (Item menu)" TERM2="for class"TERM1=""TERM1="class property" TERM2="editing"Σ To edit properties of a class:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select the class name.The class properties appear on the right side of the dialog box.FILENAME="00622.unk" ORIGFILE="pics/dbedprcl.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"4 Select the desired properties:COLS="4"COLNAME="1" COLWIDTH="88p"COLNAME="2" COLWIDTH="45p"COLNAME="3" COLWIDTH="190p"COLNAME="4" COLWIDTH="105p"COLNAME="1" VALIGN="TOP" MOREROWS="0"propertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"tabCOLNAME="3" VALIGN="TOP" MOREROWS="0"specifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"see for detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"If the ObjectTeam class must be generated into a special FortΘ construction (such as a constant or service object) rather than a FortΘ classCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="40407" TYPE="XREF-TEXTCOPY"Handling Special ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional class comments, which do not appear in generated codeCOLNAME="4" VALIGN="TOP" MOREROWS="0"--ID="11407"Mapping AttributesIntroductionTERM1="attribute" TERM2="mapping of"TERM1="mapping" TERM2="attribute"TERM1="Java, generated" TERM2="attribute"ObjectTeam maps data attributes of normal ObjectTeam classes to FortΘ private or public attributes. You can determine the accessibility (private or public) through the attribute property Access.Attribute syntaxIn ObjectTeam, the following syntax is used to specify data attributes for a class:[ / | $ | *] name : type = initial-valuewhereCOLS="3"COLNAME="1" COLWIDTH="61p"COLNAME="2" COLWIDTH="123p"COLNAME="3" COLWIDTH="262p"COLNAME="1" VALIGN="TOP" MOREROWS="0"special CHARCOLNAME="2" VALIGN="TOP" MOREROWS="0"indicatesCOLNAME="3" VALIGN="TOP" MOREROWS="0"detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"/COLNAME="2" VALIGN="TOP" MOREROWS="0" a virtual attributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"See REFID="39515" TYPE="XREF-TEXTCOPY"Modeling Virtual AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"$COLNAME="2" VALIGN="TOP" MOREROWS="0" a class attributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ignored by the FortΘ code generatorCOLNAME="1" VALIGN="TOP" MOREROWS="0"*COLNAME="2" VALIGN="TOP" MOREROWS="0" a key attributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ignored by the FortΘ code generatorNote: In Enum classes (see REFID="13941" TYPE="XREF-TEXTCOPY"Enum Class), leading dollar signs are not ignored.Data typesYou must specify the data type of each attribute.See REFID="19914" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types for more information.Initial valuesTERM1="attribute" TERM2="default value"TERM1="default value, for attribute"TERM1="initial value, for attribute"You can specify a default value for any attribute. You must specify a default value for any ObjectTeam attribute that has the Constant property turned on. See REFID="18919" TYPE="XREF-TEXTCOPY"Modeling Constants for more information.Attribute propertiesYou use attribute properties to provide input to the code generator, such as a special kind of data type and the accessibility of data attributes. This section describes how to edit attribute properties, and the effect of each property.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19914" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29362" TYPE="XREF-TEXTCOPY"Editing Attribute Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34064" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24666" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39515" TYPE="XREF-TEXTCOPY"Modeling Virtual Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18919" TYPE="XREF-TEXTCOPY"Modeling Constants 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17574" TYPE="XREF-TEXTCOPY"Modifying Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="19914"Specifying Attribute Data TypesData typesTERM1="data type" TERM2="for attribute"TERM1="attribute" TERM2="data type"Specify the data type of an attribute with either a standard data type, such as short or char, or the name of another class. For example:COLS="2"COLNAME="1" COLWIDTH="150p"COLNAME="2" COLWIDTH="298p"COLNAME="1" VALIGN="TOP" MOREROWS="0"attr:shortCOLNAME="2" VALIGN="TOP" MOREROWS="0"(FortΘ standard type)COLNAME="1" VALIGN="TOP" MOREROWS="0"attr:TextDataCOLNAME="2" VALIGN="TOP" MOREROWS="0"(FortΘ class)Standard data typesThe standard data types are defined in the TERM1="stand_types customization file"stand_types customization file. These are the data types that are valid in the Object Design phase.The translation between standard data types and FortΘ data types is defined by the TERM1="lang_types customization file"lang_types customization file. These are the translations used by the FortΘ code generator.Modifying data typesAttribute data types can be modified through the attribute property Type Modifier. See REFID="17574" TYPE="XREF-TEXTCOPY"Modifying Types for details.Customizing the standard data typesYou can add additional data types to the list of standard types by editing the stand_types customization file. If you add additional standard types, you must also provide translations for those data types by editing the lang_types customization file.By default, the stand_types and lang_types customization files are defined on Corporate level. You can edit the customization files at Corporate level, or create and edit them at a lower level, such as Project level. (The customization files at the lower level override the customization files at the higher level.)For more informationThe ObjectTeam Customization Guide describes how to create and edit customization files. The stand_types and lang_types customization files are ASCII files that can be edited using any text editor.ID="29362"Editing Attribute PropertiesIntroductionIn the Object Design phase, you define properties of the data attributes. These properties define the accessibility of the attribute, as well as the behavior of the attributes. The code generated for a data attribute is based on its properties.How to edit attribute propertiesTERM1="Edit Properties (Item menu)" TERM2="for attribute"TERM1=""TERM1="attribute property" TERM2="editing"Σ To edit attribute properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an attribute name from the list in the left-hand pane of the dialog box.The attribute properties appear on the right side of the dialog box.FILENAME="00623.unk" ORIGFILE="pics/dbedprat.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"4 Select the desired properties. (The following subsections describe each property in greater detail.)COLS="4"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="51p"COLNAME="3" COLWIDTH="195p"COLNAME="4" COLWIDTH="108p"COLNAME="1" VALIGN="TOP" MOREROWS="0"propertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"tabCOLNAME="3" VALIGN="TOP" MOREROWS="0"specifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"see for detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"A particular kind of data type for the attribute, such as an array or a pointer, or a user-defined type modifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17574" TYPE="XREF-TEXTCOPY"Modifying TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConstantCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"An ObjectTeam data attribute to be a FortΘ constantCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="18919" TYPE="XREF-TEXTCOPY"Modeling ConstantsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Access COLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The accessibility of the data attributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34064" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Access MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The access methods for the data attributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24666" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Get ExpressionCOLNAME="2" VALIGN="TOP" MOREROWS="0"VirtualCOLNAME="3" VALIGN="TOP" MOREROWS="0"The Get Expression of a virtual attributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39515" TYPE="XREF-TEXTCOPY"Modeling Virtual AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Set ExpressionCOLNAME="2" VALIGN="TOP" MOREROWS="0"VirtualCOLNAME="3" VALIGN="TOP" MOREROWS="0"The Set Expression of a virtual attributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39515" TYPE="XREF-TEXTCOPY"Modeling Virtual AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional attribute comments, which do not appear in generated codeCOLNAME="4" VALIGN="TOP" MOREROWS="0"--5 Select OK.ID="34064"Specifying Accessibility of Data AttributesIntroductionTERM1="attribute property" TERM2="access"TERM1="access property" TERM2="for attribute"Edit the Access property to specify the accessibility of a data attribute. You find this property on the Misc tab in the Edit Properties dialog box when the Attribute Name is selected.n Public. The attribute is accessible anywhere that the class name is accessible.n Private (default). The attribute is accessible only within the class body of the class in which the attribute is declared.ExampleThe code excerpts below show how this property affects code generation for the Amount attribute of the Account class.Private...class Account inherits from Framework.Objecthas private attribute amount: int;...Public ...class Account inherits from Framework.Objecthas public attribute amount: int;...ID="24666"Specifying Access Methods for Data AttributesIntroductionTERM1="attribute" TERM2="access method"TERM1="attribute property" TERM2="access method"TERM1="access property" TERM2="for attribute access method"TERM1=""TERM1="Java, generated" TERM2="attribute access method"TERM1="attribute access method"TERM1="method" TERM2="attribute access"An attribute access method is a special type of method that gets (reads) and sets (writes) an attribute's value. Use the Attribute Access Methods group box on the Access tab of the Edit Properties dialog box to specify what accessors are generated for the data attribute. You find this group box on the Misc tab in the Edit Properties dialog box when the Attribute Name is selected.Read and Write fieldsThe Attribute Access Methods group box allows you to specify the access method for both read and write. The setting you specify in the Read field affects the Get attribute access method. The setting you specify in the Write field affects the Set attribute access method.Access methodsThe following values are allowed for both Read and Write fields. You can enter the same or different values in the two fields.n Public (default). The generated method is accessible anywhere the class name is accessible.n Private. The generated method is only accessible in the body of the class in which the attribute is declared.n None. The method is not generated.ExampleThe code excerpt below shows the code generated for the Account class, which has one attribute, Amount. The attribute's Read and Write access methods are both specified as Public (the default)....class Account inherits from Framework.Objecthas private attribute amount: int;...has public method getAmount: int;has public method setAmount(input newAmount: int);...ID="39515"Modeling Virtual AttributesIntroductionVirtual attributes in FortΘ are attributes that are based on a calculation rather than a value or a point to an object. A virtual attribute consists of two expressions: one that is evaluated when the program sets the value of the attribute and another that is evaluated when the program gets the value of the attribute.How to model a virtual attributeΣ To model a virtual attribute in ObjectTeam:1 Prefix the attribute of your choice with a forward slash (/), for example:/IDisNull:booleanNote: The forward slash is used in ObjectTeam to indicate a derived attribute.2 Enter a Get Expression property for this attribute, for example:CheckIDNullValueYou find the Get Expression field on the Virtual tab in the Edit Properties dialog box.FILENAME="00624.unk" ORIGFILE="pics/edvirtpr.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"3 Enter a Set Expression property for this attribute.4 Click OK.Example (ObjectTeam)The following expression is specified as value for the ObjectTeam property Set Expression:SetIDNullValue(isNull)Generated .cex file...has private virtual attribute IDisNull: boolean = (get =CheckIDNullValue, set =SetIDNullValue(isNull));...Note: Initial values for virtual attributes are ignored by the FortΘ code generator.ID="18919"Modeling ConstantsIntroductionA constant is a string or numeric value with a name. This name can be used throughout the FortΘ code.How to model a constantΣ To model a constant in ObjectTeam:1 Specify a data attribute with an initial value, for example:size:int=300The name of the attribute will become the name of the constant and the initial value will become the constant value. Note: The type of the attribute is not important, but must be provided.2 Turn on the property Constant for the attribute.You find the Constant check box on the Misc tab in the Edit Properties dialog box when you select the Attribute Name.3 Click OK.Example (ObjectTeam)The attribute size in this example is an example of a constant:FILENAME="00625.unk" ORIGFILE="pics/constatt.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Generated .cex file...has private constant size = 300;...ID="17574"Modifying TypesIntroductionYou can use the Type Modifier property, which can be found on the Misc tab in the Edit Properties dialog box, to modify the type of:n a data attributen a parametern a method (return type)The following types can be modeled in ObjectTeam:n REFID="16736" TYPE="XREF-TEXTCOPY"Modifying FortΘ Array typesn REFID="26519" TYPE="XREF-TEXTCOPY"Modifying simple C-style array typesn REFID="26586" TYPE="XREF-TEXTCOPY"Modifying pointer typesn REFID="34638" TYPE="XREF-TEXTCOPY"Modifying user-defined attribute typesID="16736"Modifying FortΘ Array typesIn FortΘ, you can use the prefabricated classes Array and LargeArray for type definition.Σ To model a FortΘ Array as type:1 Specify a data attribute, a parameter or a method with a class as type, for example:name:TextDataThe class must exist in a system of the current phase.2 Set the Type Modifier property for the attribute, the parameter or the method to Array or LargeArray.You find the Type Modifier property on the Misc tab in the Edit Properties dialog box. Use Array for arrays smaller than 256 entries, and LargeArray for arrays beyond this limit. 3 Click OK.Example (ObjectTeam)The Type Modifier of the data attribute type TextData in the following example has been set to LargeArray:FILENAME="00626.unk" ORIGFILE="pics/array.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Generated .cex file...has private attribute name: Framework.LargeArray of Framework.TextData;...ID="26519"Modifying simple C-style array typesΣ To model a simple C-style array as type, specify a standard type for the attribute, the parameter or the method, and use an integer between square brackets to indicate the upper bounds of the array.Example (ObjectTeam data attribute)name:char[20]Generated .cex file...has private attribute name: array[20] of char;...ID="26586"Modifying pointer typesIn FortΘ, a pointer to a specific data type or a specific class can be used for attribute type definition. You can model such an attribute type in ObjectTeam by setting the Type Modifier property to Pointer.Σ To model a pointer to a data type as attribute type:1 Specify a standard type or a class as attribute type.2 Set the Type Modifier property for this attribute on Pointer.3 Click OK.Example (ObjectTeam data attribute)COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeam data attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"name:char[20]COLNAME="2" VALIGN="TOP" MOREROWS="0"Standard typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"name:TextDataCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class typeGenerated .cex file (for standard type)...has private attribute name: pointer to array[20] of char;...Generated .cex file (for class type)...has private attribute address: pointer to Framework.TextData;...ID="34638"Modifying user-defined attribute typesIn FortΘ you can define a variety of attribute types; class types as well as (derived) C-data types. The most common types can be modified in ObjectTeam by selecting the appropriate Type Modifier.However, you can modify your own attribute type in ObjectTeam by entering the required FortΘ code in the Type Modifier field.Warning: Since the FortΘ code generator does not check whether the code you enter is valid, illegal FortΘ code may be generated.ExampleTo generate a construction like the following in FortΘ:...has private attribute name: array[5] [3..10] of char;...Enter the following FortΘ code in the Type Modifier field:array [5] [3..10] of $nameDuring code generation, the variable $name is substituted by the attribute's data type, which is char in this example. The generated attribute type is the type you wanted to generate.Strictly speaking, the addition $name is not required if a data type has been provided. However, it makes the code more readable.Note: In this example a special form of a C-style array is specified, but you can use the Type Modifier field to enter any FortΘ code in order to specify the attribute's type. ID="29516"Mapping OperationsID="31495"IntroductionAn operation defined for an ObjectTeam class can be generated in the following FortΘ elements:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="304p"COLNAME="1" VALIGN="TOP" MOREROWS="0"forte elementCOLNAME="2" VALIGN="TOP" MOREROWS="0"detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method (default)COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="26111" TYPE="XREF-TEXTCOPY"Modeling MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="12760" TYPE="XREF-TEXTCOPY"Modeling EventsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Event HandlerCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="12454" TYPE="XREF-TEXTCOPY"Modeling Event HandlersYou indicate through the operation property Operation Type into which FortΘ element your operation must be generated. The way you model your operation and the set of properties you can specify depend on this property.Operation syntaxIn ObjectTeam, you use the following syntax to specify operations for a class:[ $ ] name ( [ parameter-list ] ) [ : return_type ] [ {abstract} ]wheren $ indicates a class feature.FortΘ does not support class features; therefore, this indicator is ignored by the code generator. It is only meaningful in the method $create.n name is the operation nameTip: You can enter a new name here, or, if you want to overload or override a method, the name of the method you want to overload or override.n parameter-list is a comma-separated list of parameters, where each parameter is specified as follows:parameter_name:data_typeFor more information on parameters, refer to REFID="24200" TYPE="XREF-TEXTCOPY"Defining Parameters.n return_type is either a standard type or a class. For more information on return types, refer to REFID="26111" TYPE="XREF-TEXTCOPY"Modeling Methods.n {abstract} indicates an abstract operation. FortΘ does not support abstract operations; therefore, this indicator is ignored by the code generator.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10729" TYPE="XREF-TEXTCOPY"Editing Operation Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28435" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Operations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'28COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24200" TYPE="XREF-TEXTCOPY"Defining Parameters 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'30COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26111" TYPE="XREF-TEXTCOPY"Modeling Methods 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'34COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12760" TYPE="XREF-TEXTCOPY"Modeling Events 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12454" TYPE="XREF-TEXTCOPY"Modeling Event Handlers 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'40COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10437" TYPE="XREF-TEXTCOPY"The Init Method 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'41ID="10729"Editing Operation PropertiesTERM1="Edit Properties (Item menu)" TERM2="for method"TERM1=""TERM1="method property" TERM2="editing"IntroductionYou use operation properties to provide input to the code generator. The code generated for an operation is based on its properties.ID="16670"How to specify operation propertiesΣ To edit operation properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a method name from the list in the left-hand pane of the dialog box.The operation properties appear on the right side of the dialog box.FILENAME="00627.unk" ORIGFILE="pics/dbedprmt.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"4 Select the desired properties. (The following subsections describe each property in greater detail).COLS="4"COLNAME="1" COLWIDTH="73p"COLNAME="2" COLWIDTH="37p"COLNAME="3" COLWIDTH="156p"COLNAME="4" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The accessibility of the generated method, event or event handlerCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="28435" TYPE="XREF-TEXTCOPY"Specifying Accessibility of OperationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The return type of a methodCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24050" TYPE="XREF-TEXTCOPY"Modifying a method's return typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"CopyCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Whether a reference to a copy of the class type object, or the reference to the class type object itself must be passed (only applicable to methods with a class return type)COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17071" TYPE="XREF-TEXTCOPY"Specifying the return type as copyCOLNAME="1" VALIGN="TOP" MOREROWS="0"Operation TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"If the ObjectTeam operation must be generated into a Method, an Event or an Event HandlerCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31495" TYPE="XREF-TEXTCOPY"IntroductionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional operation comments, which do not appear in generated code. COLNAME="4" VALIGN="TOP" MOREROWS="0"5 Select OK.Parameter and return type propertiesYou can also specify properties for parameters, as described in REFID="15651" TYPE="XREF-TEXTCOPY"Editing parameter properties, and for the return type of an operation, as described in REFID="18091" TYPE="XREF-TEXTCOPY"Editing method properties.Besides for operations as a whole, you can specify properties for the return type of an operation, and for parameters within an operation.ID="28435"Specifying Accessibility of OperationsIntroductionTERM1="method property" TERM2="access"TERM1="access property" TERM2="for method"While in Object Design, use the Access field on the Misc tab in the Edit Properties dialog box to define the extent to which other classes can access a method, an event or an event handler of a class. n Public (default). The operation is accessible anywhere the class name is accessible.n Protected. The operation is accessible anywhere the class name is accessible. Protected is effectively identical to Public.n Private. The operation is accessible only in the body of the class in which it is declared.ExampleThe code excerpts below show how this property affects code generation for the Get_Employee_ID method of the Employee class.Public:...class Employee inherits from Framework.Object...has public method Get_Employee_ID;...Protected:...class Employee inherits from Framework.Object...has public method Get_Employee_ID;...Private:...class Employee inherits from Framework.Object...has private method Get_Employee_ID;...ID="31329"VisibilityYou can display the access level of methods in your diagram by checking Options | Show Visibility in the Class Diagram Editor. Method names will then be displayed with the following leading characters indicating the method's access level:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="318p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special characterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"+COLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"#COLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"-COLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateThese special characters can also be used to set the access level of methods. Typing a minus sign (-) before a method name will set the access level of the method to Private, for example. Warning: The special characters only work if the menu entry Options | Show Visibility in the Class Diagram Editor has been checked. Otherwise, the special characters will just be regarded as part of the method name.ID="24200"Defining ParametersIntroductionParameters can optionally be added to Methods, Events, and Event Handlers. Method parameters are used by the caller of the method to provide input values to the method, to hold output values from the method or both. Event Handler parameters are only used to provide input values to the event handler, such as the object for which the events are being handled.SyntaxThe parameters in the parameter list are separated by commas. Every parameter needs to have a type, which can either be a standard type or a (prefabricated or custom) class:(par_name:par_type, par_name:par_type, ...)ID="15651"Editing parameter propertiesThe following properties can be set for a parameter:FILENAME="00628.unk" ORIGFILE="pics/dbedprpm.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"With these properties you can specify the following:COLS="4"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="37p"COLNAME="3" COLWIDTH="151p"COLNAME="4" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The type of a parameterCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="27150" TYPE="XREF-TEXTCOPY"Modifying the type of a parameterCOLNAME="1" VALIGN="TOP" MOREROWS="0"CopyCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Whether a reference to a copy of the class type object, or the reference to the class type object itself must be passedCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="27277" TYPE="XREF-TEXTCOPY"Specifying the parameter type as copyCOLNAME="1" VALIGN="TOP" MOREROWS="0"MechanismCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The input/output mechanism of a parameterCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="22972" TYPE="XREF-TEXTCOPY"Specifying the Input Output mechanismCOLNAME="1" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The default value of a parameterCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="15392" TYPE="XREF-TEXTCOPY"Specifying a default valueCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional operation comments, which do not appear in generated code. COLNAME="4" VALIGN="TOP" MOREROWS="0"--ID="22972"Specifying the Input Output mechanismThe property Mechanism gives you control over the input/output mechanism of parameters in FortΘ.By default, a parameter is for input only. The caller specifies a parameter value when invoking the method. The method uses that value for processing.You can use the parameter property Mechanism to change the default input/output behavior. The available values are:n Input (default)n Outputn Input OutputExample (ObjectTeam)The Mechanism property for the parameter par1 in the following example has not been touched (i.e is set to Input), whereas for par2 it has been set to Output, and for par3 to Input Output:myMethod(par1:Textdata,par2:TextData,par3:short)Generated .cex file...has public method myMethod(input par1: Framework.TextData, output par2: Framework.TextData, input output par3: short);...ID="27150"Modifying the type of a parameterYou can use the parameter property Type Modifier to modify the type of a parameter. This is similar to modifying the type of an attribute (see REFID="17574" TYPE="XREF-TEXTCOPY"Modifying Types). You can modify it to be an Array, a LargeArray, or a Pointer. You can also provide a user-defined type modifier.ID="27277"Specifying the parameter type as copyWhen the type of a parameter in FortΘ is a class, FortΘ passes a reference to the object, instead of the object itself. The copy option allows you to prevent the calling and called method from referencing the same object. When you specify copy for a class parameter, FortΘ makes a copy of the object and passes a reference to that copy as the parameter.You can indicate that you want to use the copy option for a parameter in ObjectTeam by turning on the parameter property Copy. This property is turned off by default.Example (ObjectTeam)myMethod(par1:IntegerData,par2:TextData)The property Copy for the parameter par1 in this example has not been touched (i.e is turned off), whereas for par2 it has been switched on.Generated .cex file...has public method myMethod(input par1: Framework.IntegerData, copy input par2: Framework.TextData);...ID="15392"Specifying a default valueIn a call to a method, valid values for the method's parameters must be supplied, unless a default value has been specified. If a parameter has a default value, the parameter value can be specified in the call, overriding the default value. Parameters with a default value are usually referred to as optional parameters; parameters without a default value as required parameters.In ObjectTeam you can specify the default value of a parameter through the parameter property Default Value. Note: When your parameter type is a standard type, you can specify anything as default type, as long as it is compatible with the type of the parameter. In the case of a class type, the only default value you can specify is NIL, indicating "no object".Example (ObjectTeam)myMethod(par1:TextData,par2:short)The Default Value for par2 has been set to 42.Generated .cex file...has public method myMethod(input par1: Framework.TextData, input par2: short = 42);...ID="26111"Modeling MethodsIntroductionIn FortΘ, all methods consist of a name and the FortΘ source code that is executed when the method is called. The FortΘ code generator generates the method name and everything else that can be determined from your ObjectTeam model. The FortΘ source code you have to provide yourself. The following generated comment line reminds you of this:-- !! Implement this method !!Most methods include parameters, which allow the caller to pass information to and from the object that the method is manipulating. See REFID="24200" TYPE="XREF-TEXTCOPY"Defining Parameters for details on parameters.ID="30419"Special methodsThe FortΘ code generator also generates the following special methods automatically; you do not have to specify them as operations in an ObjectTeam class:n Init() This FortΘ method is generated by default for all classes; that is, all ObjectTeam classes that have the Class Type Class specified.See REFID="10437" TYPE="XREF-TEXTCOPY"The Init Method for details.n Display()This FortΘ method is only generated for window classes; that is, ObjectTeam classes that are derived from the prefabricated FortΘ class UserWindow.n Attribute access methods, as described in REFID="24666" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data Attributes.n Association access methods, as described in REFID="10004" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.Note: The ObjectTeam methods $create and $create() are ignored by the FortΘ code generator. However, sometimes you need them to prevent an ObjectTeam class from being generated as a (generic) typedef (see REFID="24618" TYPE="XREF-TEXTCOPY"Typedef Class).ID="18091"Editing method propertiesThe following properties can be set for a method:FILENAME="00629.unk" ORIGFILE="pics/dbedprmt.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"With these properties you can specify the following:COLS="4"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="60p"COLNAME="3" COLWIDTH="138p"COLNAME="4" COLWIDTH="175p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TabCOLNAME="3" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The return type of the methodCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24050" TYPE="XREF-TEXTCOPY"Modifying a method's return typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"CopyCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Whether a reference to a copy of the class type object, or the reference to the class type object itself must be passedCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17071" TYPE="XREF-TEXTCOPY"Specifying the return type as copyCOLNAME="1" VALIGN="TOP" MOREROWS="0"Return EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"A return event for a methodCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="14000" TYPE="XREF-TEXTCOPY"Specifying a return eventCOLNAME="1" VALIGN="TOP" MOREROWS="0"Exception EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"An exception event for a methodCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19136" TYPE="XREF-TEXTCOPY"Specifying an exception eventCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional method comments, which do not appear in generated code. COLNAME="4" VALIGN="TOP" MOREROWS="0"--Note: The properties Access and Operation Type are described in REFID="16670" TYPE="XREF-TEXTCOPY"How to specify operation properties. All properties specific to methods are described below.ID="24050"Modifying a method's return typeSpecifying a return type for a method is optional. The return type is the data type of the value that is passed back to the caller by a return statement in the method. The return type of a method can be a standard data type or a class type. Both these types can be modified using the method property Type Modifier, whose usage is similar to the attribute property Type Modifier (See REFID="17574" TYPE="XREF-TEXTCOPY"Modifying Types).Note: Defining a return type is optional. However, if you do not specify a return type, you cannot use the return statement in the body of the method to pass a value back to the caller of the method.Example (ObjectTeam)myMethod(par1:TextData,par2:short):IntegerDataThe Type Modifier for IntegerData has been set to Array.Generated .cex file...has public method myMethod(input par1: Framework.TextData, input par2: short): Framework.Array of Framework.IntegerData;...ID="14000"Specifying a return eventIn FortΘ, you can use the start task statement in combination with a return event to call a method as a separate task and receive a notification when the task completes. To make this mechanism work, you must define a return event for the method, which you can do in ObjectTeam through the method property Return Event. You find this property on the Method tab in the Edit Properties dialog box.FILENAME="00630.unk" ORIGFILE="pics/rtexevt.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"When you call the method with the start task statement and you request the return event, the method automatically produces a return event when it completes. This return event uses the output and input-output parameters defined for the method (see REFID="22972" TYPE="XREF-TEXTCOPY"Specifying the Input Output mechanism).If a return type has been defined for the method, the last parameter of the event is a return value called return.Warning: If you override a method, you must not define a return event, since only the original method can define a return event.Example (ObjectTeam)myMethod(par1:TextData,par2:short):IntegerDatamyReturnEvent is specified as Return Event for myMethod.Generated .cex file...has public method myMethod(input par1: Framework.TextData, input par2: short): Framework.IntegerData where completion = (return = myReturnEvent);...ID="19136"Specifying an exception eventThe start task statement in FortΘ can also be used in combination with an exception event to call a method as a separate task and receive a notification when the task terminates due to an unhandled exception.To make this mechanism work, you must define an exception event, which you can do in ObjectTeam through the method property Exception Event. You find this property on the Method tab in the Edit Properties dialog box.When you use start task statement with the exception event on to call the method, the method automatically produces an exception event when it is terminated. This exception event has one parameter called exception.Example (ObjectTeam)myMethod(par1:TextData,par2:short):IntegerDatamyExceptionEvent is specified as Exception Event for myMethod.Generated .cex file...has public method myMethod(input par1: Framework.TextData, input par2: short): Framework.IntegerData where completion = (exception = myExceptionEvent);...ID="17071"Specifying the return type as copyIf your return type is a class, you can prevent the calling and the called method from referencing the same object in FortΘ by using the copy option. In ObjectTeam you can indicate that you want to use the copy option through the method property Copy. The way this property works is similar to how it works for parameter types (see REFID="27277" TYPE="XREF-TEXTCOPY"Specifying the parameter type as copy).Example (ObjectTeam)myMethod(par1:TextData,par2:short):IntegerDataThe Copy option for IntegerData has been turned on.Generated .cex file...has public method myMethod(input par1: Framework.TextData, input par2: short): copy Framework.IntegerData;...ID="12760"Modeling EventsIntroductionYou mark an operation in ObjectTeam as event by setting the operation property Operation Type to Event. This property can be found on the Misc tab in the Edit Properties dialog box.Events in FortΘAn event is a notification that something significant has happened. In FortΘ, an object as well as a method that is operating on an object can trigger an event. When such an event is triggered, other parts of the application that are watching for that event can react to it.Event parametersLike methods, events can have parameters that allow the method that is triggering the event to provide information to any objects responding to the event. However, after the event is triggered, no communication takes place between the method triggering the event and the object or method responding to the event.See REFID="24200" TYPE="XREF-TEXTCOPY"Defining Parameters for more information.Return typeSince return types for events have no meaning in FortΘ, they are ignored by the FortΘ code generator.ExampleSuppose the following operation is defined in an ObjectTeam class:ItemOut(ItemSKU:double,OrdersNo:integer)If the operation property Operation Type is set to Event, then the following FortΘ code is generated for the operation ItemOut:...has public event ItemOut(ItemSKU: double, OrdersNo: integer);...Note: No bodies are generated for Events.ID="12454"Modeling Event HandlersIntroductionYou mark an operation in ObjectTeam as event handler by setting the operation property Operation Type to Event Handler. This property can be found on the Misc tab in the Edit Properties dialog box.Event handlers in FortΘAn event handler in FortΘ is a piece of TOOL code with a name. It is executed in response to one or more events. The event handler provides code that can be included in any number of event statements.Event handler parameters Like events, event handlers can have parameters. The mechanism used for these parameters is always input. Other values specified in ObjectTeam will be ignored by the FortΘ code generator.See REFID="24200" TYPE="XREF-TEXTCOPY"Defining Parameters for more information.Return typeSince return types for events have no meaning in FortΘ, they are ignored by the FortΘ code generator.ExampleSuppose the following operation is defined in an ObjectTeam class:GlueHandler(GlueAmount:float)If the operation property Operation Type is set to Event Handler, then the following FortΘ code is generated for the operation GlueHandler:...has public event handler GlueHandler(input GlueAmount: float);...event handler myEvent.GlueHandler(input GlueAmount: float)begin -- !! Implement this event handler !!end event;...The generated comment line reminds you to insert the actual event handler source between the begin and end event markers.ID="10437"The Init MethodIntroductionIn FortΘ, a default Init method is provided for every class. The Init method is automatically invoked on an object immediately after it is constructed. The default Init method simply invokes the Init method from the class's superclass.The FortΘ generator adds the default Init method to every FortΘ class. It also adds comment lines, indicating where you should initialize public attributes, for example:...method Customer.Initbegin super.Init(); -- Start constructor user section -- End constructor user sectionend method;...The FortΘ generator generates a framework for Init methods and initializes the public attributes it is able to initialize. Other initializations you can do yourself. Public attributesIf the data type of a public attribute in a class is a class itself, the FortΘ code generator generates a new statement for this attribute in the body of the Init method. If the data type is a standard type, which is provided with an initial value, the attribute is initialized with this value.For example:Example (ObjectTeam)FILENAME="00631.unk" ORIGFILE="pics/init.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Customer.cex...method Customer.Initbegin super.Init(); name = new; id = 9; -- Start constructor user section -- End constructor user sectionend method;...The Init method in "many" associationsIn associations with a multiplicity of many, the FortΘ code generator adds an extra statement to the default Init method of the class at the other side of the many association. In this statement, an attribute with the name role_nameSet is initialized.For example:Example (ObjectTeam)FILENAME="00632.unk" ORIGFILE="pics/initmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"School.cex...method School.Initbegin super.Init(); pupilSet = new; -- Start constructor user section -- End constructor user sectionend method;...For more informationSee REFID="14505" TYPE="XREF-TEXTCOPY"Mapping Associations With Multiplicity of Many.ID="28842"The Init method in qualified associationsThe extra attribute that is initialized in qualified associations is of the type HashTable. You must explicitly initialize this hash table in the body of the Init method using Setup. An extra comment in the Init method reminds you of this.For example:Example (ObjectTeam)FILENAME="00633.unk" ORIGFILE="pics/hashtbl.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"School.cex...method School.Initbegin super.Init(); pupilSet = new; -- ! the user should initialize HashTable 'pupilSet' properly -- ! by calling ``pupilSet.Setup(...)'' in the user section -- -- Start constructor user section -- End constructor user sectionend method;...The following is an example of a user-defined hash table initialization:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Startname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'intFuncs : HashFuncs = new(keyType = SP_KT_INTEGER);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pupilSet.Setup(size = 1000, functions = intFuncs, uniqueKey = FALSE);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionFor more informationSee REFID="32807" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations.ID="25351"Mapping InheritanceIntroductionThe FortΘ code generator supports single inheritance for classes. Multiple inheritance is not supported.What is generatedIn FortΘ, every class is a subclass of another class, with Framework.Object as root class. Every custom class you draw in ObjectTeam is part of an inheritance hierarchy. Even if you do not draw a superclass for a custom class, the class is assumed to be a subclass of Framework.Object.In the .cex file that is generated for a custom class, the class's superclass is always included in the class definition.ExampleThe following picture shows a simple inheritance hierarchy:FILENAME="00634.unk" ORIGFILE="pics/inherit.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"The definitions of the classes that are generated are as follows:DialogBox.cex...class DialogBox is mapped inherits from DisplayProject.UserWindow...MessageDB.cex...class MessageDB is mapped inherits from mySystem.DialogBox...NoteBookDB.cex...class NoteBookDB is mapped inherits from mySystem.DialogBox...ListDB.cex...class ListDB is mapped inherits from mySystem.DialogBox...ID="34926"Mapping AssociationsIntroductionTERM1="mapping" TERM2="association"TERM1="association" TERM2="mapping of"ObjectTeam supports the following types of associations between classes:n Binary association (association between two classes)n Qualified association (association that include a qualifier)n Link attribute (attributes used to define the association)n Association as class (class used to define the association)Mandatory associationsThe FortΘ code generator does not discriminate between mandatory and optional associations; it handles both as optional associtions.TERM1="n-ary association"TERM1="association" TERM2="n-ary"N-ary associationsN-ary associations are ignored by the FortΘ code generator. Code is generated for the classes involved, but no code is generated for the association itself.AggregationsTERM1="aggregation"The FortΘ code generator translates aggregations like associations.ID="32778"Association attribute propertiesAssociation attributes and accessors, like data attributes and accessors, have associated ObjectTeam properties. You can effect the code generated for any association by specifying these properties in ObjectTeam.Σ To edit association properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a role name from the list in the left-hand pane of the dialog box.The association attribute properties appear on the right side of the dialog box.FILENAME="00635.unk" ORIGFILE="pics/dbedacpr.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"4 Select the desired properties:COLS="4"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="51p"COLNAME="3" COLWIDTH="195p"COLNAME="4" COLWIDTH="108p"COLNAME="1" VALIGN="TOP" MOREROWS="0"propertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"tabCOLNAME="3" VALIGN="TOP" MOREROWS="0"specifiesCOLNAME="4" VALIGN="TOP" MOREROWS="0"see for detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Access COLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The accessibility of the association attributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34064" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Access MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The access methods for the association attributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24666" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"MaximumVolumeCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"The (expected) maximum number of entries in your many association (only applicable to associations with a multiplicity of many).COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21308" TYPE="XREF-TEXTCOPY"Specifying the maximum volumeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional attribute comments, which do not appear in generated codeCOLNAME="4" VALIGN="TOP" MOREROWS="0"--5 Select OK.Note: The accessibility of association attributes for bidirectional associations are always Public. Hence, the code generator ignores the setting of the properties Access and Access Methods in biderectional associations.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10004" TYPE="XREF-TEXTCOPY"Mapping Simple Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'48COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14505" TYPE="XREF-TEXTCOPY"Mapping Associations With Multiplicity of Many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'52COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19223" TYPE="XREF-TEXTCOPY"Mapping Ordered Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'55COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32807" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'57COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38957" TYPE="XREF-TEXTCOPY"Mapping Link Attributes and Classes as Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'61ID="10004"Mapping Simple AssociationsIntroductionThis section describes how the FortΘ code generator implements the following simple associations between the Customer class and the Book class.Unidirectional associationFILENAME="00636.unk" ORIGFILE="pics/assuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Bidirectional associationFILENAME="00637.unk" ORIGFILE="pics/assbin.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Unidirectional and bidirectionalTERM1="association" TERM2="unidirectional"TERM1="unidirectional association"TERM1="association" TERM2="bidirectional"TERM1="bidirectional association"TERM1="one-to-one association"TERM1="association" TERM2="one-to-one"The direction of an association is defined by the role names on the association. A role name at the far end of the association indicates an association from the class at the near end to the class at the far end.If an association has a role name at only one end, it is a unidirectional association (implemented in one direction). If an association has role names at both ends, it is a bidirectional association (implemented in both directions).Mapping a unidirectional associationTERM1="Java, generated" TERM2="association attribute"TERM1="Java, generated" TERM2="association attribute access method"The FortΘ code generator implements a unidirectional association by adding an association attribute and a set of association attribute accessor methods to the code generated for the class at the near end of the association. This allows the class at the near of the association (Customer) to access the class at the far end (Book); the class at the far end of the association cannot access the class at the near end.ID="21654"Mapping a bidirectional associationThe FortΘ code generator implements a bidirectional association by adding an association attribute and a set of association attribute accessor methods to the code generated for both classes. This allows each class to access the other. To ensure integrity of a bidirectional association, the update method for a bidirectional association always maintains the association in both directions.Note: In bidirectional associations, the accesibility of association attributes and association attribute accessors is always Public. Hence, the association properties Access and Access Methods are ignored by the code generator.Bidirectional associations and .hex filesSince both classes (class A and class B) in a bidirectional association use accessor methods to one another, class A should be known to FortΘ before class B, and class B should be known to FortΘ before class A. To avoid conflicts on this, the FortΘ generator generates .hex files, which are equal to .cex files, except that the method bodies are lacking. These .hex files need to be imported in FortΘ first.For more informationSee REFID="20421" TYPE="XREF-TEXTCOPY"Generating FortΘ Code.Example of a unidirectional associationFollowing is an excerpt from the code generated for the Customer class in the unidirectional association. Because this is a unidirectional association, the Book class does not contain any code related to the association.begin CLASS;...class Customer inherits from Framework.Objecthas private attribute name: string;has private attribute book: gen.Book;has public method Init;has public method getName: string;has public method setName(input newName: string);has public method getBook: gen.Book;has public method setBook(input newBook: gen.Book);end class;...method Customer.getBook: gen.Bookbegin return book;end method;method Customer.setBook(input newBook: gen.Book)begin book = newBook;end method;end CLASS;Example of a bidirectional associationFollowing is an excerpt from the code generated for the Customer class in the bidirectional association. Because this is a bidirectional association, the Book class contains similar code to implement the association in the other direction.begin CLASS;...class Customer inherits from Framework.Objecthas private attribute name: string;has public attribute book: gen.Book;has public method Init;has public method getName: string;has public method setName(input newName: string);has public method getBook: gen.Book;has public method setBook(input newBook: gen.Book);end class;...method Customer.getBook: gen.Bookbegin return book;end method;method Customer.setBook(input newBook: gen.Book)begin if (book != NIL) then book.cust = NIL; end if; if (newBook != NIL) then newBook.setCust(NIL); newBook.cust = self; end if; book = newBook;end method;end CLASS;Association attributesTERM1="association attribute"TERM1="attribute" TERM2="association attribute"TERM1="association attribute access method"TERM1="method" TERM2="association attribute access"The ObjectTeam documentation use the term association attribute to refer to data attributes generated to support ObjectTeam associations (as opposed to data attributes generated from ObjectTeam attributes). In FortΘ, an association attribute is simply another data attribute and association accessors are simply data attribute accessors.ID="14505"Mapping Associations With Multiplicity of ManyPrerequisiteREFID="10004" TYPE="XREF-TEXTCOPY"Mapping Simple Associations describes the mapping of an ObjectTeam association with a multiplicity of one. This section assumes that you are familiar with that information.Multiplicity of manyTERM1="one-to-many association"TERM1="many-to-one association"TERM1="many-to-many association"TERM1="association" TERM2="one-to-many"TERM1="association" TERM2="many-to-many"This section describes how the FortΘ code generator implements the following association between the Customer class and the Book class. FILENAME="00638.unk" ORIGFILE="pics/assmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Note: The generated code is the same, regardless of whether you have specified an explicit number for the multiplicity.Mapping a many associationTERM1="Vector class"The mapping of an association with a multiplicity of many is similar to that of an association with a multiplicity of one; however, the type of the association attribute is different. n One. For an association with a multiplicity of one, the type of the association attribute is the associated class.n Many. For an association with a multiplicity of many, the type of the association attribute is the Array class. The Array class uses a slightly different set of attribute access methods. For read access, it uses a get method. For write access, however, it uses two methods: add and remove. All three attribute access methods are shown in the following example.Note: The Array class is part of the FortΘ Framework library.ID="21308"Specifying the maximum volumeTwo types of array classes exist in the FortΘ Framework library:n Arrayn LargeArrayThe Array class is used for arrays smaller than 256 entries, whereas the LargeArray class is used for arrays beyond this limit. You can use the Association property Maximum Volume to specify the (expected) maximum number of entries in your many association. Depending on this number, the FortΘ generator uses the Array or the LargeArray class.Note: If you do not specify a value for the Maximum Volume property, the FortΘ code generator uses the Array class.ExampleFollowing is an excerpt from the code generated for the Customer class shown above. (This association is unidirectional; therefore, the Book class does not contain any code related to the association.)beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CLASS;...classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Customername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'inheritsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'fromname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Framework.Objecthasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attributename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'string;hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'privatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attributename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bookSet:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Framework.Arrayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mySystem.Book;hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'publicname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Init;hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'publicname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'getName:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'string;hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'publicname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'setName(inputname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'newName:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'string);hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'publicname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'addBook(inputname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'newBook:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mySystem.Book);hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'publicname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'removeBook(inputname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'oldBook:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mySystem.Book);hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'publicname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'getBookSet:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Framework.Arrayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mySystem.Book;endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class;methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Customer.Initbeginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'super.Init();name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bookSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'new;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Startname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionendname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method;...methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Customer.addBook(inputname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'newBook:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mySystem.Book)beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(newBookname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NIL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thenname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(bookSet.FindRowForObject(newBook)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thenname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bookSet.AppendRow(newBook);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if;endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method;methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Customer.removeBook(inputname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'oldBook:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mySystem.Book)beginname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(oldBookname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NIL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thenname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bookSet.DeleteRow(objectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'oldBook);endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method;...endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CLASS;ID="19223"Mapping Ordered AssociationsPrerequisiteREFID="14505" TYPE="XREF-TEXTCOPY"Mapping Associations With Multiplicity of Many describes the mapping of an ObjectTeam association with multiplicity of many. This section assumes that you are familiar with that information.Ordered associationTERM1="association" TERM2="ordered"TERM1="ordered association"TERM1="mapping" TERM2="ordered association"This section describes how the FortΘ code generator implements the following ordered association between the Customer class and the Book class. FILENAME="00639.unk" ORIGFILE="pics/assord.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Mapping an ordered associationTERM1="Queue class" TERM2="and ordered association"The mapping of an ordered association, is similar to that of an association with an unordered multiplicity of many; however, the method that is generated for adding elements to the list is different.For ordered associations, the method appendclass_name is generated. In the implementation of this method, the list is considered an array. For unordered associations, the method addclass_name is generated, which considers the list a set.ExampleFollowing is an excerpt from the code generated for the Customer class shown above. (This association is unidirectional; therefore, the Book class does not contain any code related to the association.)begin CLASS;...class Customer inherits from Framework.Objecthas private attribute name: string;has private attribute bookSet: Framework.Array of mySystem.Book;has public method Init;has public method getName: string;has public method setName(input newName: string);has public method appendBook(input newBook: mySystem.Book);has public method removeBook(input oldBook: mySystem.Book);has public method getBookSet: Framework.Array of mySystem.Book;end class;...method Customer.appendBook(input newBook: mySystem.Book)begin if (newBook == NIL) then return; end if; bookSet.AppendRow(newBook);end method;...ID="32807"Mapping Qualified AssociationsPrerequisiteREFID="14505" TYPE="XREF-TEXTCOPY"Mapping Associations With Multiplicity of Many describes the mapping of an ObjectTeam association with multiplicity of many. This section assumes that you are familiar with that information.Qualified associationThis section describes how the FortΘ code generator implements the following association between the Customer class and the Book class. FILENAME="00640.unk" ORIGFILE="pics/quass.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Mapping a qualified associationTERM1="association" TERM2="qualified"TERM1="qualified association"TERM1="mapping" TERM2="qualified association"TERM1="Hashtable class"The mapping of a qualified associations, is similar to that of an association with multiplicity of many; however, the type of the association attribute is different.For a qualified association, the type of the association attribute is the class Framework.HashTable. The qualifier (bookID, in the CD above) is used as a key into the hashtable for storage and retrieval.Initializing the hash tableTERM1="hashCode method"TERM1="equals method"If the qualified association has a multiplicity greater than 1, you must initialize the hash table using the Setup method. A comment in the generated code reminds you to provide code for this method.For an example of such an initialization, see REFID="28842" TYPE="XREF-TEXTCOPY"The Init method in qualified associations.Role names at the side of the qualifierIn the example depicted above, every Book object keeps track of the Customer object it is associated with, or, if the multiplicity at the qualifier side is many, the set of associated Customer objects. Hence, the associated Customer object(s) can always be retrieved from a Book object.Bear in mind, however, that if you put a role name at the side of the qualifier, Book objects do not keep track of the qualifier, or the set of qualifiers used to establish the association with Customer object(s). The attribute roleName (or, in the case of a many association roleNameSet) that is generated for Book will not contain the qualifier, and will return the same as in a non-qualified association.How to edit qualifier propertiesTERM1="Edit Properties (Item menu)" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="editing properties"The only properties available for a qualifier are the data type and comments. You can, of course, also edit other properties of the association, as described in REFID="32778" TYPE="XREF-TEXTCOPY"Association attribute properties.Σ To edit qualifier properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears3 Select a qualifier from the list in the left-hand pane of the dialog box.The qualifier properties appear on the right side of the dialog box.4 Select the desired properties. - TERM1="qualifier" TERM2="data type"TERM1="data type" TERM2="for qualifier"Use the Misc tab to specify a (mandatory) data type for the qualifier.- TERM1="comment" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="comment for"TERM1="Java, generated" TERM2="comment, for qualifier"Use the Text tab to attach comments to the qualified association. Note that these comments do not appear in the generated code.5 Select OK.ExampleFollowing is an excerpt from the code generated for the Customer class shown above. (The association is unidirectional; therefore, the Book class does not contain any code related to the association.)The data type of the bookID qualifier is specified as integer, which is a FortΘ standard data type. The comment in the code reminds you to initialize the hash table for bookID.begin CLASS;...class Customer inherits from Framework.Objecthas private attribute name: string;has private attribute bookSet: Framework.HashTable;has public method Init;has public method getName: string;has public method setName(input newName: string);has public method getBookSet(input bookIDKey: integer): Framework.Array of mySystem.Book;has public method addBook(input bookIDKey: integer,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'input newBook: mySystem.Book);has public method removeBook(input bookIDKey: integer,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'input oldBook: mySystem.Book);end class;method Customer.Initbegin super.Init(); bookSet = new; -- ! the user should initialize HashTable 'bookSet' properly -- ! by calling ``bookSet.Setup(...)'' in the user section -- -- Start constructor user section -- End constructor user sectionend method;...method Customer.getBookSet(input bookIDKey: integer): Framework.Array of mySystem.Bookbegin obj : Framework.Object = bookSet.Find(bookIDKey); if (obj != NIL) then return (Framework.Array of mySystem.Book) (obj); end if; return NIL;end method;method Customer.addBook(input bookIDKey: integer,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'input newBook: mySystem.Book)begin if (newBook == NIL) then return; end if; theSet : Framework.Array of mySystem.Book; obj : Framework.Object = bookSet.Find(bookIDKey); if (obj == NIL) then theSet = new; bookSet.Enter(bookIDKey, theSet); else theSet = (Framework.Array of mySystem.Book) (obj); end if; if (theSet.FindRowForObject(newBook) == 0) then theSet.AppendRow(newBook); end if;end method;method Customer.removeBook(input bookIDKey: integer,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'input oldBook: mySystem.Book)begin if (oldBook == NIL) then return; end if; obj : Framework.Object = bookSet.Find(bookIDKey); if (obj != NIL) then theSet : Framework.Array of mySystem.Book = (Framework.Array of mySystem.Book) (obj); theSet.DeleteRow(object = oldBook); end if;end method;end CLASS;ID="38957"Mapping Link Attributes and Classes as AssociationsPrerequisiteThis section assumes that you are familiar with the mapping of various types of associations, as described in the previous sections.Attributes and classes on associationsObjectTeam allows you to specify information about an association by linking attributes, or a class, to the association. The following diagram shows a link attribute symbol; a class symbol could be used in the same location.FILENAME="00641.unk" ORIGFILE="pics/asslatr.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Association mapped as two associationsAn association that includes a link attribute or a class is transformed before code generation. The link attribute or class becomes a separate class, with appropriate associations to the original classes. The generated code is then based on the transformed association.ExampleThe code generated for the CD shown above is actually based on the following CD:FILENAME="00642.unk" ORIGFILE="pics/assascl.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Name used for the third classTERM1="association" TERM2="and link attribute"TERM1=""TERM1="link attribute"TERM1="mapping" TERM2="link attribute"If the association includes a link attribute, the new class is assigned the name of the association. Therefore, an association that has a link attribute must have an association name.TERM1="association" TERM2="and class"TERM1=""TERM1="class" TERM2="as association"TERM1=""TERM1="mapping" TERM2="class, as association"If the association includes a class, that class is used as the third class. Therefore, an association that includes a class does not need an association name.Role names are requiredAs with all associations, role names are required. If a role name is omitted, the association attributes and methods that would map to that role name are not generated.ExampleFollowing is the code generated for each of the three FortΘ classes produced by the CD shown above.purchase.cexbegin CLASS;...class purchase inherits from Framework.Objecthas private attribute date: string;has public attribute cust: mySystem.Customer;has public attribute book: mySystem.Book;has public method Init;has public method getDate: string;has public method setDate(input newDate: string);has public method getCust: mySystem.Customer;has public method getBook: mySystem.Book;end class;...Customer.cexbegin CLASS;...class Customer inherits from Framework.Objecthas private attribute name: string;has public attribute purchaseOfBookSet: Framework.Array of mySystem.purchase;has public method Init;has public method getName: string;has public method setName(input newName: string);has public method getPurchaseOfBookSet: Framework.Array of mySystem.purchase;end class;method Customer.Initbegin super.Init(); purchaseOfBookSet = new; -- Start constructor user section -- End constructor user sectionend method;...Book.cexbegin CLASS;...class Book inherits from Framework.Objecthas private attribute title: string;has public attribute purchaseOfCust: mySystem.purchase;has public method Init;has public method getTitle: string;has public method setTitle(input newTitle: string);has public method getPurchaseOfCust: mySystem.purchase;end class;...ID="40407"Handling Special ClassesIntroductionThere are several special constructions in FortΘ that can be modeled in ObjectTeam.The following special classes are discussed in this section:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24618" TYPE="XREF-TEXTCOPY"Typedef Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'65COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12612" TYPE="XREF-TEXTCOPY"Generic Typedef Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'67COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27793" TYPE="XREF-TEXTCOPY"Constant Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'71COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13941" TYPE="XREF-TEXTCOPY"Enum Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'75COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15593" TYPE="XREF-TEXTCOPY"Struct Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'77COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39931" TYPE="XREF-TEXTCOPY"Union Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'78COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30243" TYPE="XREF-TEXTCOPY"Service Object Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'79COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33517" TYPE="XREF-TEXTCOPY"Cursor Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'81.hex filesAs with any ObjectTeam class, the FortΘ code generator generates a .cex and a .hex file for every special class. However, since no FortΘ classes are generated for special classes, the .hex files are redundant. They only contain the following line:--emptyID="24618"Typedef ClassIntroductionTERM1="enumeration"The Typedef class is a standard construct to specify the FortΘ derived C data type typedef: a synonym for a specific data type or user-defined class.A Typedef class is a class with only one data attribute and no methods. It is generated into the following FortΘ typedef construction:typedef data_type type_name;This is how it maps to the FortΘ typedef construction:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"fortΘCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="1" VALIGN="TOP" MOREROWS="0"data_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"class nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"type_nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"data type of attributeHow to specify a typedef classTo specify a typedef class:1 Draw a class with only one data attribute that represents the source type.Note: The name of the data attribute is not important, but must be provided.2 Make sure the class does not have any of the following:- associations resulting in code generation- operations- superclassesExampleThe following figure shows two typedef classes. FILENAME="00643.unk" ORIGFILE="pics/specex12.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"TypedefEx1.cex...typedef TypedefEx1 : char;...TypedefEx1.cex...typedef TypedefEx2 : Date;...How to avoid generating a typedef classFor every class that has only one data attribute and no methods, the FortΘ code generator generates a typedef construction.However, you may have such classes in your model for which you do not want to generate a typedef. The way of getting around this is to add the following method to the class:$createThis method signals the FortΘ generator to handle the class as a regular class, but does not appear in the generated code.ID="12612"Generic Typedef ClassIntroductionGeneric typedef constructions are typedefs through which you can define a synonym for the following data types that are supported by FortΘ:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"data typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"kind of data typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"pointer to data_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"derived C data typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Array COLNAME="2" VALIGN="TOP" MOREROWS="0"TOOL data typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"HashTableCOLNAME="2" VALIGN="TOP" MOREROWS="0"TOOL data typeHow to specify a generic typedef classΣ To specify a generic typedef class:1 Draw a class and give it a name.2 Make sure the class does not have any of the following:- data attributes- operations- superclasses- subclasses3 Draw an association between the class you have just drawn (class A) and the class for which you want to generate the generic typedef (class B).The multiplicity at the side of class B determines which generic typedef is generated:COLS="2"COLNAME="1" COLWIDTH="216p"COLNAME="2" COLWIDTH="216p"COLNAME="1" VALIGN="TOP" MOREROWS="0"multiplicityCOLNAME="2" VALIGN="TOP" MOREROWS="0"generic typedefCOLNAME="1" VALIGN="TOP" MOREROWS="0"optionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"pointerCOLNAME="1" VALIGN="TOP" MOREROWS="0"manyCOLNAME="2" VALIGN="TOP" MOREROWS="0"array4 Supply a role at the side of class B.The name of the role is not important, but must be provided.Example (multiplicity: optional)TERM1="generic typedef class" TERM2="example of generated C++ code"TERM1="C++" TERM2="code from generic typedef class"The following overview shows generic typedef classes and the most significant part of the resulting FortΘ code:FILENAME="00644.unk" ORIGFILE="pics/gentypop.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"GenTyEx2.cex...typedef GenTyEx2 : pointer to mySystem.Ex2;...Example (multiplicity: many)Here are three examples of generic typedef constructions:n a typedef class associated with a non-window classn a typedef class associated with a non-window class, with a Maximum Volume specifiedn a typedef class associated with an Enum class.Associated with a non-window classFILENAME="00645.unk" ORIGFILE="pics/gntypenm.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"The following FortΘ code is generated for the class GenTyEx3:...typedef GenTyEx3 : Framework.Array of mySystem.Ex3;...Maximum Volume specifiedIf the association property Maximum Volume is set to anything beyond 255, the class Framework.LargeArray will be used instead of Framework.Array.If in the previous example the property Maximum Volume for role x is set to 300, for example, the following FortΘ code is generated for the class GenTyEx3:...typedef GenTyEx3 : Framework.LargeArray of mySystem.Ex3;...Associated with an Enum classFILENAME="00646.unk" ORIGFILE="pics/gntypenm.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"The following FortΘ code is generated for the class GenTyEx5, which is associated with an Enum class (see REFID="13941" TYPE="XREF-TEXTCOPY"Enum Class for details):...typedef GenTyEx5 : array[255] of mySystem.myEnumClass;...Example (multiplicity: one)If the multiplicity of the association at the side of class B is mandatory, a normal, non-generic typedef is created to class B (see REFID="24618" TYPE="XREF-TEXTCOPY"Typedef Class):FILENAME="00647.unk" ORIGFILE="pics/gentypmd.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"GenTyEx1.cex...typedef GenTyEx1 : mySystem.Ex1;...Hash tableBesides pointer and array typedefs, you can model hash table typedefs in ObjectTeam. You must then specify a qualified association instead of a normal association, and the multiplicity must be optional (e.g. many).Multiplicity: qualified-manyFILENAME="00648.unk" ORIGFILE="pics/gentypql.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"GenTyEx4.cex...typedef GenTyEx4 : Framework.HashTable;...ID="27793"Constant ClassIntroductionA constant is a literal string or numeric value that has a name. You can model the name and the value of a constant in ObjectTeam through a data attribute in a special Constant class.How to specify a constant classTo specify a Constant class:1 Draw a class.2 Set the property Class Type of this class to Constant.3 Specify a data attribute and assign a value to it. The value you assign to the data attribute becomes the value of the constant.Note: The name and the type of the data attribute are not important, but must be provided.4 Make sure the class does not have any of the following:- associations resulting in code generation- operations- superclasses- subclasses ExampleThe next figure shows an example of a constant class. The property Class Type has been set to Constant.FILENAME="00649.unk" ORIGFILE="pics/const.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"myConstant.cex...constant myConstant = 31;...ID="14514"InterfaceIntroductionA class usually consists of a class definition and the code that implements the class, such as method bodies. An interface only consists of a definition; the method bodies are implemented somewhere else.Therefore, an interface does not have the following components:n attributes (except virtual ones)n method bodiesn event handler bodiesInterfaces are generally used as an aid for modeling multiple inheritance.Class hierarchyAn interface can be derived from at most one other interface. Make sure that if there are multiple interfaces in the class hierarchy of a user-defined class, all the methods from these interfaces are included in the user-defined class.How to specify an interfaceTo specify an interface class:1 Draw a class.2 Set the property Class Type of this class to Interface.3 Specify the operations of your choice.4 Make sure the class does not have any of the following:- AttributesVirtual attributes, however, are allowed- Multiple superclasses5 Derive a user-defined class from the Interface class.6 Make sure the user-defined class is also derived from a FortΘ class. If it is not, the code generator assumes that Framework.Object is its super class.7 Copy the method definitions of the Interface superclass to the new class.Note: The methods of all Interface classes in the new class's hierarchy must be copied to the new class.Method definitions are generated for both the Interface class and the user-defined class that is derived from the Interface class. However, only the user-defined class will contain method bodies. Therefore, the following comment line reminding you of implementing the method is only added to the user-defined class:-- !! Implement this method !!ExampleThe next figure shows an example of an interface and a user-defined class which is derived from this interface. The property Interface has been turned on for the class MyInterface.FILENAME="00650.unk" ORIGFILE="pics/intface.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"MyInterface.cex:...begin INTERFACE;...-- START FORWARD CLASS DECLARATIONS-- END FORWARD CLASS DECLARATIONSinterface MyInterface -- User-defined methodshas public method myMethod(input par1: int): int;end interface;end INTERFACE;...Person.cex:...begin CLASS;...-- START FORWARD CLASS DECLARATIONSforward TextData;forward interface MyInterface;-- END FORWARD CLASS DECLARATIONSclass Person inherits from Framework.Object...implements MySystem.MyInterface;end class;...method Person.myMethod(input par1: int): intbegin -- !! Implement this method !!end method;end CLASS;ID="13941"Enum ClassIntroductionTERM1="enumeration"The enumeration class is a standard construct to specify the FortΘ derived C data type enum: a definition of a set of integer values with identifiers as elements of the set.An Enum class contains only static data attributes of type enum. The attributes are generated into the elements of the set.How to specify an enumeration classTo specify an enumeration class:1 Draw a class.2 Specify the members of the enumeration as data attributes of this class.These data attributes must:- be specified as static attributes; that is, with a leading dollar sign ($)- have data type enumNote: You can specify a default value for these data attributes, but it is not required.3 Make sure the class does not have any of the following:- associations resulting in code generation- operations- superclasses- subclasses ExampleThe next figure shows two classes conforming to the enumeration class construct guidelines. The first one has data attributes without default values, the second one has data attributes with default values:Data attributes without default valuesFILENAME="00651.unk" ORIGFILE="pics/enumex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"EnumEx1.cex...enum EnumEx1 a, bend enum;...Data attributes with default valuesFILENAME="00652.unk" ORIGFILE="pics/enumex2.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"EnumEx2.cex...enum EnumEx2 x = 34, y = 47, zend enum;...ID="15593"Struct ClassIntroductionTERM1="enumeration"The Struct class is a standard way to declare the FortΘ derived C data type struct: a data structure that contains one or more members.A Struct class contains only data attributes. These attributes are generated into the members of the struct.How to specify a structure classTo specify a structure class:1 Draw a class.2 Set the property Class Type of this class to Structure.3 Specify one or more data attributes.These data attributes are generated into struct members. Note that default values of attributes are ignored.4 Make sure the class does not have any of the following:- associations resulting in code generation- operations- superclasses- subclasses ExampleThe next figure shows an example of a structure class. The property Class Type has been set to Structure.FILENAME="00653.unk" ORIGFILE="pics/struct.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Struct1.cex...struct Struct1 CustomerNo: ui2; AccountType: shortend struct;...ID="39931"Union ClassIntroductionTERM1="enumeration"The Union class is a standard construct to specify the FortΘ derived C data type union: a definition of a set of alternative values, or members, that can be stored in the same space in memory.A Union class contains only data attributes. These attributes are generated into the members of the union.How to specify a union classTo specify a union class:1 Draw a class.2 Set the property Class Type of this class to Union.3 Specify one or more data attributes.These data attributes are generated into union members. Note that default values of attributes are ignored.4 Make sure the class does not have any of the following:- associations resulting in code generation- operations- superclasses- subclasses ExampleThe next figure shows an example of a union class. The property Class Type has been set to Union.FILENAME="00654.unk" ORIGFILE="pics/union.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"Union1.cex...union Union1 CustomerNo: ui2; AccountType: shortend union;...ID="30243"Service Object ClassIntroductionA Service Object in FortΘ is an instance of a class that is located on a specific partition. All of the distributed services with which an application interacts are represented by service objects.A Service Object can be modeled in ObjectTeam by a special class with only one method.How to specify a service object classTo specify a service object class:1 Draw a class.2 Set the property Class Type of this class to Service Object.3 Decide of which class the Service Object must be an instance.4 Specify a method through which the Service Object must be constructed:- The name of the method is not important, but must be provided.- The parameters of this method are a selection of the set of public data attributes of the referred class.- The types of these parameters are not important, but must be provided.- Every parameter must have a default value, which can be provided through the Default Value property. Parameters without a default value are not generated.- The return type of the method must be the referred class.5 Make sure the Service Object class does not have any of the following:- associations resulting in code generation- data attributes- superclasses- subclassesExampleThe following properties have been set for this example class:COLS="3"COLNAME="1" COLWIDTH="150p"COLNAME="2" COLWIDTH="142p"COLNAME="3" COLWIDTH="154p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"srvObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Service ObjectCOLNAME="1" VALIGN="TOP" MOREROWS="0"att1COLNAME="2" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="3" VALIGN="TOP" MOREROWS="0"'This is a string'FILENAME="00655.unk" ORIGFILE="pics/srvobj.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"srvObject.cex...service srvObject : mySystem.A = (att1 = 'This is a string');...The class name (A) in this code is qualified by the name of the ObjectTeam System Version (mySystem).Note: The following alternative method is also valid in the ObjectTeam class:A(att1:string)However, class A will then not be qualified by the ObjectTeam System Version name.ID="33517"Cursor ClassIntroductionA Cursor in FortΘ is a row marker that is used for selecting and working with a set of rows from a database. It can be modeled in ObjectTeam by a special class with only one method.How to specify a cursor classTo specify a cursor class:1 Draw a class.2 Set the property Class Type of this class to Cursor.3 Specify a method for the cursor:- The name of the method is not important, but must be provided.- Specify one or more parameters for this methods.- Providing a default value for a parameter is optional.- The return type of a method is ignored.4 Make sure the Cursor class does not have any of the following:- associations resulting in code generation- data attributes- superclasses- subclassesAfter you generate code for this class, a FortΘ cursor construction is generated. Comment lines remind you to fill in the body of the cursor.ExampleThe following properties have been set for this example class:COLS="3"COLNAME="1" COLWIDTH="150p"COLNAME="2" COLWIDTH="142p"COLNAME="3" COLWIDTH="154p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"cursorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"CursorCOLNAME="1" VALIGN="TOP" MOREROWS="0"par1COLNAME="2" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="3" VALIGN="TOP" MOREROWS="0"'myString'COLNAME="1" VALIGN="TOP" MOREROWS="0"par2COLNAME="2" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="3" VALIGN="TOP" MOREROWS="0"--FILENAME="00656.unk" ORIGFILE="pics/cursor.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/fortegen.fm5.mif"myCursor.cex...cursor myCursor(par1: string = 'myString', par2: short)begin -- !! Implement this cursor !!end;...Chapter 4 Reverse and Round-Trip EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for ForteIntroductionTERM1="project" TERM2="using data from other sources"This chapter describes how to use reverse engineering and round-trip engineering with the FortΘ code generator.Reverse engineeringReverse engineering FortΘ code makes the structures and functions of the code visible in ObjectTeam. This facilitates your understanding of the existing code, thus giving you more opportunity for reusing the code.Round-trip engineeringRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated FortΘ source files. Use round-trip engineering to update the ObjectTeam model before you regenerate the source files. If you add an attribute or operation to the generated source file, but do not add it to the ObjectTeam model, that attribute or operation is lost when you regenerate the source files.ExplanationThe code generator generates code based on the ObjectTeam model. When you regenerate the source file, only the attributes and operations defined in the model appear in the generated source file.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25473" TYPE="XREF-TEXTCOPY"Reverse Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21358" TYPE="XREF-TEXTCOPY"Round-Trip Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12ID="25473"Reverse EngineeringIntroductionTERM1="project" TERM2="using data from other sources"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="class library" TERM2="reverse engineering"Reverse engineering parses FortΘ files and builds CDs and CDMs that show the classes defined in those files.Purpose Use reverse engineering to capture and display the classes defined in your FortΘ files. This serves two purposes:n Makes the classes available in ObjectTeam as external classes.n Helps you to understand the structure and functionality of classes.Not an import utilityReverse engineering is not designed to capture all the information in a FortΘ file. Therefore, do not use reverse engineering to import classes in order to maintain them in ObjectTeam. If you generate FortΘ files from the CDs and CDMs created by reverse engineering, they will not match the files you used to create those CDs and CDMs.TERM1="reverse engineering" TERM2="class library"TERM1="translating" TERM2="c++ header files to Class Association Diagrams"What happens during reverse engineeringReverse engineering uses the following steps to translate FortΘ files into CDs and CDMs that show the class hierarchy:1 Parses the FortΘ files, then maps the FortΘ elements to ObjectTeam elements.2 Creates CDs and CDMs that define the ObjectTeam element.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14541" TYPE="XREF-TEXTCOPY"Parsing the Files 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27607" TYPE="XREF-TEXTCOPY"Creating the Diagrams 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28134" TYPE="XREF-TEXTCOPY"Running Reverse Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10ID="14541"Parsing the FilesParsing the FortΘ filesThe parser processes the FortΘ files as follows:n It recognizes class declarations, including attributes and methods.Note: When declaring an attribute or method, the keywords attribute and method are required.n It detects associations according to a heuristic process. The associations can be transformed either into graphical associations or into attributes and methods.n It does not check data types; therefore, data types do not have to be known to the parser.IdentifiersReverse engineering assumes that the first character of an identifier is an alphabetic character of either case or one of the following special characters: _ " $. It assumes each subsequent character in the identifier is an alphanumeric character or one of three special characters listed previously.Mapping the elementsTERM1="C++" TERM2="reverse engineering"TERM1="mapping" TERM2="in reverse engineering"TERM1="reverse engineering" TERM2="mapping"After parsing the header file, reverse engineering maps the FortΘ constructs to ObjectTeam elements, as shown in the following table:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FortΘ ConstructionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam ElementCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute and data type. The following attribute properties are set:n Accessn Access Methodsn Type Modifiern Constant, if the attribute is a constantn Get Expression and Set Expression, if the attribute is a virtual attributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with the Class Type property set to Class. Class hierarchy is created, if necessary.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConstantCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with the Class Type property set to Constant.COLNAME="1" VALIGN="TOP" MOREROWS="0"CursorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with the Class Type property set to Cursor.COLNAME="1" VALIGN="TOP" MOREROWS="0"EnumCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with one or more attributes. All attributes have data type enum.COLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation (and parameters) with Operation Type property set to Event. The following operation property is also set:n AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Event HandlerCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation (and parameters) with Operation Type property set to Event Handler. The following operation property is also set:n AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with the Class Type property set to Interface.COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation (and parameters) with Operation Type property set to Method. The following operation properties are also set:n Accessn Type Modifiern Copy, if appropriateNote: Reverse engineering ignores the Init method.COLNAME="1" VALIGN="TOP" MOREROWS="0"Service ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with the Class Type property set to Service Object.COLNAME="1" VALIGN="TOP" MOREROWS="0"StructCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with the Class Type property set to Struct.COLNAME="1" VALIGN="TOP" MOREROWS="0"TypedefCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with one attribute.COLNAME="1" VALIGN="TOP" MOREROWS="0"UnionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with the Class Type property set to Union.COLNAME="1" VALIGN="TOP" MOREROWS="0"Virtual AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"See Attribute.Customizing reverse engineeringThe customization file tcl\rev_assoc.tcl file in the FortΘ module defines the reverse engineering rules used to detect associations and attribute accessors. You can modify reverse engineering by editing this customization file, as described in the ObjectTeam Customization Guide.Warning: This customization file is not used unless you select the Reverse Engineer Associations option during reverse engineering.ID="27607"Creating the DiagramsTERM1="diagrams" TERM2="draft, in reverse engineering"TERM1="reverse engineering" TERM2="draft diagrams"IntroductionAfter mapping the FortΘ constructs to ObjectTeam elements, reverse engineering creates the CDs and CDMs that define the ObjectTeam elements. It creates the following CDs:n One or more CDs to show the class hierarchyn One or more CDs to show the associations among the classesNaming conventions for CDsEach CD is named for the primary class in the CD; for example, Class1. The word Tree is appended to the name of each CD that defines part of the class hierarchy; for example, ObjectTree.How many diagrams are createdThe number and complexity of the CDs created by reverse engineering depend largely on the following:n The files that you select for reverse engineering, particularly the number and complexity of classes defined in the files.n The reverse engineering options that you select, particularly whether you choose to reverse engineer associations.ID="26227"Options for reverse engineeringDuring reverse engineering, ObjectTeam displays the following dialog box prompting you to select the options that you want to use:FILENAME="00657.unk" ORIGFILE="pics/reoption.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/forteeng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box):COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Prefix used to name each generated CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only class structure is generated)n Only CDMs (only class features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering creates a separate reference CD for each class that exceeds the maximum size. The class is folded in all diagrams other than the reference diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class. When a class exceeds this size, it is folded.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree. When a class hierarchy exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram. When a diagram exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Reverse Engineering Associations is selected, specifies the algorithm reverse engineering uses to create the CDs that show the associations:n Simple. Creates a CD for each class that has associations.n Grid. Creates a CD for each n classes, where n is the number specified in the Number of Classes per CD field.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of Classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Placement Algorithm is Grid, specifies the number of unfolded classes per CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"CaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"FortΘ is not case sensitive; however, ObjectTeam is case sensitive. Use this field to specify which case should be used in ObjectTeam.n FirstCase. For each identifier, use the case that is first encountered. (When reverse engineering multiple files, use this option with caution.)n UpperCase. Always use uppercase characters.n LowerCase. Always use lowercase characters.COLNAME="1" VALIGN="TOP" MOREROWS="0"Reverse Engineer AssociationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering examines the attributes and accessor methods defined on each class to determine the associations among classes. It then creates CDs that show those associations.CDs that show the class hierarchyFollowing are the guidelines used to draw the CDs that show the class hierarchy:n Reverse engineering creates a CD for each top-level parent class. The CD contains the parent class and all subclasses.n If a class has multiple parent classes, reverse engineering creates a CD for each parent. The CD for the first parent class contains the parent class, the child class, and all subclasses of the child class. The CD for each of the other parent classes contains only the parent class and the child class; in these diagrams, the child class is folded.FILENAME="00658.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/forte/forteeng.fm5.mif"CDs that show associationsIf you select the Reverse Engineer Associations option in the Reverse Engineer dialog box, reverse engineering creates CDs that show the associations. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box. Both algorithms are described below.If you do not select the Reverse Engineer Associations option, reverse engineering shows associations only as attributes and accessor methods in the appropriate classes.Note: Bidirectional associations are reverse engineered as two unidirectional associations.Simple algorithmIf you select Simple in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Creates a CD for each class that has one or more associations. 2 Unfolds the main class in each CD and folds all associated classes.ExampleThe following CDs, created by the simple algorithm, show the associations among three classes.FILENAME="00659.unk" ORIGFILE="pics/simppers.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/forteeng.fm5.mif"FILENAME="00660.unk" ORIGFILE="pics/simpsong.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/forteeng.fm5.mif"FILENAME="00661.unk" ORIGFILE="pics/simpaud.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/forteeng.fm5.mif"Grid algorithmIf you select Grid in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Divides all classes into groups of n, where n is the number specified by the Number of Classes per CD field of the Reverse Engineer dialog box. The algorithm attempts to group associated classes.Tip: To create a diagram that contains all classes, specify n as the number of classes being reverse engineered (or greater).2 For each group of classes, creates a CD and adds the classes (unfolded) to the CD. To position the classes, reverse engineering uses a uniform grid whose squares are the size of the largest class in the group and its longest association.3 For each class in each CD, draws all associations from the class to all associated classes. If an associated class is not in the CD, reverse engineering adds it (folded) to the CD.ExampleThe following CD, created by the grid algorithm, shows all of the associations among three classes. (The classes in the generated CD were repositioned so this illustration would fit on the page.)FILENAME="00662.unk" ORIGFILE="pics/grid.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/forteeng.fm5.mif"ID="28134"Running Reverse EngineeringIntroductionThis section describes how to run reverse engineering.How to reverse engineerΣ To reverse engineer FortΘ files:1 Move to System level in Object Design phase.Note: Typically, you reverse engineer into an empty system. However, name conflicts can still occur since classes are created with scope Phase.2 Select Utilities | Reverse Engineer FortΘ.The Reverse Engineer FortΘ dialog box appears (see REFID="21197" TYPE="XREF-TEXTCOPY"Files for reverse engineering), prompting you to select the files to be reverse engineered.3 Select the files (.cex or .pex) that you want to reverse engineer, then select OK.A second Reverse Engineer FortΘ dialog box appears (see REFID="26227" TYPE="XREF-TEXTCOPY"Options for reverse engineering), prompting you to select the options that you want to use. 4 Select the options, then select OK.ObjectTeam reverse engineers the selected file, reporting the results in a Monitoring window. The generated CDs display the class hierarchy defined in the selected files, as well as the attributes, operations, and (if the Reverse Engineer Associations option is selected) associations of each class.ID="21197"Files for reverse engineeringDuring reverse engineering, ObjectTeam prompts you to select the FortΘ files that you want to reverse engineer. The following illustrations show the Windows and UNIX dialog boxes.Tip: Reverse engineering creates CDs and CDMs based on the files that you select. Therefore, you generally want to reverse engineer all related files at the same time.WindowsIn Windows, use the File Name and Files of Type fields to filter the list of files displayed.FILENAME="00663.unk" ORIGFILE="pics/refilew.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/forteeng.fm5.mif"UNIXIn UNIX, use the Filter field and Filter button to filter the list of files displayed.FILENAME="00664.unk" ORIGFILE="pics/refileu.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/forteeng.fm5.mif"ID="21358"Round-Trip EngineeringIntroductionRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated source files. Use round-trip engineering to update the ObjectTeam model before you regenerate the source files.PurposeThe code generator generates code based on the ObjectTeam model. If you do not update the ObjectTeam model before regenerating the source files, the new source files do not include your changes. ExampleYou generate FortΘ files. You then add a new method to a generated source file. If you do not update the ObjectTeam model, the model does not contain the operation that corresponds to the method. When you regenerate the source file, the code generator assumes that you deleted the operation from ObjectTeam and, therefore, does not include the obsolete method in the newly generated source file.Changes captured by round-trip engineeringIf you have made the following types of changes to the generated source file, round-trip engineering updates the ObjectTeam model based on those changes:n Added, deleted, or edited attributesn Added, deleted, or edited the declarations of methods, events, or event handlersWhat happens during round-trip engineeringThe following table shows the steps that occur during round-trip engineering:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"You select the generated (edited) source files that you are interested in and start round-trip engineering.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam parses the selected files and compares the information in the files with the information in the ObjectTeam model.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"For each difference it finds, ObjectTeam proposes an action and prompts you for confirmation. For example:In class "Account": delete attribute "Address"?COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Based on your answers, ObjectTeam updates the ObjectTeam model.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35896" TYPE="XREF-TEXTCOPY"Parsing the Generated (Edited) Source Files 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41410" TYPE="XREF-TEXTCOPY"Running Round-Trip Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16ID="35896"Parsing the Generated (Edited) Source FilesIntroductionThis section describes which changes to the generated source files are captured by round-trip engineering. Changes to attributesYou can use FortΘ to add, delete, and modify attributes, virtual attributes, and constants in a generated FortΘ file. Round-trip engineering updates the attributes in the ObjectTeam model based on your changes. Do not delete or modify the attributes that ObjectTeam generates to implement associations.Attribute Access propertyRound-trip engineering sets an attribute's Attribute Access property based on which attribute accessor methods are specified. When you add an attribute, no attribute accessor methods are specified; therefore, the round-trip engineering sets the Read and Write values of the attribute's Attribute Access property to None.In ObjectTeam, change the Read and Write values of the attribute's Attribute Access property to Public (or other appropriate values). When you regenerate the FortΘ file, ObjectTeam generates the attribute accessor methods.Delete attribute accessorsIf you delete an attribute, round-trip engineering identifies the attribute's accessor methods as new methods and asks if you want to add them to the ObjectTeam model. Do not add them to the model.Changes to methodsYou can add, delete, and modify the declarations of methods, events, and event handlers in FortΘ. Round-trip engineering updates the operations in the ObjectTeam model based on your changes. Do not delete or modify the attribute accessor methods generated by ObjectTeam.Note: You can change the code in the body of any method, event, or event handler. Such changes are ignored by round-trip engineering, but are preserved by the code generator when you regenerate the source files. Overloaded methodsIf you have multiple methods with the same name, do not delete one and change the declaration of another at the same time. Delete one, run round-trip engineering, change the declaration of the other, and run round-trip engineering. This approach prevents potential errors in round-trip engineering.Customizing round-trip engineeringThe customization file tcl\rt_forte.tcl file in the FortΘ module defines the round-trip engineering rules used to identify attributes and methods during round-trip engineering. You can modify round-trip engineering by editing this customization file, as described in the ObjectTeam Customization Guide.ID="41410"Running Round-Trip EngineeringCustomizing round-trip engineeringThe customization file roundtrip.roundtrip in the M4_home/etc directory controls what actions round-trip engineering proposes, as well as the default answers it supplies. To examine or modify the behavior of round-trip engineering, examine or modify the customization file. For more information, see the ObjectTeam Customization Guide.How to run round-trip engineeringΣ To run round-trip engineering:1 Move to the System level of the Implementation phase.2 Select the FortΘ files on which you want to run round-trip engineering.3 Select Utilities | Round Trip Selected.ObjectTeam opens the Roundtrip Selected Files dialog box, compares the classes in the generated files to the classes in the Object Design phase, and then begins proposing actions and prompting you for confirmation.FILENAME="00665.unk" ORIGFILE="pics/rndtrip2.gif" ORIGTYPE="X" ORIGDOC="../../sources/forte/forteeng.fm5.mif"4 Use the buttons to respond to the proposed actions:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ButtonCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"YesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Make the proposed change.COLNAME="1" VALIGN="TOP" MOREROWS="0"NoCOLNAME="2" VALIGN="TOP" MOREROWS="0"Do not make the proposed change.Note: When you regenerate the FortΘ file, the change to the file will be lost.COLNAME="1" VALIGN="TOP" MOREROWS="0"Default to AllCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use the default response for all remaining questions.COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cancel all changesObjectTeam updates the model based on your responses.Chapter 5 ID="22956"Customizing FortΘ Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Fort\x8e IntroductionExpert users can extend the FortΘ code generator by modifying the Tcl scripts that are supplied in the M4_home\tcl\l_forte directory. Editing these Tcl scripts, or writing new ones that add functionality to the code generator, requires a thorough knowledge of the OOPL model structure, Tcl commands, and the ObjectTeam Shell.Modifying Tcl proceduresYou can adapt existing methods of Object Tcl classes that are used in the code generation by redefining them in a user-defined Tcl file.Warning: Cayenne Software cannot support any provided Tcl scripts that you modify. Therefore, the scripts and their structures are not documented. If you choose to modify any Tcl scripts or procedures, you must have a thorough knowledge of the script's structures to avoid introducing errors. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22291" TYPE="XREF-TEXTCOPY"How Tcl is Used in the Code Generation 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15580" TYPE="XREF-TEXTCOPY"Customizing Tcl Scripts Used for Code Generation 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23ID="22291"How Tcl is Used in the TERM1="Tcl" TERM2="in ObjectTeam environment"Code GenerationSEE="Tcl" TERM1="Tool Command Language"IntroductionThis chapter provides information on the use of Tcl (Tool command language) in ObjectTeam. It does not provide an introduction to Tcl itself. If you want to become familiar with Tcl, try the following introductory book:John K. Ousterhout, Tcl and the Tk Toolkit. (Reading, Massachusetts: Addison---Wesley Publishing Company, 1994).What is Tcl?Tcl (Tool command language) is an interpretive command language that resembles C. By default all arguments are passed as strings. These strings are C-compatible. Tcl consists of:n A library of C proceduresn An interpretern The Tcl coreThe Tcl core is a simple language that can be completely programmed. It provides a collection of commonly used features such as these:n Variablesn Conditional and looping commandsn Proceduresn Associative arraysn Listsn Expressionsn File manipulationHow is Tcl used in the code generation?When the ObjectTeam shell executes a Tcl script file, it translates information from the repository, internal models, and TERM1="code generation model" TERM2="and Tcl"TERM1="model" TERM2="code generation"code generation models into source code. The following illustration shows this process schematically:FILENAME="00666.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/forte/fortetcl.fm5.mif"Types of Tcl usedThe methods in the default Tcl script files used for code generation use different levels of Tcl.COLS="2"COLNAME="1" COLWIDTH="168p"COLNAME="2" COLWIDTH="280p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"descriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Standard TclCOLNAME="2" VALIGN="TOP" MOREROWS="0"Refer to general Tcl documentation for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to Tcl proceduresCOLNAME="2" VALIGN="TOP" MOREROWS="0"These procedures are stored in Tcl files. They become available when the file in which the procedure is defined is sourced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to methods of classesin the ObjectTeam modelsCOLNAME="2" VALIGN="TOP" MOREROWS="0"The classes of the ObjectTeam models (including the OOPL model and SQL model) are documented in ObjectTeam Repository Interface Guide. COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in classesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Besides methods of classes belonging to the ObjectTeam models, methods belonging to other built-in classes can also be called. Refer to the ObjectTeam Repository Interface Guide for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in ObjectTeam commandsCOLNAME="2" VALIGN="TOP" MOREROWS="0"These commands are built-in to otsh and otk. You can use these commands, but you cannot edit or view them like Tcl procedures. Refer to the ObjectTeam Repository Interface Guide for details. ID="35220"Which Tcl files are used?Tcl procedures used for code generation are stored in Object Tcl script files. During code generation, these scripts are interpreted and executed by the ObjectTeam shell (otsh). When you use Utilities | Import From Previous Phase in the Browser at the system level of the Implementation phase, otsh interprets the Object Tcl code in the Tcl file tcl\l_forte\forteimpor.tcl. In the implementation of these methods, Tcl methods from other classes are called.Most of the Tcl script files that the FortΘ code generator uses are located under the M4_home directory in tcl\l_forte\*.tcl. The Tcl script files fstorage.tcl and caynutil.tcl in the tcl directory contain utility procedures that are also used.ID="15580"Customizing Tcl Scripts Used for TERM1="code generation" TERM2="adapting"Code GenerationUser-defined Tcl filesBecause of the open character of Tcl, you can redefine the existing Object Tcl methods of the Tcl scripts, if you want to adapt the code generation to your needs and circumstances. You can include your own properties, control flow keywords, and section keywords in the code generation this way. You can even build your own code generator by creating your own Tcl scripts. Warning: Note that existing Object Tcl classes cannot be redefined. However, you can add new, user-defined Object Tcl classes.ID="37212"Where to store user-defined Tcl proceduresThe Tcl script files used for the default code generation are stored in the file system. They can be found in the following directory:M4_home\tcl If you want to adapt the default code generation, you can edit the Tcl files in this directory, but it is better to modify copies of the original files. There are several ways available to make otsh use user-defined files. These ways are briefly discussed in this section. You can overrule existing Tcl files or you can extend them by creating new Tcl files with new user-defined Tcl procedures and methods, or redefinitions of existing methods. The ways to do that are also covered in this section.Storing Tcl files in the same System as where the code is generatedOne of the available file types on the system level of the Implementation phase is Tcl. You can create new files of this type and redefine methods of existing Object Tcl classes in such a file. During code generation, otsh sources all files of the type Tcl in the current system, regardless of their names.Σ To create such a Tcl file:1 Open the implementation system.2 Select File | New | External File Version.A dialog box of file types appears.3 Select Tcl as the file type, specify a name for the Tcl file (without the extension .tcl), and click OK.You can enter the name of an existing Tcl file used for code generation or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.4 Edit and save the new Tcl file.The next time you generate code (by using Utilities | Import From Previous Phase) the new Tcl file is sourced by otsh.Storing Tcl files in a system TclIf you do not want to store user-defined Tcl files in the same system in which your code is generated, you can create a system called Tcl and store your user-defined Tcl files in there. Any Tcl file that is defined in such a system is sourced during code generation. You can use this mechanism for user-defined Tcl files or for user-defined Tcl files that are meant to replace existing ones.To store files in a Tcl system:1 Make sure the Browser is on the Implementation phase level.2 Select File | New | System Version.3 Type Tcl as the system name, being sure to use a capital T.4 Open the system Tcl.5 Select File | New | External File Version.A dialog box of file types appears.6 Select Tcl as the file type, specify a name for the Tcl file (without the extension .tcl), and click OK.You can enter the name of an existing Tcl file used for code generation or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.7 Edit and save the new Tcl file.The next time you generate code, the new Tcl file is sourced by otsh.TERM1="Tcl" TERM2="script files, testing"Testing Tcl filesIf you want to test a customized Tcl file before you add it to a system in ObjectTeam, you can create the Tcl file in your file system and feed it to otsh outside the ObjectTeam environment. See the ObjectTeam Customization Guide for details on how to start otsh from the command line.When the Tcl file has reached its final state, you can decide to add it to a system in ObjectTeam, as described above. Appendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Fort\x8e FortΘ code generation propertiesThe following table lists the properties that effect FortΘ code generation. These are available in the CD in the Object Design phase.COLS="4"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="99p"COLNAME="3" COLWIDTH="126p"COLNAME="4" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34926" TYPE="XREF-TEXTCOPY"Mapping AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34064" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="28435" TYPE="XREF-TEXTCOPY"Specifying Accessibility of OperationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Access MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34926" TYPE="XREF-TEXTCOPY"Mapping AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24666" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"ConstantCursorInterfaceServie ObjectStructureUnionCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="40407" TYPE="XREF-TEXTCOPY"Handling Special ClassesCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConstantCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="18919" TYPE="XREF-TEXTCOPY"Modeling ConstantsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CopyCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17071" TYPE="XREF-TEXTCOPY"Specifying the return type as copyCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="27277" TYPE="XREF-TEXTCOPY"Specifying the parameter type as copyCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="32807" TYPE="XREF-TEXTCOPY"Mapping Qualified AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="15392" TYPE="XREF-TEXTCOPY"Specifying a default valueCOLNAME="1" VALIGN="TOP" MOREROWS="0"Exception EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19136" TYPE="XREF-TEXTCOPY"Specifying an exception eventCOLNAME="1" VALIGN="TOP" MOREROWS="0"Get ExpressionCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39515" TYPE="XREF-TEXTCOPY"Modeling Virtual AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"CheckboxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="14514" TYPE="XREF-TEXTCOPY"InterfaceCOLNAME="1" VALIGN="TOP" MOREROWS="0"Maximum VolumeCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21308" TYPE="XREF-TEXTCOPY"Specifying the maximum volumeCOLNAME="1" VALIGN="TOP" MOREROWS="0"MechanismCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"InputOutputInput OutputCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="22972" TYPE="XREF-TEXTCOPY"Specifying the Input Output mechanismCOLNAME="1" VALIGN="TOP" MOREROWS="0"Operation TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"MethodEventEvent HandlerCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="29516" TYPE="XREF-TEXTCOPY"Mapping OperationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Return EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="14000" TYPE="XREF-TEXTCOPY"Specifying a return eventCOLNAME="1" VALIGN="TOP" MOREROWS="0"Set ExpressionCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39515" TYPE="XREF-TEXTCOPY"Modeling Virtual AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Text COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34926" TYPE="XREF-TEXTCOPY"Mapping AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="29362" TYPE="XREF-TEXTCOPY"Editing Attribute PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="33655" TYPE="XREF-TEXTCOPY"Editing Class PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="10729" TYPE="XREF-TEXTCOPY"Editing Operation PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24200" TYPE="XREF-TEXTCOPY"Defining ParametersCOLNAME="1" VALIGN="TOP" MOREROWS="0"Type ModifierCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"ArrayLargeArrayPointeruser-definedCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17574" TYPE="XREF-TEXTCOPY"Modifying TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="24050" TYPE="XREF-TEXTCOPY"Modifying a method's return typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="27150" TYPE="XREF-TEXTCOPY"Modifying the type of a parameterJava Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for JavaAbout this manualThe ObjectTeam Code Generation Guide for Java contains information specific to the Javaname='trade' font=symbol charset=fontspecific code=228 descr='[trade]' programming language. This manual includes all the information that you need to generate Java code from ObjectTeam. PrerequisitesThis guide is intended for experienced users of ObjectTeam and the analysis and design method it supports. This guide explains how to map ObjectTeam diagrams to Java code; it does not teach you the Java language.To customize or extend the capabilities of the Java code generator, you must have a thorough understanding of the ObjectTeam Shell, the Object-Oriented Programming Language (OOPL) model structure, and the Tool Command Language (Tcl) commands.SEE="method" TERM1="operation"SEE="access property" TERM1="public"SEE="access property" TERM1="private"SEE="access" TERM1="protected"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="access property" TERM1="private protected"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="access property" TERM1="read access"SEE="access property" TERM1="write access"SEE="access property" SEEALSO="attribute property" TERM1="attribute"SEE="access property" SEEALSO="attribute property" TERM1=""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEEALSO="class property" TERM1="class"SEEALSO="class property" TERM1=""SEEALSO="association attribute property" TERM1="association"SEEALSO="association attribute property" TERM1=""SEEALSO="method" TERM1="method"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="inheritance" TERM1="generalization"SEE="inheritance" SEEALSO="interface property" TERM1="interface"SEE="inheritance" SEEALSO="interface property" TERM1=""SEE="code" SEEALSO="interface property" TERM1="source file"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SEE="mapping" TERM1="translation"SEE="code" TERM1="generated source file"SEE="code" SEEALSO="code" TERM1=".java file"Chapter 1 ID="31423"Preparing Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for JavaIntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.Java module requiredThe ObjectTeam module Java Code Generation provides the menu items, the properties and the Tcl code required to use the Java Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="30750" TYPE="XREF-TEXTCOPY"Chapter 2, Generating Code, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36358" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15189" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00667.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/java/javaobjd.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="10890" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to Java, describes how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 Generating ID="30750"CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for JavaIntroductionThe ultimate goal of modeling an application is to produce code that implements it. In ObjectTeam, you can generate a significant portion of the code automatically, and then complete it by adding the details that are not specified in the model.Prerequisitesn The ObjectTeam module Java Code generation must be active from Object Design Phase and Implementation Phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="31423" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Conversion from previous versionsIf you have systems in the Object Design phase that have been used with version 5.x of the Java code generator, you can use them with version 6.x also. No conversion is necessary.If you have systems in the Object Design phase that have been used with version 4.x , you must upgrade them to version 5.x. You can then use them with either version 5.x or version 6.x. The upgrade utility is available with version 5.x of the Java code generator and is described in the documentation for that version.Steps in code generationThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate Java files. During this step, ObjectTeam generates Java source files on System level in the Implementation phase. Note: System level in the Implementation phase is fundamentally different than system level in other phases. The system files in the Implementation phase are source files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Configure the Java environment, copying required source files from the ObjectTeam installation directories to the appropriate user environment directories.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Edit the source files. ObjectTeam generates a large portion of your application code, but not all of it. In this stage, you finish writing the application code.Changes you make to the source files are not lost. When you regenerate the source files, the code generator recognizes your changes and transfers them to the newly generated files. COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Compile the source files.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Run the application and test it. If necessary, correct the source files, the model, or both; regenerate the files and return to step 3.Illustration of code generationThe following illustration shows how ObjectTeam generates code, including the names of the Tcl scripts that it uses. The CDs and CDMs shown at the top are in the Object Design phase. The .class files shown at the bottom can be run as Java applications or applets.FILENAME="00668.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/java/javacodg.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27962" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22683" TYPE="XREF-TEXTCOPY"Generating Java Source FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27027" TYPE="XREF-TEXTCOPY"Configuring the Java Environment 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25511" TYPE="XREF-TEXTCOPY"Editing Generated Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39005" TYPE="XREF-TEXTCOPY"Compiling and Running Generated Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12832" TYPE="XREF-TEXTCOPY"Regenerating Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19ID="27962"Components of Code GenerationTcl scripts for code generationThe scripts written for code generation retrieve information from the code generation models, format this information, and write the results to source code files. Code generation models are built from the CDs in the Object Design phase.Code regenerationCode generation is an automated process that generates Java source files. ObjectTeam ensures that n You can regenerate these files when you change your model.n Changes that you make to the generated files are preserved when you regenerate the files.For more information, see REFID="12832" TYPE="XREF-TEXTCOPY"Regenerating Code.Java program structure You can control the structure of your Java program by editing class properties in ObjectTeam. This allows you to import from external Java packages such as those included in the Java Development Kit (JDK) 1.1.For more information, see REFID="38413" TYPE="XREF-TEXTCOPY"Defining Java Program Structure.Compiling and running Java codeAfter generating and editing your Java source files, you can compile and run them from within ObjectTeam. You can run the compiled Java files as either applications or applets.For more information, see REFID="39005" TYPE="XREF-TEXTCOPY"Compiling and Running Generated Files.ID="22683"Generating Java Source FilesResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create Java source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are Java files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate source files on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate Java.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet.- Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files.How to generate code on System levelΣ To generate (selected) source files for a system from System level of the Implementation phase:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate Java.A cascading menu appears.3 Select New, Selected, or All:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files. The following illustration shows the Monitor window after importing a system.FILENAME="00669.unk" ORIGFILE="pics/imp_impl.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javacodg.fm5.mif"Location of the source filesTERM1="code" TERM2="location of generated files"Source files are stored in the repository as external files. They are also written to the user_environment\system-name directory, where user_environment is the file path for your generated files. For more information on the user environment, see the ObjectTeam Project Management Guide.The following illustration shows how the source files appear in the Browser.FILENAME="00670.unk" ORIGFILE="pics/sf_oopl.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javacodg.fm5.mif"TERM1="user environment" TERM2="updating"TERM1="Update User Environment (Utilities menu)"Update user environmentUtilities | Update User Environment synchronizes your user environment with the repository. This can be particularly useful if you are working on two machines, and the user environment of each is set to a local drive. When you move between machines, you can use Utilities | Update User Environment to update the local drive of the current machine.ID="24771"Importing the OOPL ModelIntroductionREFID="22683" TYPE="XREF-TEXTCOPY"Generating Java Source Files describes how to generate code for systems in the Implementation phase.When you generate code for a system in the Implementation phase, the Java code generator imports the Object Oriented Programming Language (OOPL) model and translates the information into Java source code files. This section describes that process.TERM1="code" TERM2="generating"TERM1="generating code"OOPL ModelThe OOPL Model, which is generated from the CDs in the Object Design phase, contains information used to generate code. The objects in this model are organized in such a way that code can be generated easily.For more informationThe ObjectTeam Repository Interface Guide provides a detailed description of the classes in the OOPL Model.How ObjectTeam converts the OOPL ModelTo convert an OOPL Model, the ObjectTeam Shell (otsh) executes the Tcl script TERM1="import.tcl"import.tcl. It loads the OOPL model into memory and translates the information into source code. The ObjectTeam shell recognizes elements such as classes, data types, associations and methods. The Tcl script import.tcl activates, the Tcl script javimport.tcl, which contains Tcl procedures to retrieve information from the OOPL model and other internal models, format the file, and write it to the appropriate source files. javimport.tcl uses other Tcl scripts that use other Tcl scripts as well, and so on.Generated filesBy default, the Java code generator generates a classname.java file for each class imported into the Implementation phase. You can override this default using ObjectTeam's class properties, as described in REFID="26371" TYPE="XREF-TEXTCOPY"Mapping Classes.ID="27027"Configuring the Java EnvironmentIntroductionConfiguring the Java environment for ObjectTeam involves two steps:1 Configuring your user environment, which copies to your user environment the files needed to run the generated Java code.2 Configuring your Java development environment, which ensures that you can compile and run Java applications on your machine.User environment filesTERM1="Queue class" TERM2="copying to user environment"TERM1="example.html" TERM2="copying to user environment"Configuring your user environment copies the following files into the user_environment folder (this is the path for generated files, as described in the ObjectTeam Project Management Guide):n Queue.java. The Java code generated for an ordered association in ObjectTeam references the Queue class. The Queue.java file contains the source code for the Queue class.n example.html. To run a compiled Java file as an applet, you need an HTML file that invokes the Java file. The example.html file provides the necessary HTML code.How to configure the user environmentTERM1="user environment" TERM2="configuring"TERM1="configuring" TERM2="user environment"Σ To configure the ObjectTeam user environment for Java:1 Move to the system level in the Implementation phase.2 Select Utilities | Configure Java Environment.The Execution window appears and the files described above are copied to the system-name folder of the user_environment folder.FILENAME="00671.unk" ORIGFILE="pics/confjava.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javacodg.fm5.mif"3 To close the Execution window, type e.4 Repeat this procedure for every system in the Implementation phase that contains Java source files.How to set up the Java development environmentTERM1="configuring" TERM2="Java environment"TERM1="Java Development Kit, installing"Σ To set up the Java development environment: 1 Install the Java Development Kit (JDK) 1.0 on your machine.The JDK is available from the following sources: - www.javasoft.com internet site- Any Integrated Development Environment (IDE) for the Java programming language, such as Symantec Cafe, Sun's Java WorkShop (JWS), and Borland C++2 Add the java\bin directory to your path.CLASSPATH variableDepending on how you have installed the JDK, you may also need to set the TERM1="CLASSPATH environment variable"CLASSPATH environment variable. This variable establishes the path that the Java interpreter, compiler, and browser use to import classes. n Setting the variable to include your current working directory and the directory containing the JAVA API packages allows you to use any of the classes you have designed in the current system with the JAVA API packages. n If you have created your own classes in other folders or want to access classes in other ObjectTeam systems, you must also add these directory paths to the CLASSPATH variable. Setting these paths enables the Java class loader to access and import these classes. ID="25511"Editing Generated Source FilesIntroductionWhen code generation is successful, you can relate each generated Java file to a specific class in a CD of the Object Design phase.Editing .java filesThe generated .java files serve as framework files. They contain the code that implements the classes as defined in the ObjectTeam model. However, the ObjectTeam model does not define the application completely, so you must edit the .java files to complete the application.n TERM1="method" TERM2="body of"A method declaration is generated for each operation defined for the ObjectTeam class. The method body is empty and a regeneration marker appears at the end of the method. Code that you enter in the method body is preserved when you regenerate the .java file.n A default constructor is generated for each class. The method body may contain generated statements, as well as the following comments://Start user code section//End user code sectionCode that you enter between the comments is preserved when you regenerate the .java file.TERM1="code" TERM2="editing"How to edit source filesΣ To edit source files:1 Move to the system level in the Implementation phase.2 In the information area, double-click the source file that you want to edit, or select the source file and then select File | Edit.ObjectTeam creates a temporary file containing the working version of the selected .java file and opens that file in your default text editor. After you have edited, saved, and closed the text file, ObjectTeam stores the updated text file back in the repository and the user environment, and then deletes the temporary file.Update diagramsDepending on the type of additions you have made to the source files, you may need to edit the CDs to reflect your changes. For example, if you add a method to the code, you must add the same operation to the class in the ObjectTeam model. If you modify the model, be sure to use Check | Global Model to check the updated diagrams before regenerating the source files.In this sectionYou can generate code for a Java application or applet. This section provides examples of edited code for each.COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24098" TYPE="XREF-TEXTCOPY"Sample Application 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30089" TYPE="XREF-TEXTCOPY"Sample Applet 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14ID="24098"Sample ApplicationCD for an applicationTERM1="code" TERM2="application example"TERM1="application" TERM2="example"The following ObjectTeam class generates a simple Java application that displays a "Hello World" text string. A Java application requires a static method named main, as defined in this class.FILENAME="00672.unk" ORIGFILE="pics/appcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javacodg.fm5.mif"Generated codeFollowing is the generated Java code for the class. The highlighted text shows the edits you make to complete the code.// Do not delete this line -- Start Class Declarationspublic class MyApplication extends Object { // Data attributes // Association attributes // Constructors public MyApplication() { // Start user code section // End user code section } // default constructor MyApplication // Methods public static void main(String argv[]) { System.out.println("Hello World!"); } // method main // Do not delete this line -- regeneration end marker // Attribute accessors // Association accessors} // class MyApplication// Do not delete this line -- End Class DeclarationsID="30089"Sample AppletCD for an appletTERM1="code" TERM2="applet example"TERM1="applet" TERM2="example"The following ObjectTeam CD generates a simple Java applet that displays a "Hello World" text string. A Java applet requires that the class being executed be a subclass of the Applet class, as shown here.FILENAME="00673.unk" ORIGFILE="pics/applcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javacodg.fm5.mif"Applet class properties The Applet class is an external class; it is defined in the Java Development Kit (JDK) 1.0. Therefore, you edit the Applet class properties to indicate that it is an external class.FILENAME="00674.unk" ORIGFILE="pics/prpclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javacodg.fm5.mif"MyApplet class propertiesThe generated code for MyApplet references two classes from the Java Development Kit (JDK) 1.0:n The Applet class, because the MyApplet class is a subclass of Applet.n The Graphics class, because the parameter of the paint operation uses that class as its data type.You edit the MyApplet class properties to import these two classes from the Java Development Kit (JDK) 1.1.FILENAME="00675.unk" ORIGFILE="pics/prppack1.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javacodg.fm5.mif"Generated codeFollowing is the generated Java code for the MyApplet class. The highlighted text shows the edits you make to complete the code.import java.awt.Graphics;import java.applet.Applet;// Do not delete this line -- Start Class Declarationspublic class MyApplet extends Applet { // Data attributes // Association attributes // Constructors public MyApplet() { // Start user code section // End user code section } // default constructor MyApplet // Methods public void paint(Graphics g) { g.drawString ("Hello World", 50, 25); } // method paint -- regeneration end marker // Do not delete this line -- regeneration end marker // Attribute accessors // Association accessors} // class MyApplet// Do not delete this line -- End Class DeclarationsID="39005"Compiling and Running Generated FilesPrerequisitesTo compile and run the generated .java files, you must do the following:n Make sure that the environment is properly configured for Java. see REFID="27027" TYPE="XREF-TEXTCOPY"Configuring the Java Environment.n Obtain the source code files. See REFID="24771" TYPE="XREF-TEXTCOPY"Importing the OOPL Model.n Completely define all procedural code. See REFID="25511" TYPE="XREF-TEXTCOPY"Editing Generated Source Files.TERM1="code" TERM2="compiling"TERM1="application" TERM2="compiling"TERM1="applet" TERM2="compiling"TERM1="compiling"How to compile a fileYou can compile one selected file or all files in a system.Σ To compile a .java file:1 Move to the system level in the Implementation phase.2 Optionally, select one .java file.3 Select one of the following:- Target | Compile | All (or Target | Compile | Selected)- Target | Compile With Options | All (or Target | Compile With Options | Selected), and then specify the compiler options in the dialog box that appearsObjectTeam opens an execution window and compiles the files.Two ways to run a compiled fileYou can run a compiled file in two ways:n As an application (REFID="24098" TYPE="XREF-TEXTCOPY"Sample Application shows a CD and generated code for a simple application)n As a Java applet (REFID="30089" TYPE="XREF-TEXTCOPY"Sample Applet shows a CD and generated code for a simple applet)How to run an applicationΣ TERM1="application" TERM2="running"TERM1="running" TERM2="an application"To run an application:1 Select the compiled .java file in the information area.2 Select Target | Run | Application.ObjectTeam opens an execution window and runs the file.How to run an appletTERM1="applet" TERM2="running"TERM1="running" TERM2="an applet"TERM1="example.html" TERM2="editing"To run an applet, you edit and run the file example.html provided with ObjectTeam. (This file is copied into your user environment when you configure your ObjectTeam environment for Java, as described in REFID="27027" TYPE="XREF-TEXTCOPY"Configuring the Java Environment.)Σ To run an applet:1 In the Implementation phase, move to the system that contains your compiled Java file.2 Select File | New | External File Version.The New External File Version dialog box appears.3 Select html from the Type list, type example in the Name field, and then click OK.ObjectTeam imports example.html into your system and displays it in the Information area of the Browser.4 Edit example.html:a Double-click the file to open it in your default editor.Tip: If the file is empty, you may have forgotten to configure your Java environment for this system. See the instructions in REFID="27027" TYPE="XREF-TEXTCOPY"Configuring the Java Environment.b Edit the following line to specify the name of the class that is in the compiled Java file (a compiled .java file is a .class file).<APPLET CODE="classname.class" WIDTH=230 HEIGHT=190></APPLET>c Save the file example.html and close the editor.5 Select the edited file example.html.6 Select Target | Run | Applet Viewer. ObjectTeam opens an execution window and starts the appletviewer with the selected html file, which runs your compiled .java file.Sample example.html fileFollowing is the text of the file example.html. The highlighted text shows the changes you would make.<HTML><HEAD><TITLE> A simple program </TITLE></HEAD><BODY><APPLET CODE="MyApplet.class" WIDTH=230 HEIGHT=190></APPLET></BODY></HTML>ID="12832"Regenerating CodeTERM1="code" TERM2="regenerating"TERM1="regenerating code"Design changes and code changesObjectTeam supports incremental development. You can generate code from your models, edit that code, and regenerate the code without losing your changes. You can work with models during design and with code during implementation, shifting your focus between the two as necessary.It is important that you make changes where appropriate.n Change the code when you are adding code that is not generated by ObjectTeam (for example, method bodies) or when you are making local changes to the code (for example, adding a missing attribute or operation to a class).n Change the model when you are changing the structure of the model (for example, changing the class hierarchy or class associations) or when you are making global changes to the code (for example, changing the name of a class, attribute, or operation).Editing generated filesThe generated Java files are framework files that need some additions before they can be compiled and run. Comments in the file indicate where to add code, as described in REFID="25511" TYPE="XREF-TEXTCOPY"Editing Generated Source Files. When you regenerate a Java file, the code generator transfers the user-edited sections from the old file to the newly generated file. Note: The code generator preserves only the comment-delimited areas of the generated Java file. Changes you make to other areas of the generated Java file are lost when you regenerate the file.Editing the ObjectTeam modelTERM1="obsolete code"TERM1="code" TERM2="obsolete"If you modify the ObjectTeam model, you typically regenerate the Java source files. As described above, regenerating the files preserves your changes to the original file.Obsolete code sectionsIf you rename, delete, or change the signature of an operation in the model, the matching method in the generated Java file is no longer correct. When you regenerate the file, ObjectTeam displays a message warning you that the method is being moved to the obsolete code section. It then appends the original method to the end of the generated file, as shown in the following example:// Start obsolete code section -- Remove this line public void paint(Graphics g) { g.drawString("Hello World", 50, 25); } // method paint// End obsolete code section -- Remove this lineHow to regenerate source code filesWarning: You must remove obsolete code sections before you can regenerate the file.Σ To regenerate one or more Java files:1 In the Implementation phase, move to the system that contains the files that you want to regenerate.2 Select the files.3 Select Utilities | Generate Java | Selected.ObjectTeam opens a Monitor window to display log messages, and then imports the files.For more informationSee REFID="22683" TYPE="XREF-TEXTCOPY"Generating Java Source Files for more information about the Utilities | Generate Java command.Chapter 3 Mapping ID="10890"Modeling Data to JavaTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for JavaIntroductionThis chapter describes how ObjectTeam model information maps to Java code. It provides examples of CDs and the results produced when you generate Java code.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26371" TYPE="XREF-TEXTCOPY"Mapping Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26809" TYPE="XREF-TEXTCOPY"Mapping Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31230" TYPE="XREF-TEXTCOPY"Mapping Operations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12952" TYPE="XREF-TEXTCOPY"Mapping Inheritance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'34COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21032" TYPE="XREF-TEXTCOPY"Mapping Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39ID="26371"Mapping ClassesIntroductionAn ObjectTeam class symbol represents a compilation unit and declares a class. The class is also used to map a Java class or interface. The attributes of the class map to the Java class variables or instance variables. The operations of the class map to Java methods..java filesYou can use ObjectTeam class properties to determine the program structure of the generated Java code. By default, when you import your object designs into the Implementation phase, the Java code generator produces a separate classname.java file for each class symbol that you define in a CD. It then lists these files under the Type heading in the information area of the Browser.You can repackage the Java code into a smaller number of files, combining code for several classes into a single file. To do so, set the appropriate class properties, as described in REFID="38413" TYPE="XREF-TEXTCOPY"Defining Java Program Structure.ConstructorsGenerated Java classes can have one or more constructors. By default, each generated Java class includes a default constructor.Class propertiesYou use class properties to provide input to the code generator. This section describes how to edit class properties and the effect of each property.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29176" TYPE="XREF-TEXTCOPY"Generating Class Constructors 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21544" TYPE="XREF-TEXTCOPY"Editing Class Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20849" TYPE="XREF-TEXTCOPY"Specifying Comments 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17596" TYPE="XREF-TEXTCOPY"Specifying Class or Interface Generation 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32402" TYPE="XREF-TEXTCOPY"Specifying Access Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33315" TYPE="XREF-TEXTCOPY"Specifying Modifiers 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38413" TYPE="XREF-TEXTCOPY"Defining Java Program Structure 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="29176"Generating Class ConstructorsThree ways to generateTERM1="class" TERM2="constructor"TERM1="constructor" TERM2="generating"TERM1="method" TERM2="constructor"TERM1="$create() operation"TERM1="$create() operation"TERM1=""TERM1="Java, generated" TERM2="constructor"When you map an ObjectTeam class to a Java class, you also need a constructor for the class. You can generate a class constructor in the following ways:n Leave out a $create operation on the ObjectTeam class. The code generator creates a default constructor for the class.n Specify a $create operation without parentheses or parameters. The code generator creates a default constructor for the class. (This is useful if you want to generate both a default constructor and one or more user-defined constructors for a class.)n Specify a $create operation with parameters of your choice. The code generator creates a user-defined constructor for the class.Note: REFID="31230" TYPE="XREF-TEXTCOPY"Mapping Operations describes code generation for operations other than $create.Parameter listDefault constructorIf a class has no $create operation or has a $create operation without parentheses or parameters, the code generator creates a default constructor. The parameter list of the default constructor contains the following:- All key attributes (attributes prefixed with an asterisk (*)).- The association attribute of each association that has, at the far end, a multiplicity of exactly one and a role name.Note: If the association has a qualifier at the far end, and both ends of the association have role names, the qualifier is also included in the parameter list. See the examples.User-defined constructorIf a class has a $create operation that includes a parameter list, the code generator creates a user-defined constructor even if the parameter list is empty. The parameter list of a user-defined constructor is the one specified for the $create operation.ExampleThe following code excerpt shows a default constructor and a user-defined constructor.FILENAME="00676.unk" ORIGFILE="pics/acct.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"public class Account extends Object {...// Default constructorpublic Account() { // Start user code section // End user code section } // default constructor Account// User defined constructorspublic Account(int enable) { } // user constructor Account...} // class Accounttypedef and generic typedef classTERM1="constructor" TERM2="not generated"TERM1="typedef class"TERM1="generic typedef class"The ObjectTeam OOPL model supports typedef and generic typedef classes for C++ code generation:n A typedef class is any ObjectTeam class that has exactly one attribute, no associations that generate code, no operations, and no superclasses.n A generic typedef class is any ObjectTeam class that has exactly one association that generates code, no data attributes, no operations, no superclasses, and no subclasses.The Java code generator does not automatically generate a default constructor for typedef and generic typedef classes. To generate a default constructor for such a class, add a $create() operation to the class.ID="21544"Editing Class PropertiesIntroductionIn the Object Design phase, you define properties of a class that control its implementation and accessibility within its own Java package. The code generated for a class is based on its properties. How to edit class propertiesTERM1="Edit Properties (Item menu)" TERM2="for class"TERM1=""TERM1="class property" TERM2="editing"Σ To edit properties of a class:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog box appears.3 Select the class name.The class properties appear on the right side of the dialog box.FILENAME="00677.unk" ORIGFILE="pics/prptext.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"4 Select the desired properties. (The following subsections describe each property in greater detail.)- Use the Text tab to insert comments in the generated code.- Use the Class or Interface box on the Class tab to specify whether the class maps to Java class or interface, or whether the code generator should ignore it.- Use the Access box on the Class tab to specify whether the class is public.- Use the Modifier field of the Class tab specify modifiers that affect the behavior of the class.- Use the Package tab to define the program structure of the generated Java code.ID="20849"Specifying CommentsIntroductionTERM1="comment" TERM2="for class"TERM1=""TERM1="class property" TERM2="for comment"TERM1=""TERM1="Java, generated" TERM2="comment, for class or interface"TERM1="comment" TERM2="for interface"TERM1=""TERM1="interface property" TERM2="for comment"Use the Text tab of the Edit Properties dialog box to insert a comment in the generated code. The comment appears immediately before the class or interface declaration.Note: If you are not familiar with editing class properties, see REFID="21544" TYPE="XREF-TEXTCOPY"Editing Class Properties.Type of commentUse the Comment Type box to select the type of comment to insert:n ToEndOfLine (comment begins with //)n Block (comment appears between /* and */)n Document (comment appears between /** and */)Note: You can insert Javadoc tags within a Document type comment to generate HTML documents from Java source code.Comment textUse the Free Text box to enter the text of the comment.ExamplesThe code excerpts below show examples of each type of comment.ToEndOfLine comment example// Document Processing Managementpublic class Document extends Object {} // class DocumentBlock comment example/*Document Processing Management*/public interface Document {} // interface DocumentDocument comment example/**Document Processing Management*/public class Document extends Object {} // class DocumentID="17596"Specifying Class or Interface GenerationIntroductionTERM1="class" TERM2="mapping of"TERM1="mapping" TERM2="class"TERM1="interface" TERM2="mapping of"TERM1="mapping" TERM2="interface"TERM1="Java, generated" TERM2="class"TERM1="Java, generated" TERM2="interface"TERM1="external class"Use the Class or Interface box on the Class tab of the Edit Properties dialog box to specify how ObjectTeam maps a class into code:n External. ObjectTeam does not generate code for this class. A class in ObjectTeam represents classes or interfaces that exist outside of the system; for example, the Java Applet class or Runnable interface in the JDK 1.0.n Class (default). ObjectTeam generates a Java class, which extends the Object class and its implementation. The Object class is the root class from which all other Java classes are derived. Java also uses the extends statement to implement generalization, as described in REFID="12952" TYPE="XREF-TEXTCOPY"Mapping Inheritance.n Interface. ObjectTeam generates a Java interface, which may extend other interfaces. Note: If you are not familiar with editing class properties, see REFID="21544" TYPE="XREF-TEXTCOPY"Editing Class Properties.ExamplesThe code excerpts below show the Document class generated as a class and as an interface.Class examplepublic class Document extends Object {} // class DocumentInterface examplepublic interface Document {} // interface DocumentID="32402"Specifying Access PropertiesIntroductionAssign one of the following access properties to a class or an interface using the Access box on the Class tab of the Edit Properties dialog box.n Public (default). The class or interface can be accessed from other Java packages, either directly or in an Import statement.n None. The use of the class or interface is limited to the package in which it is declared.Note: If you are not familiar with editing class properties, see REFID="21544" TYPE="XREF-TEXTCOPY"Editing Class Properties.Class access examplesTERM1="class property" TERM2="access"TERM1="access property" TERM2="for class"The code excerpts below show how this property affects code generation for the Document class (generated as a Java class):Publicpublic class Document extends Object {} // class DocumentNoneclass Document extends Object {} // class DocumentInterface access examplesTERM1="interface property" TERM2="access"TERM1="access property" TERM2="for interface"The code excerpts below show how this property affects code generation for the Document class (generated as a Java interface):Publicpublic interface Document {} // interface DocumentNoneinterface Document {} // interface DocumentID="33315"Specifying ModifiersIntroductionTERM1="class property" TERM2="Final modifier"TERM1="class property" TERM2="Abstract modifier"TERM1="modifier property" TERM2="for class"TERM1=""TERM1="Final modifier property" TERM2="for class"TERM1="Abstract modifier property" TERM2="for class"Modifier properties alter the behavior of classes. To assign a modifier to a class or an interface, choose one of the values listed below from the Modifier list on the Class tab of the Edit Properties dialog box. (If you are not familiar with editing class properties, see REFID="21544" TYPE="XREF-TEXTCOPY"Editing Class Properties.)n None (default). Defines a concrete class that can have subclasses.n Final. Defines a class that cannot have any immediate subclasses. Note: Interfaces cannot be declared final. If this modifier is specified for an interface, the modifier is ignored.n Abstract. Defines an abstract class or a superclass from which subclasses inherit common characteristics and features.Note: All interfaces are implicitly abstract. You can specify the abstract modifier for interfaces, but are not required to do so.Class modifier examplesThe code excerpts below show how this property affects code generation for the Document class (generated as a Java class):Nonepublic class Document extends Object {} // class DocumentFinal public final class Document extends Object {} // class DocumentAbstractpublic abstract class Document extends Object {} // class DocumentInterface modifier examplesTERM1="interface property" TERM2="Final modifier"TERM1="interface property" TERM2="Abstract modifier"TERM1="modifier property" TERM2="for interface"TERM1=""TERM1="Final modifier property" TERM2="for interface"TERM1="Abstract modifier property" TERM2="for interface"The code excerpts below show how this property affects code generation for the Document class (generated as a Java interface):Nonepublic interface Document {} // interface DocumentFinal public interface Document {} // interface DocumentAbstractpublic abstract interface Document {} // interface DocumentID="38413"Defining Java Program StructureProgram structureTERM1="compilation unit"TERM1="class" TERM2="compilation unit"Java uses packages to organize collections of classes that work as a unit to perform a service. A package is the highest level of the Java program structure, followed by one or more compilation units (a collection of classes, one of which must be public), followed by class at the lowest level of the structure.A compilation unit must contain one class declaration that is accessible publicly. A compilation unit may contain other class declarations that are not public and that have file scope only. For each ObjectTeam class symbol, one compilation unit that has public accessibility is generated. Package fieldsTERM1="class" TERM2="packaging of"TERM1="class property" TERM2="package"TERM1="code" TERM2="packaging"Use the following fields on the Package tab on the Edit Properties dialog box to define the Java program structure. (If you are not familiar with editing class properties, see REFID="21544" TYPE="XREF-TEXTCOPY"Editing Class Properties.)n TERM1=".java file"Source File. If this field is empty or contains the name of the current class, the generated code for this class is written to the source file classname.java, where classname is the name of the current class.If this field contains a class name other than the name of the current class, the generated code for this class is written to the source file classname.java, where classname is the name specified in this field. This allows you to include the generated code for multiple classes in a single compilation unit (a single Java source file). n TERM1="package statement, in Java"TERM1="Java, generated" TERM2="package statement"Package Statement. If this box contains a text string, the generated code for this class includes a package statement.package text-string;Note: The Import Packages, Import Types, and Import On-Demands properties are obsolete. They are provided for compatibility with previous releases, as described in REFID="10552" TYPE="XREF-TEXTCOPY"Obsolete boxes.Import statementsThe Java code generator also uses the Package Statement property to generate the required Import statements for the generated .java file. When generating a .java file for the current class, the code generator checks the Package Statement property of each external class (or interface) that is used directly by the current class. If the Package Statement of the external class contains a text string, the code generator uses that text string to generate an Import statement in the .java file of the current class. If the Package Statement of the external class does not contain a text string, no Import statement is generated.Reverse engineeringReverse engineering populates the Package Statement property of the classes that it creates. If you use the following technique, ObjectTeam generates most of the Import statements that you need:1 Create an ObjectTeam system for each Java package that you need. Use reverse engineering, as described in REFID="26044" TYPE="XREF-TEXTCOPY"Reverse Engineering, to populate the ObjectTeam system with the classes defined in the Java package.For each class in the Java package, reverse engineering creates an ObjectTeam class and sets its Package Statement property appropriately.2 Create one or more ObjectTeam systems for the application that you are developing. When necessary, reference the ObjectTeam classes that represent the classes defined in the Java packages.Because the referenced classes are not defined in the current system, the code generator includes the appropriate Import statements.User-defined Import statementsOccasionally, you may want to add more Import statements to a generated .java file. To do so, place them beneath the following comment in the generated file:// User import sectionThe code generator preserves these Import statements when you regenerate the .java file.ID="10552"Obsolete boxesThe current release of the Java code generator generates Import statements automatically. In previous releases, you used the following properties to generate Import statements:n TERM1="import package statement, in Java"TERM1="Java, generated" TERM2="import package statement"Import Packages. If this box contains a text string, the generated code for this class includes an import package statement:import text-string;n Import Types. If this box contains a text string, the generated code for this class includes a statement that imports the specified class: import java.text-string;n Import On-Demands. If this box contains a text string, the generated code for this class includes statement that imports all classes in the specified package: import java.text-string.*;The current release of the Java code generator uses these properties to generate user-defined Import statements. These properties will not be supported in future releases.ExampleTo generate the Page class in the same source file as the Document class, edit properties for the Page class. Enter the class name Document in the Source File box, as shown in the following dialog box.FILENAME="00678.unk" ORIGFILE="pics/prppack3.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"ID="26809"Mapping AttributesIntroductionTERM1="attribute" TERM2="mapping of"TERM1="mapping" TERM2="attribute"TERM1="Java, generated" TERM2="attribute"ObjectTeam maps data attributes to Java variables or class variables.ID="29666"Attribute syntaxIn ObjectTeam, you use the following syntax to specify data attributes for a class:[ $ | / ] name : type = initial-valuewhere$ indicates a class attribute/ indicates a derived attributeAttribute maps to instance variableTERM1="variable, in Java"By default, a data attribute maps to an instance variable. A distinct variable known by that name is associated with every instance of the class or its subclasses.ExampleThe following code excerpt shows the translation of the Account.Amount attribute:class Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private int Amount;} // class AccountClass attribute maps to class variableTERM1="attribute" TERM2="static"TERM1="attribute property" TERM2="static"TERM1="class variable, in Java"TERM1="static modifier property" TERM2="for attribute"TERM1=""TERM1="$ (static attribute)"A class attribute maps to a Java class variable. There is exactly one variable of that name, no matter how many instances (possibly zero) of the class are created. In Java, a class variable is indicated by the static modifier.ExampleThe following code excerpt shows the translation of the Account.$Amount attribute:class Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private static int Amount;} // class AccountDerived attribute maps to instance variableTERM1="derived attribute"TERM1="/ (derived attribute)"Java does not support derived attributes. The Java code generaotr ignores the derived attribute indicator (/).Data typesYou must specify the data type of each attribute. See REFID="34871" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types for more information.Initial valuesTERM1="attribute" TERM2="default value"TERM1="default value, for attribute"TERM1="initial value, for attribute"You can specify a default value for any attribute. You must specify a default value for any attribute that has the Final modifier property. See REFID="18563" TYPE="XREF-TEXTCOPY"Specifying Modifiers for Data Attributes for more information.Attribute propertiesYou use attribute properties to provide input to the code generator. This section describes how to edit attribute properties and the effect of each property.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34871" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22300" TYPE="XREF-TEXTCOPY"Editing Attribute Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29648" TYPE="XREF-TEXTCOPY"Specifying Comments for Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35486" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21279" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18563" TYPE="XREF-TEXTCOPY"Specifying Modifiers for Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22ID="34871"Specifying Attribute Data TypesData typesTERM1="data type" TERM2="for attribute"TERM1="attribute" TERM2="data type"Specify the data type of an attribute with either a standard data type, such as integer, or the name of another class. For example:attr:integerDeclaring an arrayTERM1="array, in Java"Use square brackets to declare an attribute as an array. You cannot declare a dimension for an array in Java. For example:attr : integer [ ]This syntax produces the following line of code.integer attr [ ];Standard data typesThe standard data types are defined by the TERM1="stand_types customization file"stand_types customization file. These data types are valid in the Object Design phase.The translation between standard data types and Java data types is defined in TERM1="lang_types customization file"lang_types customization file. The Java code generator uses these.Customizing the standard data typesYou can add data types to the list of standard types in the stand_types customization file. If you do, you must also provide translations for those data types in the lang_types customization file.By default, the stand_types and lang_types customization files are defined on the corporate level. You can edit the customization files at the corporate level, or create and edit them at a lower level, such as the project level. (The customization files at the lower level override those at the higher level.)For more informationThe ObjectTeam Customization Guide describes how to create and edit customization files. The stand_types and lang_types customization files are ASCII files that can be edited using any text editor.ID="22300"Editing Attribute PropertiesIntroductionIn the Object Design phase, you define properties of the data attributes. These properties define the accessibility of the attribute with respect to classes and packages, as well as the behavior of the attributes. The code generated for a data attribute is based on its properties.How to edit attribute propertiesTERM1="Edit Properties (Item menu)" TERM2="for attribute"TERM1=""TERM1="attribute property" TERM2="editing"Σ To edit attribute properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an attribute name from the list in the left pane of the dialog box.The attribute properties appear on the right side of the dialog box.4 Select the desired properties. (The following subsections describe each property in greater detail.)- Use the Text tab to insert comments in the generated code.- Use the Attribute Access box on the Access tab to specify the accessibility of the data attribute.- Use the Attribute Access Methods box on the Access tab to specify the access methods for the data attribute.- Use the Modifiers tab to specify modifiers that affect the behavior of the data attribute.5 Click OK.ID="29648"Specifying Comments for Data AttributesIntroductionTERM1="comment" TERM2="for attribute"TERM1=""TERM1="attribute property" TERM2="for comment"TERM1=""TERM1="Java, generated" TERM2="comment, for attribute"Use the Text tab of the Edit Properties dialog box to insert a comment in the generated code. The comment appears immediately before the data attribute declaration.Type of commentUse the Comment Type field to select the type of comment to insert:n ToEndOfLine (comment begins with //)n Block (comment appears between /* and */)n Document (comment appears between /** and */)Note: You can insert Javadoc tags within a Document type comment to generate HTML documents from Java source code.Comment textUse the Free Text box to enter the text of the comment.Comment type examplesThe code excerpts below show the format and position in which the code generator produces each type of comment in code:ToEndOfLine class Account extends Object { // Data attributes // Return value of amount private int Amount; } // class AccountBlock comment class Account extends Object { // Data attributes /* Return value of amount */ private int Amount; } // class AccountDocument comment class Account extends Object { // Data attributes /** Return value of amount */ private int Amount; } // class AccountID="35486"Specifying Accessibility of Data AttributesIntroductionTERM1="attribute property" TERM2="access"TERM1="access property" TERM2="for attribute"Edit the Attribute Access property on the Class tab of the Edit Properties dialog box to specify the accessibility of a data attribute.n Public. The attribute is accessible anywhere that the class name is accessible.n Protected. The attribute is accessible throughout the package that contains the class in which the attribute is declared. The attribute is also accessible within the body of any subclass of that class unless it is shadowed (overridden in the subclass).n Private (default). The attribute is accessible only within the class body of the class in which the attribute is declared.n Private Protected. The attribute is accessible in the class in which it is declared and in all subclasses of that class. The attribute is accessible in subclasses, even if they are in a different package; the attribute is not accessible to classes that are not subclasses, even if they are in the same package.n None. The attribute is accessible only within its current package. If a subclass of the data attribute's class is declared in another package, the data attribute is not accessible in the body of that subclass. ExampleThe code excerpts below show how this property affects code generation for the Amount attribute of the Account class.Public class Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public int Amount;} // class AccountProtectedclass Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'protected int Amount;} // class AccountPrivateclass Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private int Amount;} // class AccountPrivate Protectedclass Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private protected int Amount;} // class AccountNoneclass Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int Amount;} // class AccountID="21279"Specifying Access Methods for Data AttributesIntroductionTERM1="attribute" TERM2="access method"TERM1="attribute property" TERM2="access method"TERM1="access property" TERM2="for attribute access method"TERM1=""TERM1="Java, generated" TERM2="attribute access method"TERM1="attribute access method"TERM1="method" TERM2="attribute access"An attribute access method is a special type of method that gets (reads) and sets (writes) an attribute's value. Use the Attribute Access Methods group box on the Access tab of the Edit Properties dialog box to specify what accessors to generate for the data attribute.Read and Write boxesThe Attribute Access Methods group box allows you to specify the access method for both read and write. The setting you specify in the Read box affects the Get attribute access method. The setting you specify in the Write box affects the Set attribute access method.Access methodsThe following values are allowed for both Read and Write boxes. You can enter the same or different values in the two fields.n Public (default). The generated method is accessible anywhere the class name is accessible.n Protected. The generated method is accessible throughout the package that contains the class in which the method is declared. The method is also accessible within the body of any subclass of that class unless it is shadowed (overridden in the subclass).n Private. The generated method is accessible only in the body of the class in which the attribute is declared.n None. The method is not generated.ExampleThe code excerpt that follows shows the code generated for the Account class, which has one attribute, Amount. The attribute's Read and Write access methods are both specified as Public (the default).public class Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private int amount;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessorsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public int getAmount() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return amount;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public void setAmount(int amount_) {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'amount = amount_;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' }} // class AccountID="18563"Specifying Modifiers for Data AttributesIntroductionTERM1="attribute property" TERM2="Final modifier"TERM1="attribute property" TERM2="Transient modifier"TERM1="attribute property" TERM2="Volatile modifier"TERM1="modifier property" TERM2="for attribute"TERM1="Final modifier property" TERM2="for attribute"TERM1=""TERM1="Transient modifier property" TERM2="for attribute"TERM1=""TERM1="Volatile modifier property" TERM2="for attribute"Use the Modifier tab in the Edit Properties dialog box to set the attribute modifier properties, which modify the behavior of the generated Java variables. You can select one or more modifiers. By default, none are selected.n Final. Typically used to represent constants. If you specify this modifier for an attribute, you must also specify an initial value for the attribute; otherwise, the code generator produces an error. Specify the initial value on the CD (see REFID="29666" TYPE="XREF-TEXTCOPY"Attribute syntax). n Transient. Causes the attribute to be marked indicating to low-level parts of the Java virtual machine that they are not part of the persistent state of the object. It is a compile-time error if a transient variable is also declared final or static.n Volatile. Allows the variable to be modified asynchronously.ExampleThe code excerpts below show how this property affects code generation for the Amount attribute of the Account class.Finalclass Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private final int Amount = 0;} // class AccountTransient class Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private transient int Amount;} // class AccountVolatileclass Account extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Data attributesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private volatile int Amount;} // class AccountStatic modifierJava uses the static modifier to indicate a class variable. REFID="26809" TYPE="XREF-TEXTCOPY"Mapping Attributes describes the mapping of class attributes to class variables.ID="31230"Mapping OperationsIntroductionGenerally, each operation defined for an ObjectTeam class maps to a Java method.Operation syntaxIn ObjectTeam, you use the following syntax to specify operations for a class:[ $ ] name ( [ parameter-list ] ) [ : return_type ] [ {abstract} ]wheren $ indicates a class operation, as described belown {abstract} indicates an abstract method, as described below.Operation maps to instance methodTERM1="method" TERM2="mapping of"TERM1="mapping" TERM2="method"TERM1="Java, generated" TERM2="method"Operations defined for an ObjectTeam class map to Java instance methods. An instance method can be invoked only relative to an instance of the method's class or one of its subclasses.ExampleThe following code excerpt shows the translation of the Print() operation on the Document class:public class Document extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public boolean Print() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} // method Print -- regeneration end marker} // class DocumentClass operation maps to class methodTERM1="static modifier property" TERM2="for method"TERM1=""TERM1="class" TERM2="method"TERM1="method" TERM2="static"TERM1="$ (static method)"TERM1="method property" TERM2="static"In ObjectTeam, you indicate a class operation by prefixing the operation name with a dollar sign ($). Class operations map to Java class methods. A class method is regarded as belonging to the class rather than operating within instances of the class.ExampleThe following code excerpt shows the translation of the $Print() operation on the Document class. In Java, the static modifier indicates a class method.public class Document extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public static boolean Print() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} // method Print -- regeneration end marker} // class Document$static() operationsTERM1="$static() operation"TERM1="$static() operation"TERM1=""TERM1="static initialization block"TERM1="class" TERM2="static initialization block"TERM1="Java, generated" TERM2="static initialization block"An ObjectTeam operation named $static() maps to a static initialization block for the class:// Methodsstatic {} // static initializer -- regeneration end markerOperation maps to abstract methodTERM1="static modifier property" TERM2="for method"TERM1=""TERM1="class" TERM2="method"TERM1="method" TERM2="static"TERM1="$ (static method)"TERM1="method property" TERM2="static"In ObjectTeam, you indicate an abstract operation by suffixing the operation name with {abstract}. An abstract operation defines the method as having no implementation. As a result, the code generator does not generate a body.Note: Abstract methods can be used only in an abstract class.ExampleThe following code excerpt shows the translation of the Print () {abstract} method on the Document class. In Java, the {abstract} modifier indicates a class method.public class Document extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public abstract boolean Print();} // class DocumentOperation propertiesYou use operation properties to provide input to the code generator. This section describes how to edit operation properties and the effect of each property.Special methodsThe Java code generator also generates the following special methods, which you do not have to specify as operations in an ObjectTeam class:n Class constructors, as described in REFID="29176" TYPE="XREF-TEXTCOPY"Generating Class Constructors. Class constructors can be specified as $create operations on an ObjectTeam class, but are not required to be.n Attribute access methods, as described in REFID="21279" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data Attributes. Access methods are never specified as operations on an ObjectTeam class.n Association access methods, as described in REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple Associations. Access methods are never specified as operations on an ObjectTeam class.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16091" TYPE="XREF-TEXTCOPY"Editing Operation Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36331" TYPE="XREF-TEXTCOPY"Specifying Comments for Methods 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10531" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Methods 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'29COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19978" TYPE="XREF-TEXTCOPY"Specifying Modifiers for Methods 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21783" TYPE="XREF-TEXTCOPY"Specifying Exceptions in Method Declarations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'33ID="16091"Editing Operation PropertiesIntroductionIn the Object Design phase, you define properties of operations. These properties define the accessibility of an operation with respect to classes and packages, as well as the behavior of the operation. The code generated for an operation is based on its properties.How to edit operation propertiesTERM1="Edit Properties (Item menu)" TERM2="for method"TERM1=""TERM1="method property" TERM2="editing"Σ To edit operation properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog box appears.3 Select a method name from the list in the left pane of the dialog box.The operation properties appear on the right side of the dialog box.4 Select the desired properties. The following subsections describe each property in greater detail.- Use the Text tab to insert comments in the generated code.- Use the Access tab to specify the accessibility of the generated method.- Use the Modifiers tab to specify modifiers that affect the behavior of the generated method.- Use the Throw tab to specify the exceptions that can be fired by the generated method.5 Click OK.ID="36331"Specifying Comments for MethodsIntroductionTERM1="comment" TERM2="for method"TERM1=""TERM1="method property" TERM2="for comment"TERM1=""TERM1="Java, generated" TERM2="comment, for method"Use the Text tab of the Edit Properties dialog box to insert a comment in the generated code. The comment appears immediately before the method declaration in the generated code.Type of commentUse the Comment Type field to select the type of comment to insert:n ToEndOfLine (comment begins with //)n Block (comment appears between /* and */)n Document (comment appears between /** and */)Note: You can insert Javadoc tags within a Document type comment to generate HTML documents from Java source code.Comment textUse the Free Text field to enter the text of the comment.ExampleThe code excerpts below show the format and position in which the code generator produces each type of comment in code:ToEndOfLine comment examplepublic class Document extends Object { // Methods // Print the document public Boolean Print() { } // method Print -- regeneration end marker} // class DocumentBlock comment examplepublic class Document extends Object { // Methods /* Print the document */ public Boolean Print() { } // method Print -- regeneration end marker} // class DocumentDocument comment examplepublic class Document extends Object { // Methods /** Print the document */ public String Boolean Print() { } // method Print -- regeneration end marker} // class DocumentID="10531"Specifying Accessibility of Methods IntroductionTERM1="method property" TERM2="access"TERM1="access property" TERM2="for method"In the Object Design phase, use the Method tab of the Edit Properties dialog box to define the extent to which other classes can access a method of a class. n Public (default). The method is accessible anywhere the class name is accessible.n Protected. The method is accessible throughout the package that contains the class in which the method is declared. The method is also accessible within the body of any subclass of that class unless it is shadowed (overridden in the subclass). n Private. The method is accessible only in the body of the class in which it is declared.n Private Protected. The method is accessible in the class in which it is declared and in all subclasses of that class. The method is accessible in subclasses, even when they are in a different package; the method is not accessible to classes that are not subclasses, even when they are in the same package.n None. The method is accessible only within its current package. If a subclass of the method's class is declared in another package, the method is not accessible in the body of that subclass.ExampleThe code excerpts below show how this property affects code generation for the Get_Employee_ID method of the Employee class.Publicpublic class Employee extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public int Get_Employee_Id() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} // method Get_Employee_Id -- regeneration end marker} // class EmployeeProtectedpublic class Employee extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'protected int Get_Employee_Id() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} // method Get_Employee_Id -- regeneration end marker} // class EmployeePrivate public class Employee extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private int Get_Employee_Id() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} // method Get_Employee_Id -- regeneration end marker} // class EmployeePrivate Protectedpublic class Employee extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'private protected int Get_Employee_Id() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} // method Get_Employee_Id -- regeneration end marker} // class EmployeeNonepublic class Employee extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int Get_Employee_Id() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} // method Get_Employee_Id -- regeneration end marker} // class EmployeeID="31329"VisibilityYou can display the access level of methods in your diagram by checking Options | Show Visibility in the Class Diagram Editor. Method names will then be displayed with the following leading characters indicating the method's access level:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="318p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special characterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"+COLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"#COLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"-COLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateThese special characters can also be used to set the access level of methods. Typing a hatch sign (#) before a method name will set the access level of the method to Protected, for example. Warning: The special characters only work if the menu entry Options | Show Visibility in the Class Diagram Editor has been checked. Otherwise, they will just be regarded as part of the method name.Note: No leading character is displayed for methods with an access level of Private Protected or None.ID="19978"Specifying Modifiers for MethodsIntroductionTERM1="method property" TERM2="Final modifier"TERM1="method property" TERM2="Abstract modifier"TERM1="method property" TERM2="Native modifier"TERM1="method property" TERM2="Synchronized modifier"TERM1="modifier property" TERM2="for method"TERM1="Final modifier property" TERM2="for method"TERM1=""TERM1="Abstract modifier property" TERM2="for method"TERM1=""TERM1="Native modifier property" TERM2="for method"TERM1="Synchronized modifier property" TERM2="for method"Use the Modifier tab in the Edit Properties dialog box to set the operation modifier properties, which modify the behavior of the generated Java methods. You can select one or more modifiers. By default, none are selected.n Final. Prohibits the method from being overridden.n Native. Indicates that the method is to be implemented in a platform-dependent way, for example in C or in assembly language. Because the method is not to be implemented in Java, no body is generated for it.n Synchronized. Causes the method to acquire a monitor lock before it executes. If the method is also static, it acquires the lock per class. If not, it acquires the lock per object.ExampleThe code excerpts below show how this property affects code generation for the Print method of the Document class.Finalpublic class Document extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public final boolean Print() {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} // method Print -- regeneration end marker} // class DocumentNativepublic class Document extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public native boolean Print();} // class DocumentSynchronizedpublic class Document extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public synchronized boolean Print();} // class DocumentStatic modifierJava uses the static modifier to indicate a class method. REFID="31230" TYPE="XREF-TEXTCOPY"Mapping Operations describes the mapping of class operations to class methods.{abstract} modifierJava uses the {abstract} modifier to indicate an abstract method. REFID="31230" TYPE="XREF-TEXTCOPY"Mapping Operations describes the mapping of abstract operations to abstract methods.ID="21783"Specifying Exceptions in Method DeclarationsIntroductionTERM1="method" TERM2="exception"TERM1="method property" TERM2="throw (exception)"TERM1="throw property, for method"TERM1="exception property, for method"Use the Throws tab in the Edit Properties dialog box to specify exceptions to be included in the generated method declaration.Multiple exceptionsIf you are entering multiple exceptions, use spaces to separate them.You can also generate throw clauses in method declarations using the Edit Properties dialog box. An example of generating throw clauses is shown below for the Document class.ExampleThe following dialog box shows how multiple exceptions are specified. The code excerpt that follows the dialog box shows the format and location of the exceptions in the generated code.FILENAME="00679.unk" ORIGFILE="pics/prpthrws.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"public class Document extends Object {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'//Methodsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'public void Save() throws IOException, FileNotFoundException { } // method Save -- regeneration end marker} // class DocumentID="12952"Mapping InheritanceIntroductionThe Java code generator supports single inheritance for classes. It supports both single and multiple inheritance for interfaces.Base class determines type of inheritanceTERM1="inheritance" TERM2="specifying type of"TERM1="interface property" TERM2="for inheritance"The Java code generator examines the base class to determine whether to generate class inheritance or interface inheritance. n If the class properties of the ObjectTeam base class indicate that the class maps to a Java class, the code generator generates class inheritance. n If the class properties of the ObjectTeam base class indicate that the class maps to a Java interface, the code generator generates interface inheritance.REFID="17596" TYPE="XREF-TEXTCOPY"Specifying Class or Interface Generation describes how to indicate whether an ObjectTeam class maps to a Java class or interface.Disjoint and overlapping inheritanceTERM1="disjoint inheritance"TERM1="overlapping inheritance"In ObjectTeam, you can specify either disjoint or overlapping inheritance. When using the Java code generator, always use disjoint inheritance.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DisjointCOLNAME="2" VALIGN="TOP" MOREROWS="0"OverlappingCOLNAME="1" VALIGN="TOP" MOREROWS="0"FILENAME="00680.unk" ORIGFILE="pics/hierdisj.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00681.unk" ORIGFILE="pics/hierover.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19799" TYPE="XREF-TEXTCOPY"Mapping Class Inheritance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'35COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18184" TYPE="XREF-TEXTCOPY"Mapping Interface Inheritance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'36ID="19799"Mapping Class InheritanceIntroductionTERM1="mapping" TERM2="class inheritance"TERM1="inheritance" TERM2="class"TERM1="class" TERM2="inheritance"In Java, a class may extend (or inherit from) another class. This behavior is called subclassing. Subclassing is a means by which new and enhanced objects can be created from existing objects.Multiple inheritance is not permittedJava permits a class to inherit from one class only. Therefore, the code generator displays an error if an ObjectTeam class inherits from more than one other class.ExampleIn the following CD, Rectangle extends (inherits from) Shape and Circle extends (inherits from) Shape. FILENAME="00682.unk" ORIGFILE="pics/inhercl.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"In the following generated code excerpt, Rectangle extends Shape and Circle extends Shape. Shape extends the Object class, which is the root class of all Java classes.public class Shape extends Object {...} // class Shapepublic class Rectangle extends Shape {...} // class Rectanglepublic class Circle extends Shape {...} // class CircleID="18184"Mapping Interface InheritanceIntroductionTERM1="mapping" TERM2="interface inheritance"TERM1="inheritance" TERM2="interface"TERM1="interface" TERM2="inheritance"In Java, an interface may extend one or more other interfaces. The interface being declared extends the other named interfaces. It implicitly includes the methods and constants (unless shadowed) of each of the other interfaces. Any class that implements the declared interface is also considered to implement the interfaces that the declared interface extends.Single and multiple inheritanceSingle inheritance occurs when an interface extends one other interface. Multiple inheritance occurs when an interface extends to more than one other interface. The examples in this section show multiple inheritance, but could as easily show single inheritance.Warning: If you are using multiple inheritance, make sure that every ObjectTeam base class is marked as an interface. If a single ObjectTeam class inherits from multiple base classes and exactly one of those base classes is marked as a class, the Java code generator generates class inheritance with respect to that one base class and interface inheritance with respect to the other base classes.Attributes in an interfaceTERM1="interface" TERM2="attributes in"TERM1="attribute" TERM2="in interface"You must declare any attributes in an interface as class attributes (Java static modifier), final attributes (Java final modifier), or both. In addition, every attribute in an interface must have an initial value that is a constant expression.For more information, see the following:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TopicCOLNAME="2" VALIGN="TOP" MOREROWS="0"SeeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class attributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="26809" TYPE="XREF-TEXTCOPY"Mapping AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Final attributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="18563" TYPE="XREF-TEXTCOPY"Specifying Modifiers for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Initial valuesCOLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="26809" TYPE="XREF-TEXTCOPY"Mapping AttributesExampleIn the following CD, Radio extends (inherits from) both Receiver and Transmitter. The class properties of both Receiver and Transmitter indicate that these class map to Java interfaces.FILENAME="00683.unk" ORIGFILE="pics/inherin.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"Following are generated code excerpts for all three classes. The Radio interface extends both the Receiver and Transmitter interfaces. The attributes and methods of the Receiver and Transmitter interfaces are implemented in Radio interface.Generated code for Radio interfacepublic class Radio extends Object implements Transmitter, Receiver { // Data attributes private int state;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Methods public int select() { } // method select -- regeneration end marker public int tune() { } // method tune -- regeneration end markername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessors public int getState() { return state; } public void setState(int state_) { state = state_; }} // class RadioGenerated code for Receiver interfacepublic interface Receiver { // Data attributes public final boolean receiving; // Methods public int receive();} // interface ReceiverGenerated code for Transmitter interfacepublic interface Transmitter { // Data attributes public final boolean transmitting=true; // Methods public int transmit();} // interface TransmitterID="21032"Mapping AssociationsIntroductionTERM1="mapping" TERM2="association"TERM1="association" TERM2="mapping of"ObjectTeam and Java code generator support the following:n Binary association (associations between two classes)n Qualified associations (associations that include a qualifier)n Link attributes (attributes used to define an association)n Association as class (class used to define an association)TERM1="n-ary association"TERM1="association" TERM2="n-ary"N-ary associationsThe Java code generator ignores n-ary associations. Code is generated for the classes involved, but no code is generated for the n-ary association.Optional MultplicityThe optional multiplicity of an association does not affect the code generated for it. Instead, if a class has a mandatory association, the constructor for the class ensures that it is related to an instance of the associated class.AggregationsTERM1="aggregation"The Java code generator translates aggregations like associations.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'40COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19864" TYPE="XREF-TEXTCOPY"Mapping Associations With Multiplicity of Many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'44COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14868" TYPE="XREF-TEXTCOPY"Mapping Ordered Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'46COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13312" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'48COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37751" TYPE="XREF-TEXTCOPY"Mapping Link Attributes and Classes as Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'51ID="21964"Mapping Simple AssociationsIntroductionThis section describes how the Java code generator implements the following simple associations between the Customer class and the Book class.Unidirectional associationFILENAME="00684.unk" ORIGFILE="pics/asscuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"Bidirectional associationFILENAME="00685.unk" ORIGFILE="pics/asscbi.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"Unidirectional and bidirectionalTERM1="association" TERM2="unidirectional"TERM1="unidirectional association"TERM1="association" TERM2="bidirectional"TERM1="bidirectional association"TERM1="one-to-one association"TERM1="association" TERM2="one-to-one"The direction of an association is defined by the role names on it. A role name at the far end of the association indicates an association from the class at the near end to the class at the far end.If an association has a role name at only one end, it is a unidirectional association (implemented in one direction). If an association has role names at both ends, it is a bidirectional association (implemented in both directions).Mapping a unidirectional associationTERM1="Java, generated" TERM2="association attribute"TERM1="Java, generated" TERM2="association attribute access method"The Java code generator implements a unidirectional association by adding an association attribute and a set of association attribute accessor methods to the code generated for the class at the near end of the association. Creating this association allows the class at the near of the association (Customer) to access the class at the far end (Book); the class at the far end of the association cannot access the class at the near end.Mapping a bidirectional associationThe Java code generator implements a bidirectional association by adding an association attribute and a set of association attribute accessor methods to the code generated for both classes. This allows each class to access the other. To ensure integrity of a bidirectional association, the update method for a bidirectional association always maintains the association in both directions.Example of a unidirectional associationFollowing is an excerpt from the code generated for the Customer class in the unidirectional association. Because this is a unidirectional association, the Book class does not contain any code related to the association.public class Customer extends Object { // Data attributes private String name; // Association attributes public Book book;...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessors public String getName() { return name; } public void setName(String name_) { name = name_; } // Association accessors public Book getBook() { return book; } public void setBook(Book book_) { book = book_; }} // class CustomerExample of a bidirectional associationFollowing is an excerpt from the code generated for the Customer class in the bidirectional association. Because this is a bidirectional association, the Book class contains similar code to implement the association in the other direction.public class Customer extends Object { // Data attributes private String name; // Association attributes public Book book;...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessors public String getName() { return name; } public void setName(String name_) { name = name_; } // Association accessors public Book getBook() { return book; } public void setBook(Book book_) { if (book != null) book.cust = null; if (book_ != null) { book_.setCust(null); book_.cust = this; } book = book_; }} // class CustomerAssociation attributesTERM1="association attribute"TERM1="attribute" TERM2="association attribute"TERM1="association attribute access method"TERM1="method" TERM2="association attribute access"The ObjectTeam documentation and generated Java code use the term association attribute to refer to data attributes generated to support ObjectTeam associations (as opposed to data attributes generated from ObjectTeam attributes). In Java, an association attribute is simply another data attribute and association accessors are simply data attribute accessors.How to edit association attribute propertiesTERM1="Edit Properties (Item menu)" TERM2="for association"TERM1=""TERM1="association attribute property" TERM2="editing"Association attributes and accessors, like data attributes and accessors, have associated ObjectTeam properties. In ObjectTeam, you edit these properties by editing the properties of the association.Σ To edit association properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog box appears.3 Select a role name from the list in the left pane of the dialog box.The association attribute properties appear on the right side of the dialog box.4 Select the desired properties:- TERM1="comment" TERM2="for association"TERM1=""TERM1="association attribute property" TERM2="for comment"TERM1=""TERM1="Java, generated" TERM2="comment, for association"Use the Text tab to insert comments in the generated code, as described in REFID="29648" TYPE="XREF-TEXTCOPY"Specifying Comments for Data Attributes. For association attributes, the comments appear immediately before the association attribute declaration in the generated code.- TERM1="association attribute property" TERM2="access"TERM1="access property" TERM2="for association attribute"Use the Attribute Access box on the Access tab to specify the accessibility of the association attribute, as described in REFID="35486" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Data Attributes.Note: Association attributes for bidirectional associations are always Public. For these attributes, the code generator ignores the setting of the Attribute Access field.- TERM1="association attribute property" TERM2="access method"TERM1="access property" TERM2="for association attribute access method"Use the Attribute Access Methods box on the Access tab to specify the access methods for the association attribute, as described in REFID="21279" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data Attributes.- TERM1="association attribute property" TERM2="Transient modifier"TERM1="association attribute property" TERM2="Static modifier"TERM1="modifier property" TERM2="for association"TERM1="Transient modifier property" TERM2="for association attribute"TERM1=""TERM1="static modifier property" TERM2="for association attribute"Use the Modifiers tab to specify modifiers that affect the behavior of the data attribute, as described in REFID="18563" TYPE="XREF-TEXTCOPY"Specifying Modifiers for Data Attributes.Association attributes have only two modifiers: static and transient. Static makes the association attribute a class attribute. Transient marks the attribute as not part of the persistent state of the object.5 Click OK.ID="19864"Mapping Associations With Multiplicity of ManyPrerequisiteREFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple Associations describes the mapping of an ObjectTeam association with multiplicity of one. This section assumes that you are familiar with that information.Multiplicity of manyTERM1="one-to-many association"TERM1="many-to-one association"TERM1="many-to-many association"TERM1="association" TERM2="one-to-many"TERM1="association" TERM2="many-to-many"This section describes how the Java code generator implements the following association between the Customer class and the Book class. FILENAME="00686.unk" ORIGFILE="pics/asscmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"Note: The generated code is the same, regardless of whether you have specified an explicit number for the multiplicity.Mapping a many associationTERM1="Vector class"The mapping of an association with a multiplicity of many is similar to that of an association with a multiplicity of one; however, the type of the association attribute is different. n One. For an association with a multiplicity of one, the type of the association attribute is the associated class.n Many. For an association with a multiplicity of many, the type of the association attribute is the Vector class. The Vector class uses a slightly different set of attribute access methods. For read access, it uses a get method. For write access, however, it uses two methods: add and remove. All three methods are shown in the following example.Note: The Vector class is in the util package shipped with the Java Development Kit (JDK) 1.0.ExampleFollowing is an excerpt from the code generated for the Customer class shown above. Because this association is unidirectional, the Book class does not contain any code related to the association.public class Customer extends Object { // Data attributes private String name; // Association attributes public Vector bookSet; // Default constructors public Customer() { bookSet = new Vector(); // Start user code section // End user code section } // default constructor Customer...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessors public String getName() { return name; } public void setName(String name_) { name = name_; } // Association accessors public void addBook(Book book_) { if (book_ == null) return; bookSet.addElement(book_); } public void removeBook(Book book_) { if (book_ == null) return; bookSet.removeElement(book_); } public Vector getBookSet() { return bookSet; }} // class CustomerAssociation attribute propertiesYou can affect the code generated for any association by specifying the properties of the association, as described in REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.ID="14868"Mapping Ordered AssociationsPrerequisiteREFID="19864" TYPE="XREF-TEXTCOPY"Mapping Associations With Multiplicity of Many describes the mapping of an ObjectTeam association with multiplicity of many. This section assumes that you are familiar with that information.Ordered associationTERM1="association" TERM2="ordered"TERM1="ordered association"TERM1="mapping" TERM2="ordered association"This section describes how the Java code generator implements the following ordered association between the Customer class and the Book class. FILENAME="00687.unk" ORIGFILE="pics/asscord.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"Mapping an ordered associationTERM1="Queue class" TERM2="and ordered association"The mapping of an ordered association is similar to that of an association with an unordered multiplicity of many; however, the type of the association attribute is different. For an ordered association, the type of the association attribute is the Queue class. The Queue class uses a slightly different set of attribute access methods. For read access, it uses a get method. For write access, it uses two methods: append and remove. All three methods are shown in the following example.Note: The Queue class is shipped with ObjectTeam's Java code generator. Configuring the Java environment, as described in REFID="27027" TYPE="XREF-TEXTCOPY"Configuring the Java Environment, makes the Queue class available. You do not need the Queue class to generate the Java code, but you do need it to run the code.ExampleFollowing is an excerpt from the code generated for the Customer class shown above. Because this association is unidirectional, the Book class does not contain any code related to the association.public class Customer extends Object { // Data attributes private String name; // Association attributes public Queue bookSet; // Default constructor public Customer() { bookSet = new Queue(); // Start user code section // End user code section } // default constructor Customer...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessors public String getName() { return name; } public void setName(String name_) { name = name_; } // Association accessors public void appendBook(Book book_) { if (book_ == null) return; bookSet.append(book_); } public void removeBook(Book book_) { if (book_ == null) return; bookSet.removeElement(book_); } public Queue getBookSet() { return bookSet; }} // class CustomerAssociation attribute propertiesYou can affect the code generated for any association by specifying the properties of the association, as described in REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.ID="13312"Mapping Qualified AssociationsPrerequisiteREFID="19864" TYPE="XREF-TEXTCOPY"Mapping Associations With Multiplicity of Many describes the mapping of an ObjectTeam association with multiplicity of many. This section assumes that you are familiar with that information.Qualified associationThis section describes how the Java code generator implements the following association between the Customer class and the Book class. FILENAME="00688.unk" ORIGFILE="pics/asscqual.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"Mapping a qualified associationTERM1="association" TERM2="qualified"TERM1="qualified association"TERM1="mapping" TERM2="qualified association"TERM1="Hashtable class"The mapping of a qualified association is similar to that of an association with multiplicity of many; however, the type of the association attribute is different.For a qualified association, the type of the association attribute is the Hashtable class. The qualifier (bookID, in the CD above) is used as a key into the hashtable for storage and retrieval.Note: The Hashtable class is in the util package shipped with the Java Development Kit (JDK) 1.0.hashCode and equals methodsTERM1="hashCode method"TERM1="equals method"If the qualified association has a multiplicity greater than 1, you must supply both a hashCode method and an equals methods for the qualifier. A comment in the generated code reminds you to supply these methods.ExampleEach data type supplied in the Java Development Kit (JDK) 1.0 includes the hashCode and equals methods. For examples, see the hashCode and equals methods declared for the String object in the JDK file <JDK-install>\java\src\java\lang\String.java.Tip: If you specify a JDK data type as the data type of the qualifier, you do not have to supply the hashCode and equals methods. The JDK supplies them for you.How to edit qualifier propertiesTERM1="Edit Properties (Item menu)" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="editing properties"The only properties available for a qualifier are the data type and comments. You can also edit other properties of the association, as described in REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.Σ To edit qualifier properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog box appears.3 Select a qualifier from the list in the left pane of the dialog box.The qualifier properties appear on the right side of the dialog box.4 Select the desired properties. - TERM1="comment" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="comment for"TERM1="Java, generated" TERM2="comment, for qualifier"Use the Text tab to insert comments in the generated code, as described in REFID="29648" TYPE="XREF-TEXTCOPY"Specifying Comments for Data Attributes. For qualifiers, the comments appear immediately before the qualifier declaration in the generated code.- TERM1="qualifier" TERM2="data type"TERM1="data type" TERM2="for qualifier"Use the Misc tab to specify a data type for the qualifier.5 Click OK.ExampleFollowing is an excerpt from the code generated for the Customer class shown above. Because the association is unidirectional, the Book class does not contain any code related to the association.The data type of the bookID qualifier is specified as String, which is a data type contained in the Java Development Kit (JDK) 1.0. The comment in the code reminds you that you must supply hashCode and equals methods for bookID. In this case, the methods are supplied in the JDK.public class Customer extends Object { // Data attributes private String name; // Association attributes public Hashtable bookSet; // Default constructor public Customer() { bookSet = new Hashtable(); // Start user code section // End user code section } // default constructor Customer...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessors public String getName() { return name; } public void setName(String name_) { name = name_; } // Association accessors public Vector getBookSet(String bookID_) { Object object = bookSet.get(bookID_); if (object != null) return ((Vector) object); return null; } public void addBook(String bookID_, Book book_) { if (book_ == null) return; // You must supply a hashCode and equals method for Object // bookID for java.util.Hashtable usage. Vector vector = (Vector) bookSet.get(bookID_); if (vector == null) { vector = new Vector(); bookSet.put(bookID_, vector); } vector.addElement(book_); } public void removeBook(String bookID_, Book book_) { if (book_ == null) return; Vector vector = (Vector) bookSet.get(bookID_); if (vector != null) vector.removeElement(book_); }} // class CustomerID="37751"Mapping Link Attributes and Classes as AssociationsPrerequisiteThis section assumes that you are familiar with the mapping of various types of associations, as described in the previous sections.Attributes and classes on associationsObjectTeam allows you specify information about an association by linking attributes, or a class, to the association. The following diagram shows a link attribute symbol; a class symbol can be used in the same location.FILENAME="00689.unk" ORIGFILE="pics/assclnk.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"Association mapped as two associationsAn association that includes a link attribute or a class is transformed before code generation. The link attribute or class becomes a separate class, with appropriate associations to the original classes. The generated code is then based on the transformed association.ExampleThe code generated for the CD shown above is based on the following CD:FILENAME="00690.unk" ORIGFILE="pics/assccnv.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javagen.fm5.mif"Name used for the third classTERM1="association" TERM2="and link attribute"TERM1=""TERM1="link attribute"TERM1="mapping" TERM2="link attribute"If the association includes a link attribute, the new class is assigned the name of the association. Therefore, an association that has a link attribute must have an association name.TERM1="association" TERM2="and class"TERM1=""TERM1="class" TERM2="as association"TERM1=""TERM1="mapping" TERM2="class, as association"If the association includes a class, that class is used as the third class. Therefore, an association that includes a class does not need an association name.Role names are requiredAs with all associations, role names are required. If a role name is omitted, the association attributes and methods that would map to that role name are not generated.ExampleFollowing is the code generated for each of the three Java classes produced by the CD shown above.Generated code for the purchase classpublic class purchase extends Object { // Data attributes private String date; // Association attributes public Customer cust; public Book book; // Default constructor public purchase(Customer cust_, Book book_) { cust = cust_; book = book_; cust.purchaseOfBookSet.addElement(this); book.purchaseOfCust = this; // Start user code section // End user code section } // default constructor purchase // Methods // Do not delete this line -- regeneration end markername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessors public String getDate() { return date; } public void setDate(String date_) { date = date_; } // Association accessors public Customer getCust() { return cust; } public Book getBook() { return book; }} // class purchaseGenerated code for the Customer classpublic class Customer extends Object { // Data attributes private String name; // Association attributes public Vector purchaseOfBookSet; // Default constructor public Customer() { purchaseOfBookSet = new Vector(); // Start user code section // End user code section } // default constructor Customer // Methods // Do not delete this line -- regeneration end markername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'// Attribute accessors public String getName() { return name; } public void setName(String name_) { name = name_; } // Association accessors public Vector getPurchaseOfBookSet() { return purchaseOfBookSet; }} // class CustomerGenerated code for the Book classpublic class Book extends Object { // Data attributes private String title; // Association attributes public purchase purchaseOfCust; // Default constructor public Book() { // Start user code section // End user code section } // default constructor Book // Methods // Do not delete this line -- regeneration end marker // Attribute accessors public String getTitle() { return title; } public void setTitle(String title_) { title = title_; } // Association accessors public purchase getPurchaseOfCust() { return purchaseOfCust; }} // class BookAssociation attribute propertiesAs for all associations, you can affect the code generated for the association attributes and association attribute access methods by editing the properties for the association, as shown in REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.Chapter 4 ID="32714"Reverse and Round-Trip EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for JavaIntroductionTERM1="project" TERM2="using data from other sources"This chapter describes how to use reverse engineering and round-trip engineering with the Java code generator.Reverse engineeringReverse engineering Java code makes the structures and functions of the code visible in ObjectTeam. This process facilitates your understanding of the existing code, which gives you more opportunity to reuse it. The code that you reverse-engineer may come from other projects or from third parties, such as public domain software sites.Round-trip engineeringRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated Java source files. Use round-trip engineering to update the ObjectTeam model before you regenerate the source files. If you add an attribute or operation to the generated source file, but not to the ObjectTeam model, that attribute or operation is lost when you regenerate the source files.ExplanationThe code generator generates code based on the ObjectTeam model. When you regenerate the source file, only the attributes and operations defined in the model appear in the generated source file.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17364" TYPE="XREF-TEXTCOPY"Reverse Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27974" TYPE="XREF-TEXTCOPY"Round-Trip Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12ID="17364"Reverse EngineeringIntroductionTERM1="project" TERM2="using data from other sources"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="class library" TERM2="reverse engineering"Reverse engineering parses .java files and builds CDs and CDMs that show the classes defined in those files.Purpose Use reverse engineering to capture and display the classes defined in your .java files, which serves two primary purposes:n Makes the classes available in ObjectTeam as external classesn Helps you to understand the structure and functionality of classesNot an import utilityReverse engineering is not designed to capture all the information in a .java file. Do not use reverse engineering to import classes so that you can maintain them in ObjectTeam. If you generate .java files from the CDs and CDMs created by reverse engineering, they will not match the files you used to create those CDs and CDMs.TERM1="reverse engineering" TERM2="class library"TERM1="translating" TERM2="c++ header files to Class Association Diagrams"ID="37729"What happens during reverse engineeringReverse engineering translates .java files into CDs and CDMs that show the class hierarchy as follows:1 Parses the .java files, then maps the Java elements to ObjectTeam elements.2 Creates CDs and CDMs that define the ObjectTeam elements.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11498" TYPE="XREF-TEXTCOPY"Parsing the Files 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14059" TYPE="XREF-TEXTCOPY"Creating the Diagrams 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10482" TYPE="XREF-TEXTCOPY"Running Reverse Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10ID="11498"Parsing the FilesParsing the .java filesThe parser processes the .java files as follows:n It recognizes class, interface, variable, and method declarations.Note: The package mechanism in Java allows you to define name spaces. You can define such name spaces in ObjectTeam. Classes with the same name that are defined in multiple packages can cause errors during reverse engineering.n It detects associations according to a heuristic process. The associations can be transformed either into graphical associations or into attributes and methods.n It does not check data types. The parser does not need to know data types.n It does not parse array initializers.Mapping the elementsTERM1="C++" TERM2="reverse engineering"TERM1="mapping" TERM2="in reverse engineering"TERM1="reverse engineering" TERM2="mapping"After parsing the header file, ObjectTeam maps the Java constructs to ObjectTeam elements, as shown in the following table:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Java ConstructionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam ElementCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class, with the following properties set:n On the Class tab, Class or Interface box is set to Class.n On the Class tab, Access and Modifier boxes are set based on class declaration.n On the Package tab, Source File and Package Statement boxes are set appropriately.COLNAME="1" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class, with the following properties set:n On the Class tab, Class or Interface box is set to Interface.n On the Class tab, Access and Modifier box are set based on interface declaration.n On the Package tab, Source File and Package Statement boxes are set appropriately.COLNAME="1" VALIGN="TOP" MOREROWS="0"ExtendsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class hierarchies that reflect how classes/interfaces extend one another.COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute and data type. The following attribute properties are set:n Attribute Access box of the Access tab.n Appropriate box on the Modifiers tab.n Appropriate box on the Throw tab.Note: The Java static modifier causes attribute name to be prefixed by $.COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and parameters. The following operation properties are set:n Appropriate boxes on the Access tab.n Appropriate boxes on the Modifiers tab.Note: The Java static modifier causes operation name to be prefixed by $.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConstructorCOLNAME="2" VALIGN="TOP" MOREROWS="0"$create operation.Customizing reverse engineeringThe customization file tcl\rev_assoc.tcl in the Java module defines the reverse engineering rules used to detect associations and attribute accessors. You can modify reverse engineering by editing this file, as described in the ObjectTeam Customization Guide.Warning: This customization file is not used unless you select the Reverse Engineer Associations option during.ID="14059"Creating the DiagramsTERM1="diagrams" TERM2="draft, in reverse engineering"TERM1="reverse engineering" TERM2="draft diagrams"IntroductionAfter mapping the Java constructs to ObjectTeam elements, reverse engineering creates the CDs and CDMs that define the ObjectTeam elements. It creates the following CDs:n One or more CDs to show the class hierarchyn One or more CDs to show the associations among the classesNaming conventions for CDsEach CD is named for the primary class in it, for example, Class1. The word Tree is appended to the name of each CD that defines part of the class hierarchy, for example, TestClass1Tree.How many diagrams are createdThe number and complexity of the CDs created by reverse engineering depend largely on the following:n The files that you select for reverse engineering, particularly the number and complexity of classes defined in them.n The reverse engineering options that you select, particularly whether you choose to reverse-engineer associations.ID="10252"Options for reverse engineeringObjectTeam displays the following dialog box prompting you to select the options that you want to use:FILENAME="00691.unk" ORIGFILE="pics/reoption.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javaeng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box):COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Prefix used to name each generated CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only class structure is generated)n Only CDMs (only class features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, ObjectTeam creates a separate reference CD for each class that exceeds the maximum size. The class is folded in all diagrams other than the reference diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class. When a class exceeds this size, it is folded.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree. When a class hierarchy exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram. When a diagram exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Reverse Engineering Associations is selected, specifies the algorithm reverse engineering uses to create the CDs that show the associations:n Simple. Creates a CD for each class that has associations.n Grid. Creates a CD for each n classes, where n is the number specified in the Number of Classes per CD field.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of Classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Placement Algorithm is Grid, specifies the number of unfolded classes per CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"Reverse Engineer AssociationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering examines the attributes and accessor methods defined on each class to determine the associations among classes. It then creates CDs that show those associations.CDs that show the class hierarchyFollowing are the guidelines used to draw the CDs that show the class hierarchy:n ObjectTeam creates a CD for each top-level parent class. The CD contains the parent class and all subclasses.n If a class has multiple parent classes, ObjectTeam creates a CD for each parent. The CD for the first parent class contains the parent class, the child class, and all subclasses of the child class. The CD for each of the other parent classes contains only the parent class and the child class; in these diagrams, the child class is folded.FILENAME="00692.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/java/javaeng.fm5.mif"CDs that show associationsIf you select the Reverse Engineer Associations option in the Reverse Engineer dialog box, ObjectTeam creates CDs that show the associations. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box. Both algorithms are described in the sections following.If you do not select the Reverse Engineer Associations option, ObjectTeam shows associations only as attributes and accessor methods in the appropriate classes.Note: Bidirectional associations are reverse-engineered as unidirectional associations.Simple algorithmIf you select Simple in the Placement Algorithm field of the Reverse Engineer dialog box, ObjectTeam draws the CDs as follows:1 Creates a CD for each class that has one or more associations. 2 Unfolds the main class in each CD and folds all associated classes.ExampleReverse engineering the MolecureViewer example from the JDK 1.1 creates a number of CDs and CDMs. The following CDs, created by the simple algorithm, show the associations among classes:FILENAME="00693.unk" ORIGFILE="pics/resimp1.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javaeng.fm5.mif"Grid algorithmIf you select Grid in the Placement Algorithm field of the Reverse Engineer dialog box, ObjectTeam draws the CDs as follows:1 Divides all classes into groups of n, where n is the number specified by the Number of Classes per CD field of the Reverse Engineer dialog box. The algorithm attempts to group associated classes.Tip: To create a diagram that contains all classes, specify n as the number of classes being reverse engineered (or greater).2 For each group of classes, creates a CD and adds the classes (unfolded) to the CD. To position the classes, ObjectTeam uses a uniform grid whose squares are the size of the largest class in the group and its longest association.3 For each class in each CD, draws all associations from the class to all associated classes. If an associated class is not in the CD, ObjectTeam adds it (folded) to the CD.ExampleReverse engineering the MoleculeViewer example from the JDK 1.1 creates a number of CDs and CDMs. The following CD, created by the grid algorithm, shows the associations among classes. (The classes in the generated CD were repositioned so that the illustration would fit on one page.)Note: The Atom class is not associated with any other class. However, during reverse engineering, the Number of Classes per CD box in the Reverse Engineering dialog box was set to 7. The Atom class was added to the diagram as the seventh class.FILENAME="00694.unk" ORIGFILE="pics/regrid.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javaeng.fm5.mif"ID="10482"Running Reverse EngineeringIntroductionThis section describes how to run reverse engineering.How to reverse engineerΣ To reverse-engineer .java files:1 Move to the system level in the Object Design phase.Note: Typically, you reverse engineer into an empty system. However, name conflicts can still occur because classes are created with scope Phase.2 Select Utilities | Reverse Engineer Java.The Reverse Engineer Java dialog box appears (see REFID="16372" TYPE="XREF-TEXTCOPY"Files for reverse engineering), prompting you to select the files to be reverse-engineered.3 Select the files that you want to reverse engineer, and then click OK.A second Reverse Engineer Java dialog box appears (see REFID="10252" TYPE="XREF-TEXTCOPY"Options for reverse engineering), prompting you to select the options that you want to use. 4 Select the options and, then click OK.ObjectTeam reverse-engineers the selected file, reporting the results in a Monitoring window. The generated CDs display the class hierarchy defined in the selected files. Each class includes its attributes, operations, and (if the Reverse Engineer Associations option is selected) associations.ID="16372"Files for reverse engineeringObjectTeam prompts you to select the .java files to reverse-engineer. The following illustrations show the Windows and UNIX dialog boxes.Tip: Reverse engineering creates CDs and CDMs based on the files that you select. Therefore, it is good practice to reverse-engineer all related files at the same time. For example, when reverse engineering a class library, select all .java files used to define the class library.WindowsIn Windows, use the File Name and Files of Type boxes to filter the list of files displayed.FILENAME="00695.unk" ORIGFILE="pics/reveng1w.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javaeng.fm5.mif"UNIXIn UNIX systems, use the Filter field and Filter button to filter the list of files displayed.FILENAME="00696.unk" ORIGFILE="pics/reveng1u.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javaeng.fm5.mif"ID="27974"Round-Trip EngineeringIntroductionRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated source files. Use round-trip engineering to update the ObjectTeam model before you regenerate the source files.PurposeThe code generator generates code based on the ObjectTeam model. If you do not update the ObjectTeam model before regenerating the source files, the new source files do not include your changes. ExampleYou generate Java files and then add a new method to a generated source file. If you do not update the ObjectTeam model, it does not contain the operation that corresponds to the method. When you regenerate the source file, the code generator assumes that you deleted the operation from ObjectTeam and does not include the now obsolete method in the newly generated source file.Changes captured by round-trip engineeringIf you have made the following types of changes to the generated source file, ObjectTeam updates the model based on those changes:n Added or deleted attributes, or edited attribute declarationsn Added or deleted methods, or edited method declarationsWhat happens during round-trip engineeringThe following table shows the steps that occur during round-trip engineering:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"You select the generated (edited) source files that you are interested in and start round-trip engineering.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam parses the selected files and compares the information in the files with the information in the ObjectTeam model.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"For each difference it finds, ObjectTeam proposes an action and prompts you for confirmation. For example:In class "Account": delete attribute "Address"?COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Based on your answers, ObjectTeam updates the ObjectTeam model.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11498" TYPE="XREF-TEXTCOPY"Parsing the Files 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15358" TYPE="XREF-TEXTCOPY"Running Round-Trip Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16Parsing the Generated (Edited) Source FilesIntroductionThis section describes which changes to the generated source files that round-trip engineering captures. ID="27501"Changes to attributesYou can add, delete, and modify variable declarations in a generated .java file. However, all variable declaration statements must be specified beneath the following comment in the generated source file:// Data attributesAttribute declarations not in this section of the generated source file are ignored by.Attribute Access propertyObjectTeam determines the value of an attribute's Attribute Access property based on the methods specified beneath the following comment in the generated source file:// Attribute accessorsFor example, if you add an attribute declaration to the source file but do not add attribute access methods, ObjectTeam sets the Read and Write values of the attribute's Attribute Access property to None.Delete attribute accessorsIf you delete an attribute, delete the attribute accessors for that method also. ObjectTeam does not delete them when it deletes an attribute.ID="34671"Changes to methodsYou can add, delete, and modify method declaration statements in a generated .java file. However, these statements must be specified beneath the following comment in the generated source file:// MethodsMethod declarations not specified in this section of the generated source file are ignored by round-trip engineering.You can change the code in the body of any method. Such changes are ignored by round-trip engineering, but are preserved by the code generator when you regenerate the source files.Overloaded methodsIf you have multiple methods with the same name, do not delete one and change the declaration of another at the same time. Delete one, run round-trip engineering, change the declaration of the other, and run round-trip engineering. This approach prevents potential errors.Changes to constructorsDefault constructorThe default constructor appears beneath the following comment in the generated source file:// Default constructorYou can add and remove key attributes from the parameter list of the default constructor. In the CD, a key attribute is prefixed with an asterisk. If you remove an attribute from the parameter list of the default constructor, ObjectTeam removes the asterisk from the attribute name in the CD. If you add an attribute to the parameter list of the default constructor, ObjectTeam adds an asterisk to the attribute name in the CD.User-defined constructorUser-defined constructors appear beneath the following comment in the generated source file:// User defined constructorsYou can add, delete, and edit user-defined constructors as you can any other method (see REFID="34671" TYPE="XREF-TEXTCOPY"Changes to methods).ID="15358"Running Round-Trip EngineeringCustomizing round-trip engineeringThe customization file roundtrip.roundtrip in the M4_home/etc directory controls what actions ObjectTeam proposes, as well as the default answers it supplies. To examine or modify the current behavior of round-trip engineering, examine or modify the customization file.How to run round-trip engineeringΣ To run round-trip engineering:1 Move to the system level of the Implementation phase.2 Select the .java files on which you want to run round-trip engineering.3 Select Utilities | Round Trip Selected.ObjectTeam opens the Roundtrip Selected Files dialog box, compares the classes in the generated files to the classes in the Object Design phase, and then begins proposing actions and prompting you for confirmation.FILENAME="00697.unk" ORIGFILE="pics/rndtrip2.gif" ORIGTYPE="X" ORIGDOC="../../sources/java/javaeng.fm5.mif"4 Use the buttons to respond to the proposed actions:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ButtonCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"YesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Make the proposed change.COLNAME="1" VALIGN="TOP" MOREROWS="0"NoCOLNAME="2" VALIGN="TOP" MOREROWS="0"Do not make the proposed change.Note: When you regenerate the .java file, the change to the file will be lost.COLNAME="1" VALIGN="TOP" MOREROWS="0"Default to AllCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use the default response for all remaining questions.COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cancel all changesObjectTeam updates the model based on your responses.Chapter 5 Customizing ID="22956"Java Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for JavaIntroductionExpert users can extend the Java code generator by modifying the Tcl scripts that are supplied in the M4_home\tcl\l_java directory. Editing these Tcl scripts, or writing new ones that add functionality to the code generator, requires a thorough knowledge of the OOPL model structure, Tcl commands, and the ObjectTeam Shell.Modifying Tcl proceduresYou can adapt existing methods of Object Tcl classes that are used in the code generation by redefining them in a user-defined Tcl file.Warning: Cayenne Software cannot support any provided Tcl scripts that you modify. Therefore, the scripts and their structures are not documented. If you choose to modify any Tcl scripts or procedures, you must have a thorough knowledge of the script's structures to avoid introducing errors. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22291" TYPE="XREF-TEXTCOPY"How Tcl is Used in the Code Generation 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15580" TYPE="XREF-TEXTCOPY"Customizing Tcl Scripts Used for Code Generation 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23ID="22291"How Tcl is Used in the TERM1="Tcl" TERM2="in ObjectTeam environment"Code GenerationSEE="Tcl" TERM1="Tool Command Language"IntroductionThis chapter provides information on the use of Tcl (Tool command language) in ObjectTeam. It does not provide an introduction to Tcl itself. If you want to become familiar with Tcl, try the following introductory book:John K. Ousterhout, Tcl and the Tk Toolkit. (Reading, Massachusetts: Addison---Wesley Publishing Company, 1994).What is Tcl?Tcl (Tool command language) is an interpretive command language that resembles C. By default all arguments are passed as strings. These strings are C-compatible. Tcl consists of:n A library of C proceduresn An interpretern The Tcl coreThe Tcl core is a simple language that can be completely programmed. It provides a collection of commonly used features such as these:n Variablesn Conditional and looping commandsn Proceduresn Associative arraysn Listsn Expressionsn File manipulationHow is Tcl used in the code generation?When the ObjectTeam shell executes a Tcl script file, it translates information from the repository, internal models, and TERM1="code generation model" TERM2="and Tcl"TERM1="model" TERM2="code generation"code generation models into source code. The following illustration shows this process schematically:FILENAME="00698.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/java/javatcl.fm5.mif"Types of Tcl usedThe methods in the default Tcl script files used for code generation use different levels of Tcl.COLS="2"COLNAME="1" COLWIDTH="168p"COLNAME="2" COLWIDTH="280p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"descriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Standard TclCOLNAME="2" VALIGN="TOP" MOREROWS="0"Refer to general Tcl documentation for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to Tcl proceduresCOLNAME="2" VALIGN="TOP" MOREROWS="0"These procedures are stored in Tcl files. They become available when the file in which the procedure is defined is sourced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to methods of classesin the ObjectTeam modelsCOLNAME="2" VALIGN="TOP" MOREROWS="0"The classes of the ObjectTeam models (including the OOPL model and SQL model) are documented in ObjectTeam Repository Interface Guide. COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in classesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Besides methods of classes belonging to the ObjectTeam models, methods belonging to other built-in classes can also be called. Refer to the ObjectTeam Repository Interface Guide for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in ObjectTeam commandsCOLNAME="2" VALIGN="TOP" MOREROWS="0"These commands are built-in to otsh and otk. You can use these commands, but you cannot edit or view them like Tcl procedures. Refer to the ObjectTeam Repository Interface Guide for details. ID="35220"Which Tcl files are used?Tcl procedures used for code generation are stored in Object Tcl script files. During code generation, these scripts are interpreted and executed by the ObjectTeam shell (otsh). When you use Utilities | Import From Previous Phase in the Browser at the system level of the Implementation phase, otsh interprets the Object Tcl code in the Tcl file tcl\l_java\javimport.tcl. In the implementation of these methods, Tcl methods from other classes are called.Most of the Tcl script files that the Java code generator uses are located under the M4_home directory in tcl\l_java\*.tcl. The Tcl script files fstorage.tcl and caynutil.tcl in the tcl directory contain utility procedures that are also used.ID="15580"Customizing Tcl Scripts Used for TERM1="code generation" TERM2="adapting"Code GenerationUser-defined Tcl filesBecause of the open character of Tcl, you can redefine the existing Object Tcl methods of the Tcl scripts, if you want to adapt the code generation to your needs and circumstances. You can include your own properties, control flow keywords, and section keywords in the code generation this way. You can even build your own code generator by creating your own Tcl scripts. Warning: Note that existing Object Tcl classes cannot be redefined. However, you can add new, user-defined Object Tcl classes.ID="37212"Where to store user-defined Tcl proceduresThe Tcl script files used for the default code generation are stored in the file system. They can be found in the following directory:M4_home\tcl If you want to adapt the default code generation, you can edit the Tcl files in this directory, but it is better to modify copies of the original files. There are several ways available to make otsh use user-defined files. These ways are briefly discussed in this section. You can overrule existing Tcl files or you can extend them by creating new Tcl files with new user-defined Tcl procedures and methods, or redefinitions of existing methods. The ways to do that are also covered in this section.Storing Tcl files in the same System as where the code is generatedOne of the available file types on the system level of the Implementation phase is Tcl. You can create new files of this type and redefine methods of existing Object Tcl classes in such a file. During code generation, otsh sources all files of the type Tcl in the current system, regardless of their names.Σ To create such a Tcl file:1 Open the implementation system.2 Select File | New | External File Version.A dialog box of file types appears.3 Select Tcl as the file type, specify a name for the Tcl file (without the extension .tcl), and click OK.You can enter the name of an existing Tcl file used for code generation or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.4 Edit and save the new Tcl file.The next time you generate code (by using Utilities | Import From Previous Phase) the new Tcl file is sourced by otsh.Storing Tcl files in a system TclIf you do not want to store user-defined Tcl files in the same system in which your code is generated, you can create a system called Tcl and store your user-defined Tcl files in there. Any Tcl file that is defined in such a system is sourced during code generation. You can use this mechanism for user-defined Tcl files or for user-defined Tcl files that are meant to replace existing ones.To store files in a Tcl system:1 Make sure the Browser is on the Implementation phase level.2 Select File | New | System Version.3 Type Tcl as the system name, being sure to use a capital T.4 Open the system Tcl.5 Select File | New | External File Version.A dialog box of file types appears.6 Select Tcl as the file type, specify a name for the Tcl file (without the extension .tcl), and click OK.You can enter the name of an existing Tcl file used for code generation or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.7 Edit and save the new Tcl file.The next time you generate code, the new Tcl file is sourced by otsh.TERM1="Tcl" TERM2="script files, testing"Testing Tcl filesIf you want to test a customized Tcl file before you add it to a system in ObjectTeam, you can create the Tcl file in your file system and feed it to otsh outside the ObjectTeam environment. See the ObjectTeam Customization Guide for details on how to start otsh from the command line.When the Tcl file has reached its final state, you can decide to add it to a system in ObjectTeam, as described above. Appendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for JavaJava code generation propertiesThe following table lists the properties that affect Java code generation. These are available in the CD in the Object Design phase.COLS="4"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="99p"COLNAME="3" COLWIDTH="117p"COLNAME="4" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="32402" TYPE="XREF-TEXTCOPY"Specifying Access PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivatePrivate ProtectedNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35486" TYPE="XREF-TEXTCOPY"Specifying Accessibility of Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="10531" TYPE="XREF-TEXTCOPY"Specifying Accessibility of MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute Access MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21279" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class or InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"ExternalClassInterfaceCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17596" TYPE="XREF-TEXTCOPY"Specifying Class or Interface GenerationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Comment TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"ToEndOfLineBlockDocumentCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="20849" TYPE="XREF-TEXTCOPY"Specifying CommentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="29648" TYPE="XREF-TEXTCOPY"Specifying Comments for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="36331" TYPE="XREF-TEXTCOPY"Specifying Comments for MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="13312" TYPE="XREF-TEXTCOPY"Mapping Qualified AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ExceptionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21783" TYPE="XREF-TEXTCOPY"Specifying Exceptions in Method DeclarationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Import On-DemandsCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="38413" TYPE="XREF-TEXTCOPY"Defining Java Program StructureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Import PackagesCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="38413" TYPE="XREF-TEXTCOPY"Defining Java Program StructureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Import TypesCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="38413" TYPE="XREF-TEXTCOPY"Defining Java Program StructureCOLNAME="1" VALIGN="TOP" MOREROWS="0"ModifiersCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"NoneFinalAbstractCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="33315" TYPE="XREF-TEXTCOPY"Specifying ModifiersCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"FinalTransientVolatileCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="18563" TYPE="XREF-TEXTCOPY"Specifying Modifiers for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"AbstractFinalNativeSynchronizedCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19978" TYPE="XREF-TEXTCOPY"Specifying Modifiers for MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"StaticTransientCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple Associations on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'40COLNAME="1" VALIGN="TOP" MOREROWS="0"Package StatementCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="38413" TYPE="XREF-TEXTCOPY"Defining Java Program StructureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Source FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="38413" TYPE="XREF-TEXTCOPY"Defining Java Program StructureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Text COLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="20849" TYPE="XREF-TEXTCOPY"Specifying CommentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="29648" TYPE="XREF-TEXTCOPY"Specifying Comments for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="36331" TYPE="XREF-TEXTCOPY"Specifying Comments for MethodsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21964" TYPE="XREF-TEXTCOPY"Mapping Simple AssociationsNewEra Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraAbout this manualObjectTeam provides code generation tools that enable you to generate object-oriented code for a range of object-oriented programming languages. This guide focuses on NewEra as the target language. Business experts, application designers, and system developers can work together using these tools to efficiently analyze, design, and identify solutions to business problems. The NewEra Code Generator simplifies implementation and programming by automatically converting design data from Class Diagrams that you've previously created and specified with NewEra-specific properties into NewEra source code.The ObjectTeam Code Generation Guide for Informix NewEra contains information specific to Version 2.11 of the NewEra programming language. This includes information for setting up, configuring, and specifying code generation details in Class Diagrams that you will use to generate NewEra code. Refer to the ObjectTeam Modeling Guide for general information about the code generation process and for installation instructions.PrerequisitesThis guide is intended for experienced users of ObjectTeam and the analysis and design method it supports. It is also intended for experienced C++ programmers who have some familiarity with NewEra programming. This guide gives you information on how to map ObjectTeam diagrams to NewEra code; it does not teach you the NewEra language.To customize or extend the capabilities of the NewEra code generator, you must have a thorough understanding of the ObjectTeam Shell, the Object-Oriented Programming Language (OOPL) model structure, and the Tool Command Language (Tcl) commands.Chapter 1 ID="19722"Preparing Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraIntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.NewEra module requiredThe ObjectTeam module NewEra Code Generation provides the menu items, the properties and the Tcl code required to use the NewEra Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="15740" TYPE="XREF-TEXTCOPY"Chapter 2, Building NewEra Applications, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15756" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24561" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00699.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/ne/neobjd.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="27879" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to NewEra Non-Persistent Code, REFID="23603" TYPE="XREF-TEXTCOPY"Chapter 4, Mapping Modeling Data to NewEra Persistent Code, and REFID="16738" TYPE="XREF-TEXTCOPY"Chapter 5, Modeling the User Interface, describe how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 Building ID="15740"NewEra ApplicationsTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraIntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details that not specified in the model.Prerequisitesn The ObjectTeam module NewEra Code generation must be active from Object Design Phase and Implementation Phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="19722" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Steps in building a NewEra applicationThe following table provides an overview of the application development process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate NewEra files. During this step, ObjectTeam generates the application source code files on System level in the Implementation phase.Note: System level in the Implementation phase is fundamentally different from System level in other phases. The System files in the Implementation phase are source files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Configure the NewEra environment, ensuring proper installation of the NewEra environment (Application Builder, Window Painter, and so on).COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Edit the source files. ObjectTeam generates a large portion of your application code, but not all of it. In this stage, you finish writing the application code.Changes you make to the source files are not lost. When you regenerate the source files, the code generator recognizes your changes and transfers them to the newly generated files.TERM1="code regeneration"TERM1="regeneration" TERM2="code" TERM1="otsh" TERM2="code regeneration"COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Define the target database. This step is only necessary if your CDs contain persistent classes. Persistent classes are created as tables in a relational database. In this step, you create or select the database.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Complete the generated wif template files using the NewEra Window Painter. This step is only necessary if your CDs contain GUI classesCOLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Build the executable or library using the NewEra Application Builder. If you built an executable, you can now run it.COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Test the executable or library. If necessary: correct the source files, the model, or both; regenerate the files; and return to step 6.Illustration of code generationThe following illustration shows how ObjectTeam generates code, including the names of the Tcl scripts that it uses. The CDs and CDMs shown at the top are in the Object Design phase.FILENAME="00700.tif" ORIGSEQ="6" ORIGTYPE="I" ORIGDOC="../../sources/ne/necodg.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27634" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35551" TYPE="XREF-TEXTCOPY"Generating NewEra Source FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your NewEra Environment 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19708" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37228" TYPE="XREF-TEXTCOPY"Defining a Target Database 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30084" TYPE="XREF-TEXTCOPY"Building the Executable or Library 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33638" TYPE="XREF-TEXTCOPY"Regenerating Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'24ID="27634"Components of Code GenerationTcl scripts for code generationThe scripts written for code generation retrieve information from the code generation models, format this information and write the results to source code files. Code generation models are built from the CDs in the Object Design phase.Persistent and non-persistent and codeObjects can be persistent or non-persistent:n The data of a persistent object survives the execution of its related program; that is, the object persists beyond the lifetime of a single program execution. The data for persistent objects is stored in a TERM1="data store" TERM2="permanent"permanent data store, such as a Relational Database Management System (RDBMS).n The data of a non-persistent object exists only during the execution of its related program.TerminologyClasses and code are not persistent or non-persistent. However, to simplify references to classes and code that are related to persistent and non-persistent objects, the ObjectTeam documentation uses the terms persistent classes, non-persistent classes, persistent code and non-persistent code. For example, non-persistent code refers to object-oriented language code (NewEra), and persistent code refers to the Data Definition Language (SQL) and the Data Manipulating Language (NewEra) code. TERM1="code generation" TERM2="persistent"TERM1="persistent code generation"Wifl codeBesides persistent and non-persistent code ObjectTeam can generate templates with wifl code. Wifl is the Window Intermediate Format Language that is used to define the Graphical User Interface of a NewEra application. These templates serve as initial wif files, which should be completed further in NewEra.TERM1="code regeneration"TERM1="regeneration" TERM2="code"Code TERM1="otsh" TERM2="code regeneration"regenerationCode generation is an automated process that generates NewEra, SQL and WIF template files. ObjectTeam ensures that n You can regenerate these files when you change your model.n Changes that you make to the generated files are preserved when you regenerate the files.For more information, see REFID="33638" TYPE="XREF-TEXTCOPY"Regenerating Code.TERM1="class library" TERM2="including in code generation"Class library integrationYou can include external class libraries in your design. Such an external class library is automatically included during the code generation. In addition, ObjectTeam helps you to understand and reuse existing class libraries through reverse engineering.For more information, see REFID="32714" TYPE="XREF-TEXTCOPY"Chapter 6, Reverse Engineering.ConfigurationThe non-persistent code that ObjectTeam generates could be any object-oriented programming language, but this guide focuses on NewEra. You can configure the settings of the default values that are applied when the design is transformed into the NewEra code.For more information, see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your NewEra Environment.ID="35551"Generating NewEra Source FilesResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create NewEra source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are NewEra files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. For each system that you select, ObjectTeam imports both the OOPL and SQL Models. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files. On System level, you can select whether to import the OOPL or SQL Model.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate source files on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate NewEra.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet.- Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files. For each system, ObjectTeam generates both the OOPL and SQL Models. (These models are described later in this section.)How to generate code on System levelΣ To generate (selected) source files for a system from System level of the Implementation phase:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate NewEra.A cascading menu appears.3 Select New, Selected, or All:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code. The Import New dialog box appears.FILENAME="00701.unk" ORIGFILE="pics/imprtnew.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necodg.fm5.mif"Select SQL to import the SQL Model or OOPL to import the OOPL Model, then select OK.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files. The following illustration shows the Monitor window after generating the OOPL Model.FILENAME="00702.unk" ORIGFILE="pics/imp_impl.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necodg.fm5.mif"Location of the source filesSource files are stored in the repository as external files. They are also written to the user_environment\system-name directory, where user_environment is the file path for your generated files. For more information on the user environment, see the ObjectTeam Project Management Guide.The following illustrations show how the source files appear in the Browser. The first illustration shows the source files after generating the OOPL Model and the second shows the source files after generating the SQL Model.FILENAME="00703.unk" ORIGFILE="pics/sf_oopl.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necodg.fm5.mif"FILENAME="00704.unk" ORIGFILE="pics/sf_sql.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necodg.fm5.mif"TERM1="user environment" TERM2="updating"TERM1="Update User Environment (Utilities menu)"Update user environmentUtilities | Update User Environment synchronizes your user environment with the repository. This can be particularly useful if you are working on two machines, and the user environment of each is set to a local drive. When you move between machines, you can use Utilities | Update User Environment to update the local drive of the current machine.ID="27397"Generating NewEra CodeIntroductionREFID="35551" TYPE="XREF-TEXTCOPY"Generating NewEra Source Files describes how to generate source files for systems in the Implementation phase. This section describes how ObjectTeam converts the OOPL model. TERM1="generating code" TERM2="import OOPL model"TERM1="code generation" TERM2="importing OOPL model"OOPL ModelThe OOPL Model, which is generated from the CDs in the Object Design phase, contains information used to generate code. The objects in this model are organized in such a way that code can be generated easily.For more informationThe ObjectTeam Programming Interface Guide provides a detailed description of the classes in the OOPL Model.How ObjectTeam converts the OOPL ModelTo convert the OOPL Model, the ObjectTeam Shell (otsh) executes the Tcl script TERM1="import.tcl"import.tcl. It loads the OOPL model into memory and translates the information into NewEra source code. The ObjectTeam shell recognizes elements such as classes, data types, associations and methods. The Tcl script import.tcl activates, among other things, the Tcl script TERM1="genne.tcl"genne.tcl, which contains Tcl procedures to retrieve information from the OOPL model and other internal models, format it and write it to the appropriate source files. genne.tcl uses other Tcl scripts that use other Tcl scripts as well, and so on.For more informationFor an overview of the Tcl scripts used for code generation, see REFID="36160" TYPE="XREF-TEXTCOPY"Chapter 7, Customizing Code Generation.Non-persistent codeThe NewEra code generator generates the following files for every non-persistent class in the CDs of the Object Design phase:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"class_name.4gl COLNAME="2" VALIGN="TOP" MOREROWS="0"NewEra source file containing internal details of a classCOLNAME="1" VALIGN="TOP" MOREROWS="0"class_name.4gh COLNAME="2" VALIGN="TOP" MOREROWS="0"NewEra header file containing the class definitionFor more informationSee REFID="27879" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to NewEra Non-Persistent Code, for more details.Persistent codeIf the CDs of the Object Design phase contain persistent classes, the NewEra code generator generates files with the same extension as for non-persistent classes, but with persistent code.For more informationSee REFID="23603" TYPE="XREF-TEXTCOPY"Chapter 4, Mapping Modeling Data to NewEra Persistent Code, for more details.Wifl codeIf the CDs of the Object Design phase contain GUI classes, the NewEra code generator generates the following file for every GUI class:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"class_name.wif COLNAME="2" VALIGN="TOP" MOREROWS="0"Window Intermediate File template containing initial code for the definition of graphical objectsFor more informationSee REFID="16738" TYPE="XREF-TEXTCOPY"Chapter 5, Modeling the User Interface, for more details.ExampleThe following example shows a non-persistent class from the CD and the matching NewEra 4gl and 4gh files that would be generated. Notice that the function PrintAmount still needs to be implemented.FILENAME="00705.unk" ORIGFILE="pics/acct.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necodg.fm5.mif"4gh file:CLASS Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION Account()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getAmount() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setAmount(newAmount INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION PrintAmount() RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE amount INTEGER END CLASS4gl file:-- Start user added include file section-- End user added include file sectionINCLUDE "Account.4gh"FUNCTION Account::Account()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End constructor user sectionEND FUNCTIONFUNCTION Account::!destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End destructor user sectionEND FUNCTIONID="32911"Generating SQL CodeIntroductionREFID="35551" TYPE="XREF-TEXTCOPY"Generating NewEra Source Files describes how to generate source files for systems in the Implementation phase. This section describes how ObjectTeam converts the SQL Model.TERM1="generating code" TERM2="import SQL model"TERM1="code generation" TERM2="importing SQL model"TERM1="importing" TERM2="SQL model"SQL ModelThe SQL Model, which is generated from the CDs in the Object Design phase, contains information used to generate code. It serves as the data model interface to the repository.For more informationThe ObjectTeam Programming Interface Guide provides a detailed description of the classes in the SQL Model.How ObjectTeam converts the SQL modelTo convert the SQL Model, the ObjectTeam Shell (otsh) generates SQL statements for all persistent classes in the CDs in the Object Design phase. It writes these statements to the following SQL script files:COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Script FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"createCOLNAME="2" VALIGN="TOP" MOREROWS="0"general script that activates the scripts: create_tables, create_procsCOLNAME="1" VALIGN="TOP" MOREROWS="0"create_procsCOLNAME="2" VALIGN="TOP" MOREROWS="0"SQL statements to create procedures that insert tuples in and delete tuples from the target databaseCOLNAME="1" VALIGN="TOP" MOREROWS="0"create_tablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"SQL statements to create database tablesCOLNAME="1" VALIGN="TOP" MOREROWS="0"dropCOLNAME="2" VALIGN="TOP" MOREROWS="0"general script that activates the scripts: drop_tables, drop_procsCOLNAME="1" VALIGN="TOP" MOREROWS="0"drop_procsCOLNAME="2" VALIGN="TOP" MOREROWS="0"SQL statements to drop database proceduresCOLNAME="1" VALIGN="TOP" MOREROWS="0"drop_tablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"SQL statements to drop database tablesID="40480"Configuring Your NewEra EnvironmentWhat is the NewEra environmentTERM1="NewEra" TERM2="configuring - environment"Configuring your NewEra environment means effectively that the source files of the class library lw4omtne (see REFID="18476" TYPE="XREF-TEXTCOPY"Class Library lw4omtne) are copied over to your user environment. You need to compile these source files using the NewEra Application Builder.While building your application, the NewEra Application Builder needs to link the classes of the class library lw4omtne with the classes in your application.What happens when you configure your NewEra environmentWhen you configure your NewEra environment, ObjectTeam carries out the following tasks:n The required source files for the specified class libraries are copied to the user_environment/src/lw4omtne directory, where user_environment is the file path for generated files, as described in the ObjectTeam Project Management Guide.n The required include files are copied to the user_environment/include directory.How to configure the NewEra environment:Σ To configure the NewEra environment:1 Move to Implementation Phase level, or System level in the Implementation phase.2 Select Utilities | Configure NewEra Environment.An Execution window similar to the following appears.FILENAME="00706.unk" ORIGFILE="pics/cnfneenv.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necodg.fm5.mif"3 Select the desired option.After you press the return key, the next question appears.How to compile the required class librariesAfter ObjectTeam has copied all the required files, you must compile the libraries. (These libraries are used to compile the source files generated by ObjectTeam.)Σ To compile the class libraries:1 Move to System level in the Implementation phase.2 Select Utilities | Execution Window.On Windows-based platforms, an MS-DOS window appears. On Unix-based platforms, start a new C-shell by entering the following command in the dialog box that appears: csh -f3 Move to the user_environment/src directory, which contains the source files for the class library.4 Make sure the environment variables necessary to run the NewEra Application Builder are set properly.5 Start the NewEra TERM1="compiling" TERM2="lw4omtne class library"TERM1="Application Builder"TERM1="lw4omtne"Application Builder and compile the class library.The selected class library is now compiled if your environment is set up properly. The compiled class library is stored in the current directory.6 Copy the compiled class library to the directory user_environment/lib.Adding new optionsObjectTeam uses the Tcl script TERM1="config_ne.tcl"config_ne.tcl to configure the NewEra environment. You can add new configuration options by creating a customization file with the name config_ne.tcl, as described in REFID="23768" TYPE="XREF-TEXTCOPY"Adapting NewEra Configuration Files.ID="19708"Editing (Generated) Source FilesIntroductionWhen code generation is successful, you can relate each generated source file to a specific class in a CD of the Object Design phase.4gh header filesThe generated header files contain all the necessary include statements and do not need editing. Therefore, when you regenerate a modified model, the 4gh files are overwritten.4gl source files for non-persistent classesThe generated 4gl files serve as framework files. They contain a signature for each function (generated from the methods of the classes in the CDs), but the function bodies are empty. You need to fill in the following:n TERM1="NewEra" TERM2="function"TERM1="NewEra" TERM2="code from method"TERM1="function" TERM2="body"The bodies of the functions that are defined in the classes. No function is generated for the method, instead, the following line is generated:-- Implement this function! --Note: You can fill in the function bodies manually or generate them automatically. To generate them automatically, in the CD, specify the method body as the value for the class property Tcl Method Implementation, as described in REFID="18195" TYPE="XREF-TEXTCOPY"Tcl Method Implementation Procedure.n The sections that are marked by comments similar to the following://Start ... user ... section//End ... user ... sectionSample 4gl source fileThe following is a sample 4gl file. User edits are highlighted.-- Start user added include file sectionINCLUDE "OwnDefs.4gh" -- End user added include file sectionINCLUDE "Account.4gh"FUNCTION Account::Account()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End constructor user sectionEND FUNCTIONFUNCTION Account::!destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End destructor user sectionEND FUNCTIONFUNCTION Account::PrintAmount() RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAY "The amount is", amount END FUNCTION-- Start user added source code section-- End user added source code section-- Do not delete this line -- regeneration end marker...4gl source file for persistent classesIn case of persistent classes, the 4gl source file contains functions that access and manipulate database tables. These functions contain all the necessary statements and do not need editing. When you regenerate a modified model, these source files are overwritten.Wif template fileWif template files contain Window Intermediate File Language code. You use the NewEra Window Painter to complete and beautify the Graphical User Interface of your application. SuperField objects are generated for every attribute defined in a GUI class. You have to supply the function bodies for user-defined SuperTable Buttons yourself. You can do that using the NewEra Window Painter.Whenever you save a wif file in the Window Painter, 4gh and 4gl files are generated by NewEra. These files are used by the Application Builder to build an application. Wif files are not used; they are just intermediate files.TERM1="source files" TERM2="editing generated -"TERM1="generated source file" TERM2="editing"How to edit source filesΣ To edit source files:1 Move to System level in the Implementation phase.2 In the Information area, double-click on the source file that you want to edit, or select the source file and then select File | Edit.The default Text Editor starts up with the corresponding file in the user environment.Note: You should edit generated wif template files with the NewEra Window Painter.Update diagramsDepending on the type of additions you have made to the source files, you may need to edit the CDs to reflect your changes. If you do so, be sure to use Check | Global Model to check the updated diagrams before regenerating the source files.ID="37228"Defining a Target DatabaseIntroductionIf your CDs contain persistent classes, the persistent classes must be defined as database tables in a Relational Database Management System (RDBMS). That database must then be selected when you execute the generated SQL scripts (see REFID="37874" TYPE="XREF-TEXTCOPY"SQL Generation).Defining a target databaseThe steps for defining a target database depend on whether you already have the database defined:n If you do not have a database defined, you must create the database, select it, then execute the generated SQL scripts to create the database tables. (The SQL scripts are generated when you generate the SQL Model in the Implementation phase.)n If you have a database, but it does not contain the required database tables, you must select the database and execute the generated SQL scripts to create the database tables.n If you already have a database that contains the required database tables, just select the database.Warning: Unlike on WindowsNT, you cannot create a new database on Windows95 using Database | Create Database... on the System level of the Implementation phase.Generated SQL scriptsWhen you generate the SQL Model in the Implementation phase, a number of SQL scripts are generated (REFID="32911" TYPE="XREF-TEXTCOPY"Generating SQL Code provides a list of the scripts). The SQL script to build the target database is create. This script activates other SQL scripts containing statements to create tables, procedures and rules.Database tables that are createdWhen you execute the SQL script create, database tables are created for the following persistent objects:n Classn Association as classn Aggregation as classn Link attribute boxn Qualified associationn Qualified aggregationn Many-to-many association (that is not an association as class)n Many-to-many aggregation (that is not an aggregation as class)For more informationSee REFID="23603" TYPE="XREF-TEXTCOPY"Mapping Modeling Data to NewEra Persistent Code for more detail.Available operations on a target databaseThe following entries are available under the Database menu:n Create Databasen Deselect Databasen Destroy Databasen Execute SQLn Select DatabaseHow to define a databaseTERM1="database" TERM2="building"TERM1="database" TERM2="building"Σ To define a target database:1 Move to System level in the Implementation phase.2 To create the database, select Database | Create Database.The ObjectTeam shell interprets the Tcl script tdbop.tcl, which creates the new database on the specified server if the RDBMS is configured properly. When you create a database, some initial actions are executed, such as the creation of empty system tables for the database and the registration of the database in the Relational Database Management System. 3 To select the database, select Database | Select Database.The Select Database dialog box appears:FILENAME="00707.unk" ORIGFILE="pics/seldtb.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necodg.fm5.mif"4 To create the database tables:a In the Information area, select the appropriate SQL create script.b Select Database | Execute SQL.The ObjectTeam Shell executes the SQL statements of the selected SQL script.Deleting a target databaseYou can also delete databases. To delete a database, select Database | Destroy Database.ID="30084"Building the Executable or LibraryPrerequisitesTo successfully compile and run an executable or library, you must have the following:n The required source code files (language-specific source files and header files); see REFID="27397" TYPE="XREF-TEXTCOPY"Generating NewEra Code.n All procedural code in the source files must be completely defined for the implementation of methods resulting from messages sent to a class (such as those that change attribute values, perform computations, or send messages to other classes); see REFID="19708" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files.n The environment properly configured for your chosen language; see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your NewEra Environment.TERM1="compiling" TERM2="source code"TERM1="Application Builder"How to compile a library or an executableFor building an application you have to use the tools offered by NewEra, such as the Application Builder. The input for the Application Builder are 4gl and 4gh files. For details on the Application Builder, refer to your NewEra documentation.Conduct a final check for errorsAs always, before you distribute anything, conduct a quality check of your work. If necessary, fix the source files, fix the ObjectTeam model, regenerate the code, and retest the executable.ID="33638"Regenerating CodeTERM1="code regeneration" TERM2="edited source file"Design changes and code changesObjectTeam supports incremental development. You can generate code from your models, edit that code, and regenerate the code without losing your changes. You can work with models during design and with code during implementation, shifting your focus between the two as necessary.It is, however, important that you make changes where appropriate.n Change the code when you are adding code that is not generated by ObjectTeam (for example, adding method bodies).n Change the model when you are changing the structure of the model (for example, if you are changing the class hierarchy or class associations), or when you are making global changes to the code (for example, if you are changing the name of a class, attribute, or operation).Editing generated 4gh filesThe generated header files are complete and do not need editing. Therefore, when you regenerate a 4gh file, the new 4gh file overwrites the existing one. Any changes you made to the original 4gh file are lost.Editing generated 4gl filesThe generated 4gl files are framework files that need some additions before they can be turned into an executable or library. Comments in the file indicate where you should add code, as described in REFID="19708" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files. When you regenerate a 4gl file, the code generator transfers the user-edited sections from the old file to the newly generated file. Note: The code generator preserves only the comment-delimited areas of the generated 4gl file. Changes you make to other areas of the generated 4gl file are lost when you regenerate the file.Editing the ObjectTeam modelIf you modify the ObjectTeam model, you typically regenerate the 4gh and 4gl source files. As described above, regenerating the 4gh file overwrites the original file and regenerating the 4gl file preserves your changes to the original file. Changes to generated wif files are also preserved.If, in the ObjectTeam model, you rename, delete, or change the signature of an operation, the matching function in the generated 4gl file is no longer correct. ObjectTeam preserves the original function, however, you must edit the generated file to correct the code. n When you rename or delete an operation, the function in the generated 4gl file is marked as OBSOLETE_CODE. In this way, the code generator preserves the function in case you want to rename it or move it to another class.FILENAME="00708.tif" ORIGSEQ="34" ORIGTYPE="I" ORIGDOC="../../sources/ne/necodg.fm5.mif"n When you change the signature of an operation, the function in the generated 4gl file is marked as OLD_CODE. This allows you to easily find and edit the affected functions.FILENAME="00709.tif" ORIGSEQ="37" ORIGTYPE="I" ORIGDOC="../../sources/ne/necodg.fm5.mif"Warning: You must remove OLD_CODE and OBSOLETE_CODE sections before you can regenerate the 4gl file.Definition of function signatureA function signature is the heading of the function. For example:FUNCTION Account::PrintAmount() RETURNING VOIDWarning: The code generator does not recognize changes you may have made to the the return type.How to regenerate source code filesΣ To regenerate one or more 4gh, 4gl or wif files:1 Move to the System level of the Implementation phase.2 Select the files that you want to regenerate.3 Select Utilities | TERM1="Import From Previous Phase" TERM2="Selected"Generate NewEra | Selected.ObjectTeam opens a Monitor window for displaying log messages, then imports the files.For more informationSee REFID="35551" TYPE="XREF-TEXTCOPY"Generating NewEra Source Files for more information about the Utilities | Generate NewEra menu item.Chapter 3 ID="27879"Mapping Modeling Data to NewEra Non-PersistentTERM1="code generation" TERM2="non-persistent"TERM1="non-persistent code generation" TERM2="NewEra"TERM1="code generation" TERM2="NewEra"TERM1="NewEra" TERM2="code generation" CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraTERM1="4gh file" TERM2="generating (non-persistent)"TERM1="generating" TERM2="4gh file (non-persistent)"TERM1="4gl file" TERM2="generating (non-persistent)"TERM1="generating" TERM2="4gl file (non-persistent)"IntroductionTERM1="4gl file" TERM2="generating (non-persistent)"TERM1="4gh file" TERM2="generating (non-persistent)"This chapter explains how particular classes and class specifications result in particular parts of code. The first section of the chapter explains some principles of the code generation process. The next sections describe the relationship between class specifications and the generated code. The final section describes generating code for special classes, which follows a different pattern.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23588" TYPE="XREF-TEXTCOPY"Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21485" TYPE="XREF-TEXTCOPY"Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18392" TYPE="XREF-TEXTCOPY"Operations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24711" TYPE="XREF-TEXTCOPY"Constructor 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26001" TYPE="XREF-TEXTCOPY"Destructor 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'33COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38687" TYPE="XREF-TEXTCOPY"Generalizations (Inheritance) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'34COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34119" TYPE="XREF-TEXTCOPY"Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'36COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33064" TYPE="XREF-TEXTCOPY"Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'47COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33738" TYPE="XREF-TEXTCOPY"Special Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'52ID="23588"ClassesWhat is non-persistent code generationCode generation in ObjectTeam is the process of translating diagrams into program code. The ObjectTeam Shell (otsh) translates the CDs and their related CDMs into source and header files. Code generation involves the following steps:n The Tcl interpreter otsh (ObjectTeam Shell) translates the CDs and the CDMs that are stored in the repository into a Code Generation model.n This Code Generation model is translated into source code.During design, you define a class more precisely by specifying its features:FILENAME="00710.unk" ORIGFILE="pics/authbook.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Example CDGenerating code for a (non-persistent) class symbol from a CD usually results in one 4gh file and one 4gl file.The CD depicted below is very simple; it consists of only one class for which one attribute and one method is specified:FILENAME="00711.unk" ORIGFILE="pics/author.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Example 4glThe 4gl file that is generated from this CD contains the following code:-- Start user added include file section-- End user added include file section INCLUDE "Author.4gh"FUNCTION Author::Author(i_name CHAR(*))name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET name = i_namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End constructor user sectionEND FUNCTIONFUNCTION Author::!destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End destructor user sectionEND FUNCTIONFUNCTION Author::makeNewName() RETURNING CHAR(*)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Implement this function!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--END FUNCTION-- Start user added source code section-- End user added source code section-- Do not delete this line -- regeneration end markerFUNCTION Author::getName() RETURNING CHAR(*)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURN nameEND FUNCTIONFUNCTION Author::setName(newName CHAR(*)) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET name = newNameEND FUNCTIONExample 4ghThe 4gh file that is generated from this CD contains the following code:CLASS Authorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION Author(i_name CHAR(*))name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy() name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getName() RETURNING CHAR(*)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setName(newName CHAR(*)) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC SHARED FUNCTION makeNewName() RETURNING CHAR(*) name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE name CHAR(40)END CLASSIn this sectionThis section describes the class properties that affect non-persistent NewEra code generation.COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39909" TYPE="XREF-TEXTCOPY"Class Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5ID="39909"Class PropertiesIntroductionYou can specify a number of properties for classes that influence the (non-persistent) code generation. Properties are specified in CDs.ID="10851"How to specify propertiesΣ To specify a property:1 Select one (or more) classes in a CD of the ObjectDesign phase.2 Select Item | Edit Properties.The Edit Properties dialog box appears.3 Select the object whose properties (class, data attribute, operation, data type, generalization, association) you want to edit.If all the following conditions are true, you must click on Define Item to proceed:- There are no attributes or properties specified for the selected class.- The scope of the class is Phase and the class does not exist anywhere else in the current phase.- The scope of the class is System and the class does not exist anywhere else in the current system.4 Select the Text tab to edit the property Free Text or select the Misc tab to edit all the other available properties. For some objects even more tab pages exist.5 Fill in the properties and save them by clicking OK.Which class properties can you specifyThe following class properties affect non-persistent code generation:n REFID="36796" TYPE="XREF-TEXTCOPY"Free Textn REFID="12066" TYPE="XREF-TEXTCOPY"Persistentn REFID="12344" TYPE="XREF-TEXTCOPY"External Include Listn REFID="18549" TYPE="XREF-TEXTCOPY"External Class SourceThese properties are briefly discussed on the following pages.TERM1="free text" TERM2="property"ID="36796"Free TextWhat you specify as free text appears as comment lines in the generated 4gh file.TERM1="Persistent" TERM2="property"ID="12066"PersistentUse this property to specify a class as being a persistent class. By default, a class is non-persistent. The generated code discussed in this chapter only applies to non-persistent classes. For more information:Persistent code is discussed in REFID="23603" TYPE="XREF-TEXTCOPY"Chapter 4, Mapping Modeling Data to NewEra Persistent Code.TERM1="external include list" TERM2="property"ID="12344"External Include ListBy default, a generated 4gl file contains an INCLUDE statement for the 4gh file generated for the same class. However, if you want to include another header file in the source file, you can specify it through the property External Include List. If you want to specify more than one header file, separate the list of files with commas:FILENAME="00712.unk" ORIGFILE="pics/prpextls.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"4gl file:/ Start user added include file section// End user added include file section#include <\include\StringHash.4gh>#include <\include\TemplConf.4gh>...TERM1="external class source" TERM2="property"ID="18549"External Class SourceIt can be useful to model classes for which source files and header files are already available.With the property External Class Source, you can specify the name of a 4gh file (and the name of a 4gl file), separated by commas. During code generation, the contents of these files are copied to the files class_name.4gh and class_name.4gl, respectively. If you specify only one file name, the contents of this file is copied to the file class_name.4gh.The following figure shows an example of a value for the property External Class Source:FILENAME="00713.unk" ORIGFILE="pics/prpextcl.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Warning: The contents of the first file is always copied over into the file classname.4gh, the contents of the second, if specified, into classname.4gl. So if you specify a 4gh file after a 4gl file, the contents of the 4gh file is copied into classname.4gl and the contents of the 4gl file into classname.4gh.You can specify the entire path of the file name(s), but you can also specify only the file names and include the directory these files are stored in in the search path. You can customize this search path by editing the value for the global variable exsrc_searchpath in the customization file ne_config.tcl For more informationSee ObjectTeam Customization Guide for details on customization files.Σ To change the search path:1 Open up the pseudo-object <customization files> on the browser level of your choice.2 Select File | New | Customization File Version...The New Customization File Version dialog box appears.3 Enter the following file name in the field Customization File: ne_config.tcl.4 Click the Edit button.The text editor starts up.5 Import the corporate customization file ne_config.tcl into the current file. This file is stored in the directory M4_home\modules\newera\tcl.Somewhere in this file the following piece of code occurs:# directory search path for external sources# could be a list separated by a search path separatorglobal exsrc_searchpath# example usage:# set exsrc_searchpath "c:;c:\\temp"You need to edit the last line to customize the search path.6 Edit the following line:# set exsrc_searchpath "c:;c:\\temp"Remove the hatch mark, used for comments in Tcl, and specify your own search path. If you are including more than one search directory, use semicolons to separate them.7 Save the file.You can now specify any file that resides in the specified search directory ss External Class Source property, without having to specify its absolute path.TERM1="data attribute" TERM2="in non-persistent code generation"ID="21485"Data AttributesSyntaxUse the following syntax when you specify the TERM1="data attribute" TERM2="syntax"data attributes of a class:FILENAME="00714.tif" ORIGSEQ="7" ORIGTYPE="I" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Generated NewEra constructionsTERM1="NewEra" TERM2="code from data attribute"The following NewEra constructions and functions are generated for a data attribute:COLS="3"COLNAME="1" COLWIDTH="136p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="102p"COLNAME="1" VALIGN="TOP" MOREROWS="0"NewEraCOLNAME="2" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="3" VALIGN="TOP" MOREROWS="0"RemarkCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="member data"TERM1="class feature" TERM2="member data"Member dataCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Always privateCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="member function" TERM2="data attribute"get member functionCOLNAME="2" MOREROWS="1" VALIGN="TOP"Private, protected or public depending on the property Attribute AccessCOLNAME="3" MOREROWS="1" VALIGN="TOP"COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="member function" TERM2="set"TERM1="class feature" TERM2="member function"set member functionClass featureA dollar sign ($) before a data attribute name indicates a class feature. This results in the generation of an attribute with the leading NewEra keyword SHARED, indicating it is a shared data member.The header file generated for a class containing one class feature looks like this:FILENAME="00715.unk" ORIGFILE="pics/dacl1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classA.4gh:CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION classA()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC SHARED FUNCTION getAtt1() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC SHARED FUNCTION setAtt1(newAtt1 INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE SHARED VARIABLE att1 INTEGER END CLASSDerived attributeA forward slash (/) before a data attribute name indicates a derived attribute. However, these forward slashes are ignored by the NewEra code generator.Data typesYou can TERM1="data attribute" TERM2="specifying data type"specify two kinds of data types:TERM1="data type" TERM2="standard"n A standard type, as defined in the customization fileM4_home\etc\t_inf\l_ne\stand_types.n Other types defined as classes in a CD.Initial valueThe initial value of a data attribute is used to assign a value to the data member. If the object initialization parameters of the constructor are automatically generated (see REFID="24711" TYPE="XREF-TEXTCOPY"Constructor) this assignment is generated in the body of the constructor:FILENAME="00716.unk" ORIGFILE="pics/dacl2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"...FUNCTION classA::classA()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET att1 = 60name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End constructor user sectionEND FUNCTION...In this sectionThis section describes the properties that can be specified for data attributes, then provides examples of how data attributes are translated into NewEra code:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29548" TYPE="XREF-TEXTCOPY"Data Attribute Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25712" TYPE="XREF-TEXTCOPY"Examples: Data Attributes and NewEra 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="29548"Data Attribute PropertiesIntroductionThis section describes data attribute properties that affect the (non-persistent) code generation. For instructions on how to specify properties, see REFID="10851" TYPE="XREF-TEXTCOPY"How to specify properties.Data Attribute propertiesThe following figure shows part of an Edit Properties dialog box:FILENAME="00717.unk" ORIGFILE="pics/prpattr.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Which data attribute properties can you specifyThe following data attribute properties affect non-persistent code generation:n REFID="30471" TYPE="XREF-TEXTCOPY"Constant Attributen REFID="38900" TYPE="XREF-TEXTCOPY"Copy Qualificationn REFID="30201" TYPE="XREF-TEXTCOPY"Nullablen REFID="37407" TYPE="XREF-TEXTCOPY"Abbreviationn REFID="42104" TYPE="XREF-TEXTCOPY"Attribute AccessThese properties are briefly discussed on the following pages.TERM1="Constancy" TERM2="data attribute"ID="30471"Constant AttributeWhen this property is set, a constant data member for the class is generated instead of a variable data member. A constant data member needs an initializing value. No get and set functions are generated for a constant attribute.COLS="2"COLNAME="1" COLWIDTH="87p"COLNAME="2" COLWIDTH="361p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Constant Attribute COLNAME="2" VALIGN="TOP" MOREROWS="0"Generated Example Code (4gh)COLNAME="1" VALIGN="TOP" MOREROWS="0"turned onCOLNAME="2" VALIGN="TOP" MOREROWS="0"...CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC CONSTANT att1 INTEGER = 60...COLNAME="1" VALIGN="TOP" MOREROWS="0"turned offCOLNAME="2" VALIGN="TOP" MOREROWS="0"...CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE att1 INTEGER = 60...TERM1="Copy Qualification" TERM2="data attribute property"ID="38900"Copy QualificationWhen the data type of the attribute is another class you can control the action of the NewEra COPY operator by supplying the appropriate copy qualification.NewEra copies the values of normal data members from the source object to the created object using the COPY operator. The copy qualification is post fixed to the variable declaration.You can select the following qualifications:COLS="2"COLNAME="1" COLWIDTH="105p"COLNAME="2" COLWIDTH="343p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Copy QualificationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Generated Example Code (4gh)COLNAME="1" VALIGN="TOP" MOREROWS="0"Shallow(default)COLNAME="2" VALIGN="TOP" MOREROWS="0"CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE att1 Stringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...COLNAME="1" VALIGN="TOP" MOREROWS="0"DeepCOLNAME="2" VALIGN="TOP" MOREROWS="0"CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE att1 String DEEP COPY name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...COLNAME="1" VALIGN="TOP" MOREROWS="0"NullCOLNAME="2" VALIGN="TOP" MOREROWS="0"CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE att1 String NULL COPY name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...ID="30201"NullableA TERM1="nullable" TERM2="data attribute property"nullable attribute is an attribute that doesn't necessarily have a value. In NewEra, the attribute is added to the TERM1="constructor" TERM2="not nullable attribute"parameter list of the constructor, if it is not nullable. The following nullability values are available:n default (equals yes)n yesn noThe effect the property values yes and default have are the same. If you want attributes to be non-nullable by default, you have to adapt the NewEra code generator.For more informationSee REFID="25748" TYPE="XREF-TEXTCOPY"Non-nullable attributes for details on the generation of the constructor.ID="37407"AbbreviationAbbreviations are ignored by the NewEra code generator.TERM1="attribute access" TERM2="property"ID="42104"Attribute AccessThe TERM1="get"TERM1="set"get (=read) and set (=write) member functions that are generated from the data attributes can be specified as TERM1="public section" TERM2="accessibility"Public, TERM1="protected section" TERM2="accessibility"Protected or TERM1="private section" TERM2="accessibility"Private.You can specify the following values:COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Get (=Read)COLNAME="2" VALIGN="TOP" MOREROWS="0"Set (=Write)COLNAME="1" VALIGN="TOP" MOREROWS="0"Public (default)ProtectedPrivateNoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"Public (default)Protected PrivateNoneThe values Public, Protected and Private result in the function having access control qualification PUBLIC, PROTECTED or PRIVATE. None indicates that the access function will not be generated.ID="25712"Examples: Data Attributes and NewEraIntroductionThe following table shows various data attributes you can specify in classes and the most significant part of the resulting code. The Attribute Access property determines the accessibility of the get and set member functions: public, protected or private.All classes in the examples have a $create operator so that code can be generated for them. Without this operator the classes would have been special classes.Standard data typeFILENAME="00718.unk" ORIGFILE="pics/daex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"DataAttribEx1.4gh:CLASS DataAttribEx1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PROTECTED FUNCTION getAge() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE FUNCTION setAge(newAge INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE age INTEGER ...Another class as data typeFILENAME="00719.unk" ORIGFILE="pics/daex2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"DataAttribEx2.4gh:...CLASS DataAttribEx2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getName() RETURNING ixStringname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setName(newName ixString) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE name ixString ...Shared standard typeFILENAME="00720.unk" ORIGFILE="pics/daex3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"DataAttribEx3.4gh:CLASS DataAttribEx3name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC SHARED FUNCTION getMaxAge() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC SHARED FUNCTION setMaxAge(newMaxAge INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE SHARED VARIABLE maxAge INTEGER ...DataAttribEx3.4gl:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLE DataAttribEx3::maxAge INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...Standard type with initializationFILENAME="00721.unk" ORIGFILE="pics/daex4.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"DataAttribEx4.4gh:CLASS DataAttribEx4name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getAge() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setAge(newAge INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE age INTEGER ...DataAttribEx4.4gl:...FUNCTION DataAttribEx4::DataAttribEx4()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET age = 18name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End constructor user sectionEND FUNCTION...With shared and initializationFILENAME="00722.unk" ORIGFILE="pics/daex5.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"DataAttribEx5.4gh:CLASS DataAttribEx5name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC SHARED FUNCTION getMaxAge() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC SHARED FUNCTION setMaxAge(newMaxAge INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE SHARED VARIABLE maxAge INTEGER ...DataAttribEx5.4gl:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLE DataAttribEx5::maxAge INTEGER = 65name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...TERM1="operation" TERM2="in non-persistent code generation"ID="18392"OperationsSyntaxUse the following syntax when you specify the TERM1="operation" TERM2="syntax"TERM1="class" TERM2="operation"operations of a class:FILENAME="00723.tif" ORIGSEQ="13" ORIGTYPE="I" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Generated NewEra constructionsThe following TERM1="NewEra" TERM2="function"TERM1="function"functions are generated for an operation in the header and source files :COLS="3"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="162p"COLNAME="3" COLWIDTH="231p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"NewEraCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"4ghCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="member function"TERM1="operation" TERM2="member function"Member TERM1="member function" TERM2="operation"function declarationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Private, protected or public depending on the property Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"4glCOLNAME="2" VALIGN="TOP" MOREROWS="0"Empty body of a methodTERM1="class" TERM2="method"COLNAME="3" VALIGN="TOP" MOREROWS="0"The following example shows what code is generated for an operation without parameters:FILENAME="00724.unk" ORIGFILE="pics/operex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classA.4gh:...CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION opr() RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...class.4gl:...FUNCTION classA::opr() RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Implement this function!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--END FUNCTIONClass featureA dollar sign ($) before an operation name indicates a class feature. This results in the generation of an operation with the leading NewEra keyword SHARED, indicating it is a shared function of the class.The header file generated for a class containing such a class feature looks like this:classA.4gh:FILENAME="00725.unk" ORIGFILE="pics/operex2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC SHARED FUNCTION opr() RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...ParametersA parameter in the parameter list of an operation must be specified according to the following syntax:name:typeThis results in a function argument in both the function declaration (4gh) and in the function definition (4gl). The type must either be a standard type (see REFID="42656" TYPE="XREF-TEXTCOPY"Customizing Data Types) or a class modeled in a CD.The following example shows how an operation with two specified parameters is generated:FILENAME="00726.unk" ORIGFILE="pics/operex3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classA.4gh:CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION opr(param1 INTEGER, param2 INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...classA.4gl:FUNCTION classA::opr(param1 INTEGER, param2 INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Implement this function!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--END FUNCTIONThe function definition generated in the 4gl file of the class has no contents besides the comment lines, prompting you to implement the function.For certain general purpose functions, you can use the operation property Tcl Method Implementation Procedure, which is discussed in REFID="18195" TYPE="XREF-TEXTCOPY"Tcl Method Implementation Procedure and further.Inclusion of header filesWhen the implementation of a (generated) function requires inclusion of certain header files, you can enter the include statement in the user include file section at the top of the 4gl file. This section is marked by the following two comment lines:-- Start user added include file section-- End user added include file sectionNote: These edits are preserved when you regenerate the file.Return typeThe return type for an operation must be either a standard type (see REFID="42656" TYPE="XREF-TEXTCOPY"Customizing Data Types) or a class modeled in a CD.The following example shows how an operation with two parameters and a return type specified is generated:FILENAME="00727.unk" ORIGFILE="pics/operex4.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classA.4gh:CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION opr(param1 INTEGER, param2 INTEGER) RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...classA.4gl:FUNCTION classA::opr(param1 INTEGER, param2 INTEGER) RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Implement this function!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--END FUNCTIONAbstract operationAbstract operations are not supported in NewEra. The ObjectTeam code generator therefore ignores {abstract} specified for operations other than $create. When you use {abstract} in combination with a $create operation, the generated constructor does not get access control qualification PUBLIC, even when the property Method Access is set to Public (see REFID="29834" TYPE="XREF-TEXTCOPY"Method Access).In this sectionThis section provides examples of how operations are translated into NewEra and what effect the properties have.COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17587" TYPE="XREF-TEXTCOPY"Operation Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39607" TYPE="XREF-TEXTCOPY"Examples: Operations and NewEra 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26ID="17587"Operation PropertiesIntroductionThis section describes operation properties that affect non-persistent code generation. For instructions on how to specify properties, see REFID="10851" TYPE="XREF-TEXTCOPY"How to specify properties.The following figure shows part of the Edit Properties dialog box for the class Product:FILENAME="00728.unk" ORIGFILE="pics/prpoper.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Which operation properties can you specifyYou can specify the following operation properties that affect non-persistent code generation:n REFID="29834" TYPE="XREF-TEXTCOPY"Method Accessn REFID="18195" TYPE="XREF-TEXTCOPY"Tcl Method Implementation Proceduren REFID="33377" TYPE="XREF-TEXTCOPY"EventBesides these, you can specify the following property for parameters in an operation:n REFID="19497" TYPE="XREF-TEXTCOPY"Default valueThese properties are briefly discussed on the following pages.TERM1="method access" TERM2="property"TERM1="accessibility" TERM2="operation"TERM1="operation" TERM2="accessibility"ID="29834"Method TERM1="operation" TERM2="accessibility"AccessYou can specify the following values for the property TERM1="method access" TERM2="property"Method Access:n Public (default)n Privaten ProtectedGenerated function declarations contain the according access control qualification PUBLIC, PRIVATE or PROTECTED.Use the TERM1="operation" TERM2="accessibility"accessibility property TERM1="method access" TERM2="property"Method Access to indicate in which section the member function must be placed.ID="31329"VisibilityYou can display the access level of methods in your diagram by checking Options | Show Visibility in the Class Diagram Editor. Method names will then be displayed with the following leading characters indicating the method's access level:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="318p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special characterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"+COLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"#COLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"-COLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateThese special characters can also be used to set the access level of methods. Typing a minus sign (-) before a method name will set the access level of the method to Private, for example. Warning: The special characters only work if the menu entry Options | Show Visibility in the Class Diagram Editor has been checked. Otherwise, the special characters will just be regarded as part of the method name.TERM1="Tcl method implementation procedure" TERM2="property"TERM1="operation" TERM2="Tcl method implementation procedure09"ID="18195"Tcl Method Implementation ProcedureUse the Tcl Method Implementation Procedure property to generate code for a method automatically.Σ To TERM1="generating" TERM2="code via TCL procedures"generate code for a method body automatically:1 Make sure the current browser level is the System level of the Implementation phase. The current system must be the system you are generating the code in.2 Select File | New | External File Version...The New External File Version dialog box appears.3 Select the Type tcl and enter a file name, e.g. my_proc.4 Click the Edit button.The text editor is started up.5 TERM1="Tcl" TERM2="creating - procedures"Create the Tcl procedure.This procedure generates the source code for a particular function with a very general purpose such as a printOn function. FILENAME="00729.unk" ORIGFILE="pics/operex5.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Such a printOn function prints all the data members of a class to standard output. You can use this kind of function for any class. The contents of the function is the same for every class; only the class differs.Use the following syntax when creating the Tcl procedure:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'proc operation::name {operclasssect } { }- name has to be specified as value for the property Tcl Method Implementation Procedure- oper is the operation handle- class is the class handle- sect is the section handleFor example:proc operation::generatePrintOn {oper class sect} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$sect append "DISPLAY \"Attributes of class [$class getName]:\"\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'foreach attr [$class dataAttrSet] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$sect append "DISPLAY \" [$attr getName]: \", [$attr getName]\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}}6 Save the Tcl file.7 Go back to the CD containing the operation(s) you want to generate the function body for.8 Specify the value of the property Tcl Method Implementation Procedure as the name that you specified for the Tcl procedure (without operation::), e.g.: generatePrintOn.9 Select Utilities | Import From Previous Phase | OOPL on the System level of the Implementation phase.Now the body of the method is automatically generated every time you generate code for the class. The ObjectTeam Shell calls this procedure and inserts the code generated by the procedure as the body of the method:...FUNCTION classA::printOn() RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAY "Attributes of class classA:"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAY " attr1: ", attr1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAY " attr2: ", attr2END FUNCTION...TERM1="Event" TERM2="property for a method"ID="33377"EventSet this property to indicate that an operation models an event rather than a function.If this property is set, an EVENT statement is generated in the header file instead of a FUNCTION statement. No code is generated in the source file, but you can place one or more event handlers between the following markers in the generated source file:--start user added source code section--end user added source code sectionTERM1="default value" TERM2="property"ID="19497"Default valueSet this property to assign a value to the parameter in a function declaration.In the following example the Default value for the parameter param1 was set to 65:4gh:CLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION opr(param1 INTEGER : 65) RETURNING VOID...ID="39607"Examples: Operations and NewEraExamplesThe following example shows various operations you can specify in classes and the most significant part of the resulting source code. The Method Access property determines the accessibility of the method: public, protected or private.Example CDFILENAME="00730.unk" ORIGFILE="pics/operex6.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Example 4gl fileThe following table shows the most important piece of the 4gl fie generated from the example class:COLS="2"COLNAME="1" COLWIDTH="157p"COLNAME="2" COLWIDTH="462p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="2" VALIGN="TOP" MOREROWS="0"4GH FileCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oper1()COLNAME="2" VALIGN="TOP" MOREROWS="0"PUBLIC FUNCTION oper1() RETURNING VOIDCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oper2():integerCOLNAME="2" VALIGN="TOP" MOREROWS="0"PUBLIC FUNCTION oper2() RETURNING INTEGERCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oper3(i: integer) : ixDateCOLNAME="2" VALIGN="TOP" MOREROWS="0"PUBLIC FUNCTION oper3(i INTEGER : 5) RETURNING ixDateCOLNAME="1" VALIGN="TOP" MOREROWS="0"$Oper4(j:integer)COLNAME="2" VALIGN="TOP" MOREROWS="0"PUBLIC SHARED FUNCTION oper4(j INTEGER) RETURNING VOIDCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oper5()COLNAME="2" VALIGN="TOP" MOREROWS="0"PUBLIC EVENT oper5() RETURNING VOIDExample 4gh fileThe following table shows the most important piece of the 4gh fie generated from the example class:COLS="3"COLNAME="1" COLWIDTH="157p"COLNAME="2" COLWIDTH="261p"COLNAME="3" COLWIDTH="210p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="2" VALIGN="TOP" MOREROWS="0"4GH FileCOLNAME="3" VALIGN="TOP" MOREROWS="0"ExplanationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oper1()COLNAME="2" VALIGN="TOP" MOREROWS="0"FUNCTION oper1() RETURNING VOIDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Normal operationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oper2():integerCOLNAME="2" VALIGN="TOP" MOREROWS="0"FUNCTION oper2() RETURNING INTEGERCOLNAME="3" VALIGN="TOP" MOREROWS="0"With return typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oper3(i: integer) : ixDateCOLNAME="2" VALIGN="TOP" MOREROWS="0"FUNCTION oper3(i INTEGER : 5) RETURNING ixDateCOLNAME="3" VALIGN="TOP" MOREROWS="0"With another class as return type and a parameterCOLNAME="1" VALIGN="TOP" MOREROWS="0"$Oper4(j:integer)COLNAME="2" VALIGN="TOP" MOREROWS="0"SHARED FUNCTION oper4(j INTEGER) RETURNING VOIDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Shared methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"Oper5()COLNAME="2" VALIGN="TOP" MOREROWS="0"EVENT oper5() RETURNING VOIDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Property Event setTERM1="constructor"ID="24711"ConstructorIntroductionThere are two ways a constructor can be generated by the NewEra code generator:n The constructor and the parameters required for initializing an object of the class are generatedn Only the constructor is generated. You have to implement the object initialization parameters yourselfBoth ways are discussed in this section.Warning: Specify only one constructor for a class. As NewEra does not support function overloading, it is not possible for a class to have multiple constructors.Generating Object Initialization ParametersIntroductionThe constructor, together with the parameters required for initializing an object of the class correctly, is automatically generated if the class meets the following requirements:n The class contains exactly one operation $create n The class does not contain an operation $create or $create(), and is not a special class (see REFID="33738" TYPE="XREF-TEXTCOPY"Special Classes)The following example shows a class that meets these requirements:FILENAME="00731.unk" ORIGFILE="pics/ctorex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The following constructor is generated for classA1:classA1.4gl:...FUNCTION classA1::classA1()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End constructor user sectionEND FUNCTION...Elements of the constructorThe constructor consists of the following elements:COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="358p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ElementCOLNAME="2" VALIGN="TOP" MOREROWS="0"RemarkCOLNAME="1" VALIGN="TOP" MOREROWS="0"SignatureCOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the classList of parameters that are involved in the construction of the classCOLNAME="1" VALIGN="TOP" MOREROWS="0"Initializing statement in bodyCOLNAME="2" VALIGN="TOP" MOREROWS="0"see: REFID="39715" TYPE="XREF-TEXTCOPY"What does the constructor handle for detailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"rest of bodyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains a section for user edits:-- Start constructor user section -- End constructor user section ID="39715"What does the constructor handleIn the following situations, the constructor needs more parameters to handle the initialization of an object of the class correctly:n The class is a sub class in a generalizationn The class contains data attributes for which the property Nullable is set to No.n The class is involved in an association where the multiplicity at the other end is mandatoryn The class is a linked class in a (qualified) associationn A link attribute box is linked to a (qualified) associationExamples of generated constructors in these particular situations can be found on the following pages.Sub classIn the following example, sub class classA2 is derived from the super class classA1. The super class is initialized in the constructor of classA2:FILENAME="00732.unk" ORIGFILE="pics/ctorex2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classA2.4gl:...FUNCTION classA2::classA2() :name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classA1()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...END FUNCTION...ID="25748"Non-nullable attributesThe attribute attB1 in classB of the following example has the attribute Nullable set to no. The non-nullable attributes are included in the parameter list of the constructor.FILENAME="00733.unk" ORIGFILE="pics/ctorex3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classB.4gl:...FUNCTION classB::classB(i_attB1 INTEGER)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET attB1 = i_attB1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...END FUNCTION...Mandatory associationIn the following example, the class classC1 is involved in an association where the multiplicity at the other end is mandatory.The role name at the mandatory side is included in the parameter list of the constructor for classC1:FILENAME="00734.unk" ORIGFILE="pics/ctorex4.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classC1.4gl:...FUNCTION classC1::classC1(roleC2 classC2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET roleC2Ref = roleC2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...END FUNCTION...Linked class in a qualified associationIn the following example, the class classD3 is a linked class in a qualified association.The qualifier and both the role names roleD1 and roleD2 are included in the parameter list of the constructor for classD3. FILENAME="00735.unk" ORIGFILE="pics/ctorex5.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classD3.4gl:...FUNCTION classD3::classD3(roleD1 classD1, roleD2 classD2, Dqualifier INTEGER)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET roleD1Ref = roleD1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL roleD1Ref.classD3OfRoleD2Dict.set(Dqualifier, SELF)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET roleD2Ref = roleD2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET roleD2Ref.classD3OfRoleD1Ref = SELFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...END FUNCTION...Linked attributes in a qualified associationThe following example includes a qualified association with a link attribute box containing one attribute (attE3). This link attribute box results in the generation of a class with the name of the association (assoc). The same elements are included in the parameter list of the constructor of class assoc as for the linked class in the previous example.FILENAME="00736.unk" ORIGFILE="pics/ctorex6.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"assoc.4gl:...FUNCTION assoc::assoc(roleE1 classE1, roleE2 classE2, Equalifier INTEGER)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET roleE1Ref = roleE1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL roleE1Ref.assocOfRoleE2Dict.set(Equalifier, SELF)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET roleE2Ref = roleE2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET roleE2Ref.assocOfRoleE1Ref = SELFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...END FUNCTION...Implementing Object Initialization Parameters IntroductionIf you specify the constructor in a class with the following class operation, then a constructor with an empty body is generated:$create()You then have to implement the constructor yourself, just like you have to implement any operation yourself.Elements of the constructorThe constructor consists of the following elements:COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="358p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ElementCOLNAME="2" VALIGN="TOP" MOREROWS="0"RemarkCOLNAME="1" VALIGN="TOP" MOREROWS="0"SignatureCOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the classList of parameters that are involved in the construction of the classCOLNAME="1" VALIGN="TOP" MOREROWS="0"Empty bodyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains the following comment lines:-- Implement this function! -- ExampleThe following example shows the (empty) constructor generated for a class with a class operation $create(). There is one parameter specified for this operation:FILENAME="00737.unk" ORIGFILE="pics/ctorex7.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"classA1.4gh:...FUNCTION class::class(param1 INTEGER)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Implement this function!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--END FUNCTION ...ID="26001"DestructorTERM1="destructor"DestructorIn NewEra the destructor of a class is the (intrinsic) function with the following name:!destroy()A destructor is generated for every class for which a constructor is generated. A generated destructor function looks like this:...FUNCTION classA1::!destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-- End destructor user sectionEND FUNCTION...The destructor may contain more statements, since the destructor is tightly coupled with the constructor. If the generated constructor contains several statements for initialization, the destructor contains the corresponding statements to remove these initializations.TERM1="generalization"TERM1="inheritance"ID="38687"Generalizations (Inheritance)TERM1="generalization" TERM2="in non-persistent code generation"Kinds of inheritanceYou can define the following kinds of TERM1="generalization" TERM2="standard"TERM1="generalization" TERM2="overlapping"generalizations:n Disjoint (standard)FILENAME="00738.tif" ORIGSEQ="34" ORIGTYPE="I" ORIGDOC="../../sources/ne/nenpers.fm5.mif"n TERM1="Overlapping generalization"OverlappingFILENAME="00739.tif" ORIGSEQ="20" ORIGTYPE="I" ORIGDOC="../../sources/ne/nenpers.fm5.mif"Only the standard generalization is supported by NewEra. If an overlapping generalization is encountered by the ObjectTeam code generator, a warning is issued and no code is generated.DiscriminatorThe discriminator that you can specify for a generalization in a CD is not used in the NewEra code generation.ID="40575"Generalization PropertiesThere are no generalization properties that affect non-persistent code generation.ID="22032"Examples: Generalizations and NewEraThe following examples show a generalization with standard inheritance: one super class and one sub class.FILENAME="00740.unk" ORIGFILE="pics/inhex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The generated header files look like this:InhEx1.4gh:...CLASS InhEx1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION InhEx1()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()END CLASSInhSubEx1.4gh:INCLUDE "InhEx1.4gh"CLASS InhSubEx1 DERIVED FROM InhEx1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION InhSubEx1()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()END CLASSTERM1="association" TERM2="in non-persistent code generation"ID="34119"AssociationsIntroductionIf a class is involved in an association with another class, extra data members and member functions are generated if:n There is a role name specified at the far end of the association joined to the class or there is a qualifier specified at the near endThe following two types of features are generated for an association:n Data TERM1="member data"TERM1="class feature" TERM2="member data"TERM1="class" TERM2="feature"membern TERM1="member function" TERM2="association"Member functionsData members / Association attributesAn association between two classes in a CD results in the generation of data members in one or both classes. These data members are referred to as association attributes. They always have public access in order to keep the association up-to-date.An association attribute implements one side of the association. Its type depends on:n the kind of association (normal, qualified)n the multiplicity at the side of the other class (one, many, optional)The table below lists the name and the type of the association attribute generated for these associations in the header file:COLS="3"COLNAME="1" COLWIDTH="142p"COLNAME="2" COLWIDTH="150p"COLNAME="3" COLWIDTH="154p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"NewEra ConstructionCOLNAME="1" VALIGN="TOP" MOREROWS="0"oneCOLNAME="2" VALIGN="TOP" MOREROWS="0"roleNmRef otherClassNmCOLNAME="3" VALIGN="TOP" MOREROWS="0"referenceCOLNAME="1" VALIGN="TOP" MOREROWS="0"manyCOLNAME="2" VALIGN="TOP" MOREROWS="0"roleNmSet RefSetCOLNAME="3" VALIGN="TOP" MOREROWS="0"reference setNote: For qualified associations, different association attributes are generated. See REFID="33064" TYPE="XREF-TEXTCOPY"Qualified Associations for details.Member functionsTo manipulate the association attributes, the following member functions are generated in the class containing the association attribute.COLS="2"COLNAME="1" COLWIDTH="93p"COLNAME="2" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="2" VALIGN="TOP" MOREROWS="0"Function (Name, Parameters And Return Type)COLNAME="1" VALIGN="TOP" MOREROWS="0"oneCOLNAME="2" VALIGN="TOP" MOREROWS="0"getroleNm() RETURNING otherClassNm setroleNm(newroleNm otherClassNm)removeroleNmCOLNAME="1" VALIGN="TOP" MOREROWS="0"manyCOLNAME="2" VALIGN="TOP" MOREROWS="0"getroleNmSet() RETURNING RefSetaddroleNm(newroleNm otherClassNm)removeroleNm(oldroleNm RETURNING otherClassNm)The get, set and remove functions are derived from the role name at the other side. Bear in mind that, in case of a mandatory association at the side of the other class, the remove function is not generated.In this sectionThis section describes associations, association properties and it gives examples of how different types of associations are generated into NewEra code.COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40839" TYPE="XREF-TEXTCOPY"Association Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'38COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17049" TYPE="XREF-TEXTCOPY"Association with Link Objects 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38082" TYPE="XREF-TEXTCOPY"Examples: Associations and NewEra 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'40TERM1="association" TERM2="properties"ID="40839"Association PropertiesIntroductionThis section describes properties that can be specified for role starts and role ends in associations to influence the (non-persistent) code generation. For instructions on how to specify properties, see REFID="10851" TYPE="XREF-TEXTCOPY"How to specify properties.Which association properties can you specifyThe following association property affects non-persistent code generation:n REFID="20993" TYPE="XREF-TEXTCOPY"Association Access This property is briefly discussed here. The property Abbreviation is ignored by the NewEra code generator.TERM1="association access" TERM2="property"TERM1="accessibility" TERM2="association"ID="20993"Association AccessUse this property to determine the access control qualification of the association. You can set it for role start and role end elements.FILENAME="00741.unk" ORIGFILE="pics/assocacc.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"You can select the following access values for association roles: COLS="2"COLNAME="1" COLWIDTH="219p"COLNAME="2" COLWIDTH="229p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Get (=Read)COLNAME="2" VALIGN="TOP" MOREROWS="0"Set(=Write)COLNAME="1" VALIGN="TOP" MOREROWS="0"Public (default)ProtectedPrivateNoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"Public (default)Protected PrivateNoneThe access value determines the access control qualification of the generated access function: PUBLIC, PROTECTED or PRIVATE.None indicates that no access function(s) will be generated.TERM1="link attribute" TERM2="in non-persistent code generation"ID="17049"Association with TERM1="data attribute" TERM2="link"TERM1="link attribute"Link ObjectsWhich link objects are availableTwo link objects can be attached to a (qualified) association:n link attribute boxn classImplications for code generationThe NewEra code generator interprets an association between two classes with a link object as two associated classes both having an association with a third class representing the link object. The normal rules for associations apply to these (qualified) associations.Data members and TERM1="member function"TERM1="class feature" TERM2="member function"member functions are generated for each of the two TERM1="class" TERM2="association attribute"classes if there is a role name specified at the other end of the association. Association attributes are always generated for the third class, i.e. two get functions, one for each class.ID="38082"Examples: Associations and NewEraIntroductionOn the following pages you can find three examples of associations with different multiplicity and the 4gh code that is generated. The multiplicities are:n One (optional)n Many (optional)n Many (mandatory)An example of a association with a link object can be found here as well.Multiplicity: one (optional)The following example CD contains an association with a multiplicity of one (optional).FILENAME="00742.unk" ORIGFILE="pics/asscab.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The file classA.4gh contains the required data members and member functions to handle this qualified association:classA.4gh:FORWARD classBCLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION classA()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getAttA() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setAttA(newAttA INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setRoleB(newRoleB classB) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION removeRoleB() RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE roleBRef classBname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE FUNCTION getRoleB() RETURNING classBname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE attA INTEGER END CLASSMultiplicity: many (optional)The following example CD contains an association with a multiplicity of many (optional).FILENAME="00743.unk" ORIGFILE="pics/assccd.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The file classC.4gh contains the required data members and member functions to handle this qualified association:classC.4gh:INCLUDE "RefSet.4gh"FORWARD classDCLASS classCname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION classC()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getAttC() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setAttC(newAttC INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getRoleDSet() RETURNING RefSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION addRoleD(newRoleD classD) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION removeRoleD(oldRoleD classD) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE roleDSet RefSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE attC INTEGER END CLASSFor more informationFor an example of how you can use the generated code for an association with a multiplicity of many, refer to REFID="22344" TYPE="XREF-TEXTCOPY"Using the Code Generated from an AssociationMultiplicity: many (mandatory)The following example CD contains an association with a multiplicity of many (mandatory).FILENAME="00744.unk" ORIGFILE="pics/asscef.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The file classE.4gl contains the required data members and member functions to handle this qualified association:classE.4gl:INCLUDE "RefSet.4gh"FORWARD classFCLASS classEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION classE()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getAttE() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setAttE(newAttE INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getRoleFSet() RETURNING RefSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION addRoleF(newRoleF classF) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION removeRoleF(oldRoleF classF) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE roleFSet RefSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE attE INTEGER END CLASSLink objectThe following association contains a link attribute box which is attached to the association between two classes. Three classes are generated for this association:FILENAME="00745.unk" ORIGFILE="pics/assclnk.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The multiplicity is as follows for the three classes:COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="1" VALIGN="TOP" MOREROWS="0"CustomerCOLNAME="2" VALIGN="TOP" MOREROWS="0"optional (zero or one)COLNAME="1" VALIGN="TOP" MOREROWS="0"purchaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"mandatory (one)COLNAME="1" VALIGN="TOP" MOREROWS="0"BookCOLNAME="2" VALIGN="TOP" MOREROWS="0"optional (many)Customer.4gh:INCLUDE "RefSet.4gh"FORWARD purchaseCLASS Customername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION Customer()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getPurchaseOfBookSet() RETURNING RefSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE purchaseOfBookSet RefSetEND CLASSBook.4gh:...CLASS Bookname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION Book()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...END CLASSpurchase.4gh:...FORWARD BookCLASS purchasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION purchase(book Book)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getThisDate() RETURNING DATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setThisDate(newThisDate DATE) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getBook() RETURNING Bookname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE bookRef Bookname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE thisDate DATE END CLASS...TERM1="association" TERM2="multiplicity of "many" at one side"TERM1="association" TERM2="and libwmt4omt"TERM1="libwmt4omt" TERM2="generation of associations"ID="22344"Using the Code Generated from an AssociationIntroductionThis section contains an example of an association with a multiplicity of many. It gives you some examples of the NewEra code you could write that uses the generated non-persistent NewEra code for this association. The following actions are involved:n add class occurences to a setn remove class occurences from a setn retrieve class occurencesExample CDThe following picture shows an example of an association with a multiplicity of many (zero or more) at one side, together with a sample of the generated header file. The class at the side of the many association end acts as detail (classB), the class at the other side as master (classA).FILENAME="00746.unk" ORIGFILE="pics/asscmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The generated header file classA.4gh looks like this:INCLUDE "RefSet.4gh"FORWARD classBCLASS classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION classA()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getAttr() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setAttr(newAttr INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION meth() RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getDetailSet() RETURNING RefSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION addDetail(newDetail classB) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION removeDetail(oldDetail classB) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE detailSet RefSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE attr INTEGER END CLASSGenerated methodFor all associations with a multiplicity of many at one side, the following method is generated:TERM1="getSet"get<Rolename>SetIn our example, the name of this get function is: getDetailSet. The type of this member function getDetailSet is TERM1="PtrSet"RefSet. RefSet is one of the storage structure classes that are included in the class library TERM1="libwmt4omt"TERM1="class library" TERM2="used to generate associations"lw4omtne (see REFID="18476" TYPE="XREF-TEXTCOPY"Class Library lw4omtne). It is used for Reference Sets. Typical member functions of the class RefSet are first() and next(). These functions return the references to the detail class occurrences that participate in the association.Before you are able to retrieve (get) class occurrences from a RefSet class, these occurrences first have to be added to the association. The master class contains member functions which allow adding (and removing) detail class occurrences. Bear in mind that the class RefSet only stores the references to the class. Example codeIn the following example main.4gl file, constructions typical for the following actions are included:n TERM1="class occurrence (NewEra)" TERM2="adding - to reference set"adding class occurences to a reference setn TERM1="class occurrence (NewEra)" TERM2="removing - from reference set"removing class occurences from a reference setn TERM1="class occurrence (NewEra)" TERM2="retrieving - from reference set"retrieving class occurences from a reference setINCLUDE "ClassA.4gh"INCLUDE "ClassB.4gh"MAINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLE a ClassA = NEW ClassA() -- Make new occurrence of classAname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLE b1 ClassB = NEW ClassB() -- Make new occurrence of classBname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLE b2 ClassB = NEW ClassB() -- Make new occurrence of classBname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLE bb1, bb2 ClassB -- Declare two ClassB referencesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLE details RefSet -- Declare a RefSet referencename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL b1.setAttr(1) -- Set attr of b1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL b2.setAttr(2) -- Set attr of b2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL a.addDetail(b1) -- Add b1 to aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL a.addDetail(b2) -- Add b2 to aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET details = a.getDetailSet()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAY "Detail set size: ", details.size()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET bb1 = details.first() CAST ClassBname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET bb2 = details.next() CAST ClassBname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAY "detail attribute values: b1.attr == ", bb1.getAttr(),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'" b2.attr == ", bb2.getAttr()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL a.removeDetail(b1) -- Remove b1 from a againname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL a.removeDetail(b2) -- Remove b2 from a againname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAY "detail set should be empty now; size is: ", details.size()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNEND MAINID="33064"Qualified AssociationsID="28529"Data members / Qualified Association attributesA qualified association between two classes in a CD results in the generation of data members and member functions in one or both classes. The data members are referred to as qualified association attributes. These association attributes always have public access in order to keep the qualified association up-to-date.A qualified association attribute is generated if the following conditions are met:n the class is associated with another class by a qualified associationn a role name is specified at the side of the other classn the qualifier has a valid data typeA qualified association attribute implements one side of the qualified association. Its type depends on:n the multiplicity at the side of the other class (one, many, optional)The table below lists the name and the type of the association attribute generated for these qualified associations in the header file:COLS="2"COLNAME="1" COLWIDTH="141p"COLNAME="2" COLWIDTH="307p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"oneCOLNAME="2" VALIGN="TOP" MOREROWS="0"roleNmDict RefDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"manyCOLNAME="2" VALIGN="TOP" MOREROWS="0"roleNmRSDict RSetDictMember functionsTo manipulate the association attributes, the following member functions are generated in the class containing the qualified association attribute:COLS="2"COLNAME="1" COLWIDTH="105p"COLNAME="2" COLWIDTH="343p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MultiplicityCOLNAME="2" VALIGN="TOP" MOREROWS="0"Function (Name, Parameters And Return Type)COLNAME="1" VALIGN="TOP" MOREROWS="0"oneCOLNAME="2" VALIGN="TOP" MOREROWS="0"getroleNm(qualNm qualType) RETURNING otherClassNm setroleNm(qualNm qualType, newroleNm otherClassNm)removeroleNm(qualNm qualType)COLNAME="1" VALIGN="TOP" MOREROWS="0"manyCOLNAME="2" VALIGN="TOP" MOREROWS="0"getroleNm(qualNm qualType) RETURNING RefSetaddroleNm(qualNm qualType, newroleNm otherClassNm)removeroleNm(qualNm qualType, oldroleNm otherClassNm)The get, set and remove functions are derived from the role name at the other side. Bear in mind that, in case of a mandatory association at the side of the other class, the remove function is not generated.In this sectionThis section describes qualified associations, qualified association properties and it gives examples of how different types of qualified associations are generated into NewEra code.COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37646" TYPE="XREF-TEXTCOPY"Qualified Association Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'49COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28570" TYPE="XREF-TEXTCOPY"Examples: Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'50ID="37646"Qualified Association PropertiesIntroductionFor instructions on how to specify properties, see REFID="10851" TYPE="XREF-TEXTCOPY"How to specify properties.Which qualified association properties can you specifyFor qualified associations, the same properties can be specified as for non-qualified associations (see REFID="40839" TYPE="XREF-TEXTCOPY"Association Properties).The following additional can be specified for the qualifier in qualified associations:n REFID="12781" TYPE="XREF-TEXTCOPY"Data TypeThis property is briefly discussed here.n NullableThis property is briefly discussed in REFID="30201" TYPE="XREF-TEXTCOPY"Nullable.TERM1="association access" TERM2="property"TERM1="accessibility" TERM2="association"ID="12781"Data TypeUse this property to assign a data type to a qualifier.FILENAME="00747.unk" ORIGFILE="pics/prpquala.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The data type of a qualifier must be the same as the type of the key in the data structure that implements the qualified association. In case of the data structures RefDict and RSetDict (see REFID="28529" TYPE="XREF-TEXTCOPY"Data members / Qualified Association attributes) the type is ixObject, so that any NewEra class could serve as qualifier type.Examples of valid NewEra class names are: ixInteger and ixString.ID="28570"Examples: Qualified AssociationsIntroductionThe data type of the qualifier used in the following examples is ixString. This (external) NewEra class is included in the CDs.Multiplicity: one (optional)The following example CD contains an association with a multiplicity of one (optional).FILENAME="00748.unk" ORIGFILE="pics/asscfg.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The file classF.4gh contains the required data members and member functions to handle this qualified association:INCLUDE "RefDict.4gh"FORWARD classGFORWARD ixStringCLASS classFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION classF()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getAttF() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setAttF(newAttF INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getRoleG(qualifier ixString) RETURNING classGname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setRoleG(qualifier ixString, newRoleG classG) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION removeRoleG(qualifier ixString) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE roleGDict RefDictname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE attF INTEGER END CLASSMultiplicity: manyThe following example CD contains an association with a multiplicity of many (optional). For association with a mandatory multiplicity, similar code is generated.FILENAME="00749.unk" ORIGFILE="pics/asschi.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"The file classH.4gh contains the required data members and member functions to handle this qualified association:INCLUDE "RSetDict.4gh"INCLUDE "RefSet.4gh"FORWARD classICLASS classHname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION classH()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION !destroy()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getAttH() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION setAttH(newAttH INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION getRoleI(qualifier INTEGER) RETURNING RefSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION addRoleI(qualifier INTEGER, newRoleI classI) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC FUNCTION removeRoleI(qualifier INTEGER, oldRoleI classI) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE roleIRSDict RSetDictname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIVATE VARIABLE attH INTEGER END CLASSID="33738"Special TERM1="class" TERM2="special"TERM1="special classes"ClassesWhat are special classesIn C++, special classes in are classes that serve a particular purpose. The special classes you can create in C++ are:n typedef classn generic typedef classn enum classNewEra does not support special classes.For more informationFor more information on special classes in C++, refer to the ObjectTeam Code Generation Guide for C++.Why should I care about special classesIf NewEra does not support special classes, why should you care about them? Well, if you model a class the same way as you would in C++ to generate a special class, the constructor function is not generated.For example, for the following class, no constructor is generated:FILENAME="00750.unk" ORIGFILE="pics/special.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nenpers.fm5.mif"However, if you add the operation $create, a constructor will be generated.Chapter 4 Mapping Modeling Data to NewEra ID="23603"Persistent CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraTERM1="4gh file" TERM2="generating (persistent)"TERM1="generating" TERM2="4gh file (persistent)"TERM1="4gl file" TERM2="generating (persistent)"TERM1="generating" TERM2="4gl file (persistent)"IntroductionTERM1="code generation" TERM2="persistent"A persistent TERM1="4gl file" TERM2="generating (persistent)"TERM1="4gh file" TERM2="generating (persistent)"class is a class whose instances persists beyond the lifetime of a single program execution. The public interface of the persistent class is similar to that of the non-persistent classes. The implementation however, is completely different because of the storage of the data members in a relational database. The persistent code generation process involves the generation of two types of code:n SQL (Structured Query Language), as described in REFID="37874" TYPE="XREF-TEXTCOPY"SQL Generationn Persistent NewEra code, as described in REFID="13730" TYPE="XREF-TEXTCOPY"Persistent NewEra Code GenerationID="11158"How do you create a persistent classYou create a persistent class in a CD by setting the property Persistent for the class. For instructions on specifying properties, see REFID="10851" TYPE="XREF-TEXTCOPY"How to specify properties.A persistent class needs at least one key attribute. You can specify a key attribute by entering a leading asterisk (*) in the name of the attribute. You cannot specify key attributes for sub classes in a generalization, however: sub classes inherit key attributes from their super class.For more informationKey attributes are further discussed in REFID="24397" TYPE="XREF-TEXTCOPY"Key attributes.ExampleIn the following example, the attribute name is the key attribute in the persistent class Patient:FILENAME="00751.unk" ORIGFILE="pics/patient.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"Apart from setting the property Persistent and specifying a key attribute, the same rules apply for modeling persistent classes as for non-persistent classes. (see REFID="27879" TYPE="XREF-TEXTCOPY"Chaptername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3, "Mapping Modeling Data to NewEra Non-Persistent Code").What code is generated for a persistent classIn persistent code generation, ObjectTeam uses a Relational Data Base Management System (RDBMS) to store data for persistent class objects.So besides NewEra classes, the NewEra code generator generates SQL scripts for creating and destroying database tables and procedures. A runtime system takes care of the mapping of generated NewEra classes onto the target RDBMS.For more informationFor details on the runtime system in combination with NewEra classes, see REFID="17255" TYPE="XREF-TEXTCOPY"The Runtime System.Which RDBMSs are supportedAt the moment Informix is the only supported RDBMS for NewEra persistent code generation.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37874" TYPE="XREF-TEXTCOPY"SQL Generation 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13730" TYPE="XREF-TEXTCOPY"Persistent NewEra Code Generation 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20ID="37874"SQL TERM1="code generation" TERM2="persistent (SQL)"TERM1="persistent code generation" TERM2="SQL"GenerationTERM1="SQL generation"TERM1="persistent code generation" TERM2="SQL"IntroductionSQL code is generated for every persistent class in the CDs residing in the same system of the Object Design phase.Where does SQL fit inThe mapping of persistent classes on a relational database is carried out through the runtime system (see REFID="17255" TYPE="XREF-TEXTCOPY"The Runtime System). The Data Definition Language (DDL) used to create this runtime system in ObjectTeam is SQL. Generated SQL filesThe following SQL script files are generated during SQL generation:COLS="2"COLNAME="1" COLWIDTH="124p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"FunctionCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="create.sql"createCOLNAME="2" VALIGN="TOP" MOREROWS="0"Invokes the generated scripts create_tables and create_procsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="create_tables.sql"create_tablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains SQL code for table definitionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="create_procs.sql"create_procsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains SQL code for procedure creation. For every database table that is defined, the database operations delete, insert and update are generated. These procedures also handle referential integrity(see REFID="24352" TYPE="XREF-TEXTCOPY"Customizing Referential Integrity Policies)COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="drop.sql"dropCOLNAME="2" VALIGN="TOP" MOREROWS="0"Invokes the scripts drop_table and drop_procsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="drop_tables.sql"drop_tablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains SQL code to drop table definitionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="drop_procs.sql"drop_procsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains SQL code to drop procedure definitionsThe object type of these files in the browser is sql_type.In this sectionThis section describes the characteristics of SQL code generation:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21736" TYPE="XREF-TEXTCOPY"Class 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21116" TYPE="XREF-TEXTCOPY"Data Attribute 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23357" TYPE="XREF-TEXTCOPY"Generalization 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21782" TYPE="XREF-TEXTCOPY"Association 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21074" TYPE="XREF-TEXTCOPY"Association with a Link Object 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21059" TYPE="XREF-TEXTCOPY"Qualified Association 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18Note that operations are not generated; they are irrelevant to SQL generation.ID="21736"ClassIntroductionIn the simplest situation one persistent class maps to one table. Each persistent class is mapped to an SQL table, and the table rows are instances of the class. The user-defined key attribute(s) together with the automatically generated class_type attribute serve as a system wide unique identification.ExampleThe following CREATE TABLE statements are generated for one persistent class:FILENAME="00752.unk" ORIGFILE="pics/patient.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"create_tables:...CREATE TABLE patient (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40) NOT NULL,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARCHAR(32) NOT NULL,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'addressname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(50),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'agename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTEGER,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));...The following CREATE PROCEDURES are generated for this class:create_procs:...-- Database procedure to insert a tuple into table patientCREATE PROCEDURE pins_patient(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_name CHAR(40),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_class_type VARCHAR(32),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_address CHAR(50),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_age INT)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INSERT INTO patientname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VALUES (p_name, p_class_type, p_address, p_age);name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDEND PROCEDURE;-- Database procedure to delete a tuple from table patientCREATE PROCEDURE pdel_patient(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_name CHAR(40),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_class_type VARCHAR(32))name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DELETEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FROM patientname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHERE name = p_name AND class_type = p_class_type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDEND PROCEDURE;-- Database procedure to update a tuple from table patientCREATE PROCEDURE pupd_patient(name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_name CHAR(40),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_class_type VARCHAR(32),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_address CHAR(50),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p_age INT)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BEGINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'UPDATE patientname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SET address = p_address, age = p_agename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHERE name = p_name AND class_type = p_class_type;name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDEND PROCEDURE;TERM1="data attribute" TERM2="in persistent (SQL) code generation"ID="21116"Data AttributeSyntaxUse the following syntax when you specify the TERM1="data attribute" TERM2="syntax"data attributes of a persistent class:FILENAME="00753.tif" ORIGSEQ="9" ORIGTYPE="I" ORIGDOC="../../sources/ne/nepers.fm5.mif"ID="24397"Key attributesYou specify a data attribute as being a key attribute by putting a leading asterisk in the name. You can specify multiple key attributes. All the key attributes, together with the attribute class_type (see REFID="24933" TYPE="XREF-TEXTCOPY"The attribute class_type), make up the primary key of the class.As key attributes always need a value, the keywords NOT NULL are generated for every key attribute in a class, e.g.:CREATE TABLE Patient (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHAR(40) NOT NULL,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (name,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type));The data attribute name is the only key attribute in this example.Standard TypesIn CDs, standard data types are used to define the data type of an attribute. These data types are mapped to target-dependent database types during persistent code generation. The standard data types can be found in the customization file:M4_home\etc\t_inf\stand_typesThe following customization file is used to map the standard types to database types:M4_home\etc\t_inf\db_typesFor more informationSee REFID="42656" TYPE="XREF-TEXTCOPY"Customizing Data Types and further for more information on these files.Warning: In persistent classes, you are not allowed to specify a class as the data type of an attribute.ID="24539"Data Attribute PropertiesThe following property affects the way SQL code is generated for data attributes in a persistent class:n TERM1="nullable" TERM2="data attribute property"TERM1="nullable" TERM2="data attribute property"Nullable The following nullability values are available:n default (equals yes)n yesn noThe setting of this property determines whether or not an attribute is allowed to have a NULL value. The default value of this property is yes.If you set the property Nullable to no, the keywords NOT NULL are generated after the data type of the column. Key attributes and the attribute class_type always have these keywords generated.In the following example the property Nullable is set to no for the attribute address:CREATE TABLE Patient (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'address CHAR(50) NOT NULL,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...);The effect the property values yes and default have are the same. If you want attributes to be non-nullable by default, you have to adapt the NewEra code generator. ID="24933"The attribute class_typeFor every persistent class a data attribute class_type is generated in the SQL code. This attribute is part of the primary key of every table.The main function of the attribute class_type is to handle classes in generalizations. For more informationMore information on generalizations can be found in REFID="23357" TYPE="XREF-TEXTCOPY"Generalization.ID="23357"GeneralizationTERM1="generalization" TERM2="example of generated SQL code"Master-detail pairsIn a generalization, the super class acts as master and the subclass as detail. In the following example diagram, the master-detail pairs are:A(master) - B(detail)A(master) - C(detail)PropertiesThe only properties you can set for a generalization are the following RI (Referential Integrity) properties:n Referential Integrityn Insert Policyn Delete Policyn Update PolicyFor more informationReferential Integrity is further discussed in REFID="24352" TYPE="XREF-TEXTCOPY"Customizing Referential Integrity Policies.ExampleFILENAME="00754.unk" ORIGFILE="pics/sqasgen.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"create_tables.sql:...-- Create table BCREATE TABLE B (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Name CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bId INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (Name, class_type));-- Create table CCREATE TABLE C (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Name CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (Name, class_type));-- Create table ACREATE TABLE A (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Name CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (Name, class_type)); ...ALTER TABLE Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (Name, class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;ALTER TABLE Cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (Name, class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;The attribute class_type, which is generated for every base class, is essential in generalizations. The following tables show some possible contents of the rows and columns of the database tables A, B and C. The value of Name is the same for both Z's that occur in the table A. Without the class_type attribute, it would be impossible to distinguish the Z's. These are, in fact, three different occurrences with the same name.COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Table ACOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"class_typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"adateCOLNAME="1" VALIGN="TOP" MOREROWS="0"XCOLNAME="2" VALIGN="TOP" MOREROWS="0"BCOLNAME="3" VALIGN="TOP" MOREROWS="0"951107COLNAME="1" VALIGN="TOP" MOREROWS="0"YCOLNAME="2" VALIGN="TOP" MOREROWS="0"CCOLNAME="3" VALIGN="TOP" MOREROWS="0"951106COLNAME="1" VALIGN="TOP" MOREROWS="0"ZCOLNAME="2" VALIGN="TOP" MOREROWS="0"ACOLNAME="3" VALIGN="TOP" MOREROWS="0"951109COLNAME="1" VALIGN="TOP" MOREROWS="0"ZCOLNAME="2" VALIGN="TOP" MOREROWS="0"BCOLNAME="3" VALIGN="TOP" MOREROWS="0"951110COLNAME="1" VALIGN="TOP" MOREROWS="0"ZCOLNAME="2" VALIGN="TOP" MOREROWS="0"CCOLNAME="3" VALIGN="TOP" MOREROWS="0"951111COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Table BCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"class_typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"bidCOLNAME="1" VALIGN="TOP" MOREROWS="0"XCOLNAME="2" VALIGN="TOP" MOREROWS="0"BCOLNAME="3" VALIGN="TOP" MOREROWS="0"333COLNAME="1" VALIGN="TOP" MOREROWS="0"ZCOLNAME="2" VALIGN="TOP" MOREROWS="0"BCOLNAME="3" VALIGN="TOP" MOREROWS="0"444COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Table CCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"class_typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"cdateCOLNAME="1" VALIGN="TOP" MOREROWS="0"YCOLNAME="2" VALIGN="TOP" MOREROWS="0"CCOLNAME="3" VALIGN="TOP" MOREROWS="0"940708COLNAME="1" VALIGN="TOP" MOREROWS="0"ZCOLNAME="2" VALIGN="TOP" MOREROWS="0"CCOLNAME="3" VALIGN="TOP" MOREROWS="0"940709ID="21782"AssociationIntroductionWhich SQL code is generated for persistent classes in an association depends on the multiplicity of the association. This subsection contains some examples of associations with a different multiplicity.PropertiesThe following association properties affect SQL code generation:n RI propertiesFor more informationReferential Integrity is further discussed in REFID="24352" TYPE="XREF-TEXTCOPY"Customizing Referential Integrity Policies.Multiplicity: one (optional)In relationships that meet the following multiplicity requirements, it does not matter which table acts as master and which as detail:n a multiplicity of one at one siden a multiplicity that is not many at the other sideHowever, since there has to be a master and a detail, the rule is that the destination class becomes master. The destination class is the class to which the association was drawn in the CD. The class from which the association was drawn becomes the detail. The association in the diagram below meets the requirements. The master-detail pair is:A(master) - B(detail)although it could have been B(master) - A(detail) too. Which class is destination class cannot be detected in the diagram. You could detect this, though, using the Properties dialog box. The role name at the side of the the source class is called Association Role At Start and the one at the side of the destination class Association At Role End.FILENAME="00755.unk" ORIGFILE="pics/sqasm1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"create_tables.sql:-- Create table ACREATE TABLE A (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type VARCHAR(32) ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (aName, class_type));-- Create table BCREATE TABLE B (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (bName, class_type));ALTER TABLE Aname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (bName, i_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES B;Warning: If you draw an association with a multiplicity of one (mandatory) at both sides no sql scripts will be generated because of insert policy conflicts. The following error message is issued:ERROR [340023]: Conflict in the insert policies between detail table 'classC2' and master table 'classC1'. They are excluding each other.Refer to REFID="31513" TYPE="XREF-TEXTCOPY"SQL types for details.Multiplicity: many (optional)In relationships that meet the following requirements, the class at the end of the many multiplicity acts as detail in the master-detail pair:n The association has no class or link attribute associated to itn The multiplicity is not many at either ends n The relationship is not qualifiedThe diagrams depicted below meet these requirements. The master-detail pairs are:COLS="2"COLNAME="1" COLWIDTH="219p"COLNAME="2" COLWIDTH="229p"COLNAME="1" VALIGN="TOP" MOREROWS="0"(1) (2)COLNAME="2" VALIGN="TOP" MOREROWS="0"(3)COLNAME="1" VALIGN="TOP" MOREROWS="0"A(master) - B(detail)COLNAME="2" VALIGN="TOP" MOREROWS="0"A(master) - A(detail).Diagram 1FILENAME="00756.unk" ORIGFILE="pics/sqasmo1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"Diagram 2FILENAME="00757.unk" ORIGFILE="pics/sqasmo2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"Diagram 3FILENAME="00758.unk" ORIGFILE="pics/sqasmo3.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"create_tables.sql (1):...CREATE TABLE A (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (aName, class_type));...CREATE TABLE B (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (bName, class_type));ALTER TABLE Bname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (aName, i_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;Multiplicity: many -many (m:n)For relations that meet the following requirements, an extra table with the name of the association is generated:n The association has no class or link attribute associated to itn If the relationship is not qualified, the multiplicity of the relationship is many at both sides (m-n relationship).The diagram depicted below meets these requirements. The extra table assoc that is generated acts as detail in the master-detail pairs:A(master) - assoc (detail) B(master) - assoc (detail)FILENAME="00759.unk" ORIGFILE="pics/sqasmm.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"create_tables.sql:...CREATE TABLE assoc (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (bName, class_type, aName, i_class_type));...CREATE TABLE A (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (aName, class_type));...CREATE TABLE B (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (bName, class_type));ALTER TABLE assocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (bName, class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES B;ALTER TABLE assocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (aName, i_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;ID="21074"Association with a TERM1="link attribute" TERM2="in persistent (SQL) code generation"Link ObjectMaster-detail pairsIn associations that have a class or a link attribute box associated to them, the associative object acts as detail in the master-detail-pairs. In the example diagrams depicted below, the master-detail pairs are:COLS="2"COLNAME="1" COLWIDTH="208p"COLNAME="2" COLWIDTH="240p"COLNAME="1" VALIGN="TOP" MOREROWS="0"(1)COLNAME="2" VALIGN="TOP" MOREROWS="0"(2)COLNAME="1" VALIGN="TOP" MOREROWS="0"A(master) - C (detail)COLNAME="2" VALIGN="TOP" MOREROWS="0"A(master) - assoc (detail)COLNAME="1" VALIGN="TOP" MOREROWS="0"B(master) - C (detail)COLNAME="2" VALIGN="TOP" MOREROWS="0"B(master) - assoc (detail)ExampleDiagram 1FILENAME="00760.unk" ORIGFILE="pics/sqasln1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"Diagram2FILENAME="00761.unk" ORIGFILE="pics/sqasln2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"create_tables.sql (2):...CREATE TABLE assoc (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cName CHAR(40) ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (bName, class_type));...CREATE TABLE A (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (aName, class_type));...CREATE TABLE B (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (bName, class_type));ALTER TABLE assocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (bName, class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES B;ALTER TABLE assocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (aName, i_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;ID="21059"Qualified AssociationIntroductionThe SQL code generated for qualified associations is similar to the code generated for non-qualified associations (see REFID="21782" TYPE="XREF-TEXTCOPY"Association). Additionally, an extra table with the same name as the association is generated for qualified associations. The association must not have a class or link attribute associated to it. ExampleDiagram 1FILENAME="00762.unk" ORIGFILE="pics/sqasmn1.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"Diagram 2FILENAME="00763.unk" ORIGFILE="pics/sqasmn2.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"create_tables.sql:...CREATE TABLE assoc (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'i_class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Q INT NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (aName, class_type, bName, i_class_type, Q));...CREATE TABLE A (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aDate INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (aName, class_type));...CREATE TABLE B (name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName CHAR(40) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'class_type VARCHAR(32) NOT NULL ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bName INT ,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRIMARY KEY (bName, class_type));ALTER TABLE assocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (aName, class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES A;ALTER TABLE assocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ADD CONSTRAINT FOREIGN KEY (bName, i_class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'REFERENCES B;ID="13730"ID="20418"Persistent NewEra Code TERM1="code generation" TERM2="persistent (NewEra)"TERM1="persistent code generation" TERM2="NewEra"GenerationTERM1="code generation" TERM2="persistent"TERM1="persistent code generation"IntroductionThe NewEra code generator generates NewEra classes from persistent classes in CDs. A runtime system takes care of the mapping of these generated classes onto the target RDBMS.In this sectionThis section contains a description of the runtime system used to map NewEra classes onto the target RDBMS. It contains the following subsections, and it discusses how certain constructions are generated into NewEra code:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17255" TYPE="XREF-TEXTCOPY"The Runtime System 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14975" TYPE="XREF-TEXTCOPY"The Class DBObject 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22004" TYPE="XREF-TEXTCOPY"Generated Functions 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'24COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20353" TYPE="XREF-TEXTCOPY"Data Attribute 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18253" TYPE="XREF-TEXTCOPY"Data Attribute Properties 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34523" TYPE="XREF-TEXTCOPY"Constructor 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'33COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42591" TYPE="XREF-TEXTCOPY"Generalizations 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'35COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37283" TYPE="XREF-TEXTCOPY"Associations 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'37COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27716" TYPE="XREF-TEXTCOPY"Example 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'38ID="17255"The Runtime SystemIntroductionThe runtime system takes care of the mapping of persistent classes onto the target database. One of the main elements in the runtime system is the class DBObject, which is part of the class library lw4omtne.For more information:The functions the class DBObject offers are discussed in REFID="14975" TYPE="XREF-TEXTCOPY"The Class DBObject. The generated member functions for persistent classes for the purpose of the runtime system are discussed in REFID="22004" TYPE="XREF-TEXTCOPY"Generated Functions.The generation of SQL scripts, which is also part of the runtime system, is discussed elsewhere in this manual, in REFID="37874" TYPE="XREF-TEXTCOPY"SQL Generation. Root classIn this sub section, the term persistent root class is used. It refers to a persistent class that has no super class. Persistent sub classes in a generalization are treated differently from persistent root classes.ID="14975"The Class DBObjectIntroductionThe class DBObject is part of the class library lw4omtne (see REFID="18476" TYPE="XREF-TEXTCOPY"Class Library lw4omtne). It offers some general functions regarding database connection and transaction support for the runtime system. FunctionsBelow, functions for database connection and transaction support are listed, together with some brief comments. The comments have leading dashes (--):-- Connect to the specified database, using the specified connection object.-- This function must be called before any database operation can be executed.-- When no connection object is specified, the implicit connection object is-- used. Returns 0 on success, else -1.--SHARED FUNCTION connectDB(dbName CHAR(*), connObj ixSQLConnect: NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNING INTEGER-- Get the connection object used for making the current database connection.--SHARED FUNCTION getConnection() RETURNING ixSQLConnect-- Close the database connection made with the current connection object.--SHARED FUNCTION disconnectDB() RETURNING VOID-- Commit or rollback the current transaction. Both functions use the-- transaction facilities of the connection object.--SHARED FUNCTION commit() RETURNING INTEGERSHARED FUNCTION rollback() RETURNING INTEGERThe class DBObject also serves as base class for every persistent root class. (A root class is a persistent class without a super class). It provides every persistent class with the following interface:-- Get the case sensitive class name of the object.--FUNCTION getClassName() RETURNING ixString-- Get the value of the internal 'database state' of the object.-- This value is one of CREATED (the default; the object is just created),-- NORMAL (everything is fine)-- and SQL_ERROR (SQL error occurred).--FUNCTION getState() RETURNING SMALLINT-- Set the internal 'database state' to INIT_ERROR.-- This function is typically called when the initialization of an object-- failed just after the construction of an object.--FUNCTION resetState() RETURNING VOID-- Process the SQL status after execution of SQL statement stmt. After-- this function is called , the internal 'database state' of the object-- is either NORMAL or SQL_ERROR. In case of SQL_ERROR, the public variable-- errorStmt is set to stmt. Returns -1 if the SQL status indicates an-- error, else 0.--PUBLIC VARIABLE errorStmt ixSQLStmtFUNCTION processSqlStatus(stmt ixSQLStmt) RETURNING INTEGER-- Get the ODBC error message of the failing SQL statement stmt.--SHARED FUNCTION getODBCErrMsg(stmt ixSQLStmt) RETURNING CHAR(*)ID="22004"Generated FunctionsIntroductionThe NewEra code generator generates a number of member functions for classes on the purpose of the runtime system. Some of these functions are generated for all classes and some exclusively for persistent root classes. ID="17541"Functions generated exclusively for persistent root classes The following functions are generated for root classes only. You can call them directly.Warning: You should not specify these functions as operations in the class definition in a CD.-- Get a rootclass or one of its subclasses instantiated by supplying the-- keys of the class. Returns a rootclass object reference when it is found-- in the database, else NULL.--SHARED FUNCTION findInDB(<keysOfPersClass>) RETURNING <persClass>-- Get the <persClass>Set filled with base class object references that meet-- the query criteria in the whereClause. The whereClause should be a valid SQL-- here clause (without the reserved word "WHERE") in the context of the-- rootclass. Returns 0 on success, else -1.--SHARED FUNCTION searchInDB(<persClass>Set RefSet, whereClause ixString : NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNING INTEGERFunctions generated for all persistent classes The following functions for writing objects to and reading objects from the database are generated for all persistent classes. You can call these functions directly:-- Insert a new persistent object in the database. New in this context means-- that the object does not yet exist in the database. This function is-- typically used after a persistent object has been instantiated and its-- attributes are set. After calling this function the data in the database-- is up to date with the data in the object itself. Returns 0 on success,-- else -1.--PUBLIC FUNCTION insertInDB() RETURNING INTEGER-- Read an existing persistent object from the database. Existing in this-- context means that the object does exist in the database. This function-- is typically used after a persistent object has been instantiated. For-- instance, the function findInDB mentioned before uses this function.-- After calling this function the data in the object is up to date with the-- data in the database. Returns 0 on success, else -1.--PUBLIC FUNCTION readFromDB() RETURNING INTEGER-- Delete an existing persistent object from the database. This function is-- typically used after a persistent object has been instantiated in order-- to delete it from the database. After calling this function, the data of-- the object is deleted from the database, however the NewEra object itself-- still exists. Returns 0 on success, else -1.--PUBLIC FUNCTION deleteFromDB() RETURNING INTEGER-- Update an existing persistent object in the database. This function is-- typically used after a persistent object has been instantiated, read from-- the database and had some of its attributes changed. After calling this-- function the data in the database is up to date with the data in the-- object itself. Returns 0 on success, else -1.--PUBLIC FUNCTION updateInDB() RETURNING INTEGERFunctions generated for instantiating a persistent class through the function findInDBA number of generated functions are needed by the runtime system to instantiate a persistent class through the function findInDB (see REFID="17541" TYPE="XREF-TEXTCOPY"Functions generated exclusively for persistent root classes). These functions are listed here.Warning: You cannot call these functions directly!-- Get a rootclass or one of its subclasses instantiated by supplying the-- keys of the class and the class_type. Class_type is the extra attribute that-- every persistent class gets automatically (both in the database and in the-- persistent NewEra classes itself). This function is generated in a persistent-- rootclass only. It is called by the function findInDB. Returns a rootclass-- object reference when it is found in the database, else NULL. -- This function must not be called by the user directly.--PRIVATE SHARED FUNCTION findInDBByType(<keysOfPersClass>, class_type)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNING <persClass>-- This function is not a member of the persistent class itself, but of the-- companion class named <persClass>Instantiator. This class is (temporary)-- instantiated by the function findInDBByType. The function just calls the-- function <persClass>::instantiate. The companion class must not be-- instantiated by the user directly!--FUNCTION <persClass>Instantiator::instantiate(<keysOfPersClass>)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNING <persRootClass>-- Instantiate a persistent class object, read its data from the database and-- return a rootclass reference to the object. This function is generated in-- every persistent class. It is called by the function instantiate of class-- <persClass>Instantiator, which is the reason it is publicly accessible. This-- function must not be called by the user directly!--SHARED FUNCTION instantiate(<keysOfPersClass>) RETURNING <persRootClass>ID="20353"Data TERM1="data attribute" TERM2="in persistent (NewEra) code generation"AttributeSyntaxUse the following syntax when you specify the TERM1="data attribute" TERM2="syntax"SEE="data attribute" TERM1="attribute"data attributes of a class:FILENAME="00764.tif" ORIGSEQ="17" ORIGTYPE="I" ORIGDOC="../../sources/ne/nepers.fm5.mif"Generated NewEra constructionAn attribute does not result in a single private data member in the generated class. Instead, attribute values of a persistent object are stored in an ixRow object. The class ixRow is part of the NewEra Data Class Library (DCL).The data member in the generated class that refers to the object ixRow is called <className>Data:...INCLUDE SYSTEM "ixrow.4gh"...CLASS myClassInstantiatorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PUBLIC VARIABLE myClassData ixRowEND CLASSThis data member is instantiated at object construction time by copying an ixRow object named <persClass>RowSchema. This object is a SHARED data member in the generated class:myClass.4gh:...INCLUDE SYSTEM "ixrow.4gh"...CLASS myClass DERIVED FROM DBObjectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SHARED PRIVATE VARIABLE myClassRowSchema ixRowEND CLASSmyClass.4gl:...FUNCTION myClass::myClass()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LET myClassData = COPY myClassRowSchema...The object ixRow that is constructed already contains ixValue objects that will hold the actual attribute values. There is a one-to-one mapping between ixValue objects in the ixRow and the columns in the database table of the persistent class. Initially these ixValue objects are empty.For every object in the ixRow a corresponding constant named <className><columnName> will be generated in the header of the class. (The <className> prefix is required for making the constant unique.)myClass.4gh:...CONSTANTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'myClassMyAtt1 = 1,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'myClassClass_type = 2,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'myClassMyAtt2 = 3...The values of these constants serve as an index in the ixRow holding the data of the class.ID="35019"Generated get and set functionsDepending on the value for the property Attribute Access (see REFID="42104" TYPE="XREF-TEXTCOPY"Attribute Access) the following get and set functions are generated for data attributes:get<attribName>() RETURNING <type>get<attribName>Val() RETURNING <ixType>set<attribName>(new<attribName> RETURNING <type>)set<attribName>Val(new<attribName> RETURNING <ixtype><type> must be a standard type. <ixtype> is the NewEra data class that can hold a value of type <type>. <ixtype> is a class that is derived from the NewEra class ixValue, e.g. ixString or ixInteger. For example:myClass.4gh:...CLASS myClass DERIVED FROM DBObject...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION getMyAtt1() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION getMyAtt1Val() RETURNING ixIntegername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION getMyAtt2() RETURNING INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION getMyAtt2Val() RETURNING ixIntegername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION setMyAtt2(newMyAtt2 INTEGER) RETURNING VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTION setMyAtt2Val(newMyAtt2 ixInteger) RETURNING VOID...Key attributesKey attributes are data attributes with a leading asterisk in the CD. Sub classes in a generalization are not allowed to have key attributes; they inherited the key attribute(s) from the super class. All other persistent classes must have at least one key attribute specified.During code generation, key attributes are added to the parameter list of the functions NEW<className>*. For more informationThese functions are discussed in the section REFID="34523" TYPE="XREF-TEXTCOPY"Constructor and further.In the following example, there are no extra parameters (i.e. non-nullable attributes, mandatory associations, qualifiers) in the persistent class. As a result, key attributes are added to the parameter list in the function:NEW<className> (<keyAttributes>) RETURNING <className>.myClass.4gh:...CLASS myClass DERIVED FROM DBObject...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SHARED FUNCTION NEWmyClass(myAtt1 ixInteger) RETURNING myClass...In this example, there is only one key attribute: myAtt1.Note: The set functions that are generated for data attributes (see REFID="35019" TYPE="XREF-TEXTCOPY"Generated get and set functions) are not generated for key attributes.Standard TypesIn CDs, standard data types are used to define the data type of an attribute. These data types are mapped to target-dependent database types during persistent code generation. The standard data types can be found in the customization file:M4_home\etc\t_inf\l_ne\stand_types The following customization file is used to map the standard types to database types:M4_home\etc\t_inf\l_ne\db_types For more informationSee REFID="42656" TYPE="XREF-TEXTCOPY"Customizing Data Types and further for more information on these files.Warning: In persistent classes, you are not allowed to specify a class as the data type of an attribute.Initial valueThe initial value of an attribute is used to assign a value to the data member at the object construction time. The value is assigned in the body of the constructor.myClass.4gl:...FUNCTION myClass::myClass()...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALL setMyAtt2(65)...The initial value specified in the CD was 65.ID="18253"Data Attribute PropertiesWhich data attribute properties can you specifyThe following properties that affect persistent code generation can be specified for data attributes:n REFID="42104" TYPE="XREF-TEXTCOPY"Attribute Accessn REFID="20897" TYPE="XREF-TEXTCOPY"NullableTERM1="attribute access" TERM2="property"ID="42104"Attribute AccessThe TERM1="get"TERM1="set"get (=read) and set (=write) member functions that are generated from the data attributes can be specified as TERM1="public section" TERM2="accessibility"Public, TERM1="protected section" TERM2="accessibility"Protected or TERM1="private section" TERM2="accessibility"Private.Set the accessibility property TERM1="accessibility" TERM2="data attribute"Attribute Access to indicate in which section the member function must be placed.You can specify the following values:COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Get (=Read)COLNAME="2" VALIGN="TOP" MOREROWS="0"Set (=Write)COLNAME="1" VALIGN="TOP" MOREROWS="0"Public (default)ProtectedPrivateNoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"Public (default)Protected PrivateNoneThe values Public, Protected and Private result in the function having access control qualification PUBLIC, PROTECTED or PRIVATE. None indicates that the access function will not be generated.ID="20897"NullableData attributes for which the property Nullable is set to no are non-nullable attributes. During code generation, non-nullable attributes are added to the list of <otherArguments> in the function:NEW<className>(<keyAttributes>, <otherArguments>) RETURNING <className>This function is further discussed in REFID="17255" TYPE="XREF-TEXTCOPY"The Runtime System.myClass.4gh:...CLASS myClass DERIVED FROM DBObject...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SHARED FUNCTION NEWmyClass(i_myAtt1 ixInteger, i_myAtt2 ixInteger) RETURNING myClass...In this example, there is one key attribute myAtt1 and one non-nullable attribute myAtt2.ID="34523"ConstructorIntroductionNewEra does not support function overloading. As a result, a class is allowed to have only one constructor. However, the constructor used by the runtime system (see REFID="17255" TYPE="XREF-TEXTCOPY"The Runtime System and further) only has the key attributes of the persistent class as parameters, whereas the constructor to be used by the user can have additional parameters dealing with:n non-nullable attributesn mandatory associationsn qualifiers To handle these additional parameters, SHARED NEW functions are generated. Generated SHARED NEW functionsWhich functions are generated depends on the existence of additional parameters in the persistent class:n If there are no additional parameters (one NEW function):-- Function to be used by runtime system AND user to instantiate class.--SHARED FUNCTION NEW<className>(<keyAttributes>) RETURNING <className>n If there are additional parameters (two NEW functions):-- Function to be used by runtime system to instantiate class.--SHARED FUNCTION NEW<className>ByKeys(<keyAttributes>) RETURNING <className>-- Function to be used by user to instantiate class.--SHARED FUNCTION NEW<className>(<keyAttributes>, <otherArguments>)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNING <className>What do these functions doThe generated NEW functions first instantiate the class by using the real constructor which is generated automatically by the NewEra code generator. Then, they initialize the instance by calling one of the following functions, which are also automatically generated:FUNCTION init<className>(<keyAttributes>) RETURNING INTEGERorFUNCTION init<className>ByKeys(<keyAttributes>) RETURNING INTEGERFUNCTION init<className>(<keyAttributes>, <otherArguments>)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNING INTEGEROperation $createThe consequence of the way the NewEra code generator handles the additional parameters, is that you are not allowed to specify an operation named $create in the definition of a persistent class.The code generator issues an error message if it does encounter such an operation and it will stop generating code. ID="42591"GeneralizationsIntroductionPersistent classes in a generalization are treated similarly to non-persistent classes in a generalization. Persistent and non-persistent classes are instantiated differently, however. As a consequence, you cannot specify a persistent class as sub class of a non-persistent super class, or vice versa.For more informationFor more information on non-persistent classes in a generalization, refer to: REFID="27879" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to NewEra Non-Persistent Code.Differences with non-persistent code generationA persistent root class must have key attributes. A persistent sub class is not allowed to have key attributes since it inherits the key attribute(s) from its super class.The class will look like:COLS="1"COLNAME="1" COLWIDTH="486p"COLNAME="1" VALIGN="TOP" MOREROWS="0"InformixCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"...COLNAME="1" VALIGN="TOP" MOREROWS="0"class DbDerPerson : public DbPerson {COLNAME="1" VALIGN="TOP" MOREROWS="0"public:COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int getSalary() const;COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'int salaryIsNull() const;COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'void satSalary(int newsalary);COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'void nullifySalary();COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbDerPersonRow data;COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DbDerPersonInd nullInd;COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...COLNAME="1" VALIGN="TOP" MOREROWS="0"};COLNAME="1" VALIGN="TOP" MOREROWS="0"The implementations are:COLS="1"COLNAME="1" COLWIDTH="486p"COLNAME="1" VALIGN="TOP" MOREROWS="0"InformixCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"inline int DbDerPerson::getSalary() constCOLNAME="1" VALIGN="TOP" MOREROWS="0"{COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return data.salary;COLNAME="1" VALIGN="TOP" MOREROWS="0"}COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"inline int DbDerPerson::salaryIsNull() constCOLNAME="1" VALIGN="TOP" MOREROWS="0"{COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return nullInd.salary == -1;COLNAME="1" VALIGN="TOP" MOREROWS="0"}COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"inline int DbDerPerson::nullifySalary()COLNAME="1" VALIGN="TOP" MOREROWS="0"{COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'nullInd.salary = -1;COLNAME="1" VALIGN="TOP" MOREROWS="0"}COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"inline int DbDerPerson::COLNAME="1" VALIGN="TOP" MOREROWS="0"{COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'data.salary = newsalary;COLNAME="1" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'nullInd.salary = 0;COLNAME="1" VALIGN="TOP" MOREROWS="0"}COLNAME="1" VALIGN="TOP" MOREROWS="0"ID="37283"AssociationsDifferences with non-persistent code generationFor an association between two persistent classes in a CD member functions to manipulate the association are generated in one or both the classes. These functions have the same name as in the non-persistent code generation but the parameters and return type are slightly different. The return type is always INTEGER to indicate failure or success, except when a reference to one persistent object is returned.In non-persistent classes an association is maintained by setting an additional data member (i.e. an object reference or a set of object references) in one or both classes involved. In persistent classes an association is maintained by setting data in the database directly: the association is implemented via imported keys in database tables.ID="41833"Association propertiesYou can specify the same properties for associations between persistent classes as you can for associations between non-persistent classes.For more informationFor more information on non-persistent association properties, refer to REFID="40839" TYPE="XREF-TEXTCOPY"Association Properties.Association with TERM1="link attribute" TERM2="in persistent (NewEra) code generation"link objectsAssociations between persistent classes that have a link attribute box or a linked class attached to them are generated similarly to associations between non-persistent classes.For more informationFor more information on non-persistent associations with link objects, refer to REFID="17049" TYPE="XREF-TEXTCOPY"Association with Link Objects.ID="27716"ExampleIntroductionThe following CD displays the relation between a Person and the Company he or she is working for. Both the classes Person and Company are persistent classes for which SQL and Persistent NewEra code is generated.FILENAME="00765.unk" ORIGFILE="pics/esqperco.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/nepers.fm5.mif"Below, a simple NewEra main file with the following functions is displayed:n Three instances of the class Person are created (insertAll)n Two instances of the class Company are created (insertAll)n Instances of the class Person are associated to instances of the class Company (insertAll)n All Persons working for a Company are listed (listAll)n All instances of the classes Person and Company are removed (removeAll)This simple NewEra program contains calls to functions that are made available in NewEra. These calls are printed in bold.INCLUDEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Company.4gh"INCLUDEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Person.4gh"FUNCTIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertAll()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNINGname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Variablename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'declarationsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ixString("Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'One"),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ixString("Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Two"),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p3name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ixString("Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Three")name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ixString("Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'One"),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ixString("Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Two")name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Createname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'anname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companiesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'inname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Createname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Persons."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Person::NEWPerson(p1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1.setBornIn(1964)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1.insertInDB()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1.commit()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Person::NEWPerson(p2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2.setBornIn(1966)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2.insertInDB()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2.commit()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Person::NEWPerson(p3)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3.setBornIn(1968)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3.insertInDB()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person3.commit()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Createname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companies."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Company::NEWCompany(c1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1.setFoundedIn(1980)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1.insertInDB()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Company::NEWCompany(c2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2.setFoundedIn(1985)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2.insertInDB()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject::commit()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'commitname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'forname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bothname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'companiesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'--name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Relatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companiesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'relationsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'betweenname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'andname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companies."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ANDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person1.setEmployer(company1)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ANDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'company2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'person2.setEmployer(company2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject::commit()ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTIONFUNCTIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNINGname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'personSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RefSet()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Listname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'allname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'withname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'theirname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Company."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Person::searchInDB(personSet,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Internalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'error:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Person::searchInDBname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'failed."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'personSet.first()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CASTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHILEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p.getName(),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'bornname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'inname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'",name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p.getBornIn()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p.getEmployer()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'worksname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'atname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'",name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c.getName(),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'foundedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'inname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'",name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c.getFoundedIn()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ELSEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'isname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'unemployed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'personSet.next()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CASTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHILEENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTIONFUNCTIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'deleteAll()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNINGname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VOIDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'personSetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RefSet()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'companySetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RefSet()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'VARIABLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Removename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'allname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Persons"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Person::searchInDB(personSet,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'personSet.first()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CASTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHILEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'p.deleteFromDB()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'pname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'personSet.next()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CASTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Personname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHILEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Removename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'allname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companies."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Company::searchInDB(companySet,name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULL)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'companySet.first()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CASTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHILEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ISname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NOTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NULLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'c.deleteFromDB()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'companySet.next()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CASTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Companyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'WHILEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'LETname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'resultname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject::commit()ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FUNCTIONMAINname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NUM_ARGS()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ORname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NUM_ARGS()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Usage:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'",name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ARG_VAL(0),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<databasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name>name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[insert|delete]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DBObject::connectDB(ARG_VAL(1))name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'<name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Connectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'databasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''",name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ARG_VAL(1),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'failed."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ELSEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DISPLAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Databasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''",name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ARG_VAL(1),name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'connected."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NUM_ARGS()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ANDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ARG_VAL(2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"insert"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'insertAll()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NUM_ARGS()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ANDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ARG_VAL(2)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'==name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"delete"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'THENname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'deleteAll()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CALLname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listAll()name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'IFname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'RETURNENDname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MAINChapter 5 Modeling ID="16738"the User InterfaceTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraTERM1="wif template file" TERM2="generating"TERM1="generating" TERM2="wif template file"IntroductionThis chapter explains how you can use ObjectTeam to model and generate the graphical user interface of your NewEra application. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23113" TYPE="XREF-TEXTCOPY"Modeling GUI Objects 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23471" TYPE="XREF-TEXTCOPY"Generating WIF Template Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9ID="23113"Modeling GUI ObjectsIntroductionIn NewEra, the graphical user interface (GUI) of an application is represented in ASCII files with the extension wif. The NewEra Window Painter is normally used to create and manipulate these files interactively.ObjectTeam can be used to generate wif template files automatically. You can use these generated templates to further complete the graphical user interface of your application.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36245" TYPE="XREF-TEXTCOPY"GUI Classes 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41134" TYPE="XREF-TEXTCOPY"Example 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="36245"TERM1="GUI Class"GUI ClassesIntroductionYou use the CD to model GUI classes. These classes are non-persistent classes in the OOPL model for which the property Referred Class is set. From these classes wif template files, in stead of source files (4gl) and header files (4gh), are generated by ObjectTeam.In a GUI class you define:n for which data attributes of the referred persistent class you want to generate SuperFields in the wif template filen for which operations you want to generate Buttons in the wif template fileHow to create a simple GUI classΣ To create a GUI class in the Object Design phase:1 Decide which persistent class you want to create the GUI class for.The scope of this referred class should be such that it can be seen by the GUI class you are about to create.2 Open up a CD.3 Create a class.4 Enter a name for the class.This name will be the name of the Window object in the wif template file that is being generated.5 Enter the names of the data attributes for which you want a SuperField generated in the wif template file.These attributes must correspond to data attributes of the referred class. Make sure you include at least the key attributes and the non-nullable attributes of the referred class. The non-nullable attributes together with the key attribute(s) are required to instantiate a persistent class.Specify also the types of attributes in GUI classes. These are not used by the NewEra code generator, but are required for building up the OOPL model correctly.6 Enter the names of the operations for which you want a SuperTable Button in the wif template file.You can specify the following kinds of operations:- predefined- user-definedThe active handler belonging to the button that is generated from a predefined operation is automatically generated during wif generation. The generated active handler of a user-defined button is empty.The following predefined operations are available:COLS="2"COLNAME="1" COLWIDTH="216p"COLNAME="2" COLWIDTH="216p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Predefined OperationCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"ApplyAllCOLNAME="2" VALIGN="TOP" MOREROWS="0"NextPageCOLNAME="1" VALIGN="TOP" MOREROWS="0"ApplyRowCOLNAME="2" VALIGN="TOP" MOREROWS="0"NextRowCOLNAME="1" VALIGN="TOP" MOREROWS="0"DeleteRowCOLNAME="2" VALIGN="TOP" MOREROWS="0"PreviousPageCOLNAME="1" VALIGN="TOP" MOREROWS="0"FirstRowCOLNAME="2" VALIGN="TOP" MOREROWS="0"PreviousRowCOLNAME="1" VALIGN="TOP" MOREROWS="0"HelpCOLNAME="2" VALIGN="TOP" MOREROWS="0"QueryCOLNAME="1" VALIGN="TOP" MOREROWS="0"InsertRowCOLNAME="2" VALIGN="TOP" MOREROWS="0"RetrieveCOLNAME="1" VALIGN="TOP" MOREROWS="0"LastRowCOLNAME="2" VALIGN="TOP" MOREROWS="0"RevertRowSo if you specify, for example, an operation InsertRow(), a button InsertRow is generated in the wif template file, including the accompanying active handler code.Warning: Bear in mind that the names of these operations are case sensitive.7 Select Item | Edit Properties for the GUI class.The Properties dialog box appears.8 Select the class name and enter in the field TERM1="Referred Class" TERM2="class property"Referred Class the name of the persistent class you create the GUI class for.9 Click OK to store the property value.10 Select File | Save to save the CD.FILENAME="00766.unk" ORIGFILE="pics/prprefcl.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/newifgen.fm5.mif"Referring to Persistent Sub ClassesIf the class you refer to in your GUI class turns out to be a sub class in a generalization, the key attributes are handled differently by the WIF code generator. In a generalization, the sub class inherits key attributes from its super class. Therefore, these key attributes are generated into SuperFields in the wif template file. Make sure you also include non-nullable attributes of both the super class and the sub class in your GUI class, otherwise the WIF code generator will issue an error message.What happens to the Properties in a TERM1="GUI class" TERM2="properties"GUI classExcept for the properties Referred Class and Persistent, the WIF code generator ignores all the properties you specify for a GUI class, or a data attribute or an operation in a GUI class. It takes however, the properties of the referred class into account.Do not set the property Persistent for a GUI class. If you still do so, the NewEra code generator considers the class as a persistent class and it will generate a 4gh and 4gl file in stead of a wif template file.If you forget to specify a value for the property Referred Class, the NewEra code generator considers the class as a normal class, for which it will generate a 4gh and 4gl file in stead of a wif template file. If the referred class turns out to be a non-persistent class, the code generator issues an error message.ID="41134"Example Business modelThe following CD is an example of a simple business model for a NewEra application.FILENAME="00767.unk" ORIGFILE="pics/busimod.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/newifgen.fm5.mif"To model the graphical user interface for this application, you need to create GUI classes that refer to the persistent classes in this business model. GUI ModelThe following CD contains examples of some GUI classes. The attributes of a GUI class refer to the attributes of the referred persistent class. Only the attributes that are included in the GUI class are generated for the window object. The operations in the GUI classes are generated into button objects.FILENAME="00768.unk" ORIGFILE="pics/guimod.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/newifgen.fm5.mif"The following table shows the referred class of every GUI class in this diagram:COLS="2"COLNAME="1" COLWIDTH="175p"COLNAME="2" COLWIDTH="273p"COLNAME="1" VALIGN="TOP" MOREROWS="0"GUI ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Referred Class In Business ModelCOLNAME="1" VALIGN="TOP" MOREROWS="0"mt_compCOLNAME="2" VALIGN="TOP" MOREROWS="0"companyCOLNAME="1" VALIGN="TOP" MOREROWS="0"mt_custCOLNAME="2" VALIGN="TOP" MOREROWS="0"customerCOLNAME="1" VALIGN="TOP" MOREROWS="0"ordersCOLNAME="2" VALIGN="TOP" MOREROWS="0"orderCOLNAME="1" VALIGN="TOP" MOREROWS="0"mt_orgCOLNAME="2" VALIGN="TOP" MOREROWS="0"organisationCOLNAME="1" VALIGN="TOP" MOREROWS="0"linesCOLNAME="2" VALIGN="TOP" MOREROWS="0"productGenerated Wif Template FilesDuring code generation, the GUI classes are generated into wif template files. If you open such a file in the NewEra Window Painter (see REFID="35540" TYPE="XREF-TEXTCOPY"The NewEra Window Painter), it looks like one of the windows depicted below. This example shows the following generated wif template files: orders.wif, lines.wif, and mt_comp.wif.orders.wifFILENAME="00769.unk" ORIGFILE="pics/orderwif.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/newifgen.fm5.mif"lines.wifFILENAME="00770.unk" ORIGFILE="pics/lineswif.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/newifgen.fm5.mif"mt_comp.wifFILENAME="00771.unk" ORIGFILE="pics/mtcmpwif.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/newifgen.fm5.mif"ID="23471"Generating TERM1="WIF Template File" TERM2="generating"WIF Template FilesIntroductionObjectTeam can be used to generate wif template files automatically. This section discusses how to generate wif template files automatically in ObjectTeam and how to use the NewEra Window Painter in combination with ObjectTeam to further complete the graphical user interface of your application.It also lists the properties and event handlers that are generated for graphical objects in wif template files.How to Generate wif template filesΣ To generate a wif template file from a GUI class:1 Make sure the current browser level is System in the Implementation phase.The active system must be the same system that contains the GUI classes in the Object Design phase.2 Select Utilities | Import from Previous Phase.The Import New dialog box appears.3 Select OOPL from the dialog box and click OK.A Monitoring Window starts up reporting on the generation of wif template files. If the generation is successful, new browser object(s) of the type TERM1="wif_tmpl"wif_tmpl are created on Implementation System level. This file extension stands for Window Intermediate File template.The name of a generated wif template file is the same as that of the GUI class.4 Open the NewEra Window Painter to complete the generated wif template files.See REFID="35540" TYPE="XREF-TEXTCOPY"The NewEra Window Painter for details.Contents of a wif template fileA wif template file generated from a GUI class in the OOPL model contains the following graphical objects:COLS="3"COLNAME="1" COLWIDTH="40p"COLNAME="2" COLWIDTH="40p"COLNAME="3" COLWIDTH="366p"NAMEST="1" NAMEEND="3" SPANNAME="S1T3"NAMEST="2" NAMEEND="3" SPANNAME="S2T3"SPANNAME="S1T3" VALIGN="TOP" MOREROWS="0"Window objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"SPANNAME="S2T3" VALIGN="TOP" MOREROWS="0"SuperTable objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Column of SuperField objectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Row of SuperTable ButtonsWindow objectThis object is derived from the NewEra class ixWindow. It contains the SuperTable object.SuperTable objectThis object is an instance of the class ixSuperTable or a class derived from this class. It contains:n a column of SuperField objectsn a row of SuperTable ButtonsSuperField objectThis object is an instance of the class ixSuperField or a class derived from this class. There is one SuperField object for every attribute that must be displayed in the Window, including inherited attributes.SuperTable ButtonThis object is an instance of the class ixButton or a class derived from this class. There is one Button for every operation, e.g.: Query, and Retrieve.For more informationEvery object in a wif template file has properties and event handlers assigned to it. Refer to REFID="23227" TYPE="XREF-TEXTCOPY"Properties of Generated WIF Objects and further for details on these properties. For more information on wif files and the wif language (wifl) in general refer to the INFORMIX-NewEra manual Graphical and Connectivity Reference.In his sectionThis section contains the following section:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35540" TYPE="XREF-TEXTCOPY"The NewEra Window Painter 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23098" TYPE="XREF-TEXTCOPY"Regenerating WIF Template Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23227" TYPE="XREF-TEXTCOPY"Properties of Generated WIF Objects 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16111" TYPE="XREF-TEXTCOPY"Event Handlers of Generated WIF Objects 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="35540"The TERM1="NewEra" TERM2="Window Painter"TERM1="Window Painter"NewEra Window PainterIntroductionThe wif template files generated by ObjectTeam are just a staring point for developing the graphical user interface of your application. How to use the Window PainterΣ After a wif template file is generated, you should do the following:1 Start up the NewEra Window Painter.2 Open the generated wif template file.The generated wif template file is represented graphically, including fields and buttons.3 Use the Window Painter to edit the generated window.Besides beautifying the window, you should provide the required code for the user-defined buttons.Some other actions you can do in the NewEra Window Painter are:- improve the layout of the window- change the property values of graphical objects- remove graphical objects- reuse parts of other wif (template) files by using the Copy and Paste facilities of the Window Painter4 Save the file in the Window Painter.The Window Painter does not only save the changes to the wif file, but it also generates a 4gl and a 4gh file from the wif file when you save it.These 4gl and 4gh files are used during the compilation and linking of the application, not the wif file. They are not visible in the ObjectTeam browser.For more information on the NewEra Window Painter refer to the INFORMIX-NewEra manual Developing Graphical Applications.ID="23098"Regenerating TERM1="WIF Template File" TERM2="regenerating"WIF Template FilesIntroductionThe changes you make to a wif template file in the NewEra Window Painter are preserved when you regenerate the wif template file.How to regenerateΣ To regenerate a wif template file:1 Select the wif template file in the information area of the browser on Implementation System level.2 Select Utilities | Import From Previous Phase... | Selected.A Monitoring Window starts up and the selected wif template file is regenerated.The changes you made in the Window Painter and the changes you made in the CD are merged into the new wif template file.Warning: Bear the following in mind if you have generated a wif template file for a GUI class before. When you remove an attribute or an operation from this GUI class in ObjectTeam, the corresponding SuperField or Button is not removed from the wif template file during regeneration. The code generator will, however, set the property SQLRole of a removed SuperField to noRole.You have to remove the SuperField yourself using the NewEra Window Painter.ID="23227"Properties of Generated TERM1="WIF object" TERM2="properties"WIF ObjectsGenerated propertiesEach object in a wif template file has properties and event handlers assigned to it. Most generated properties get default values like they would have when drawn in the NewEra Window Painter.Some properties, however, get values that are determined by the data in the OOPL model. The tables on the following pages summarize these properties per object type.Properties with a trailing + are set every time the object is (re)generated; properties without the + are set only the first time the object is generated in the wif template file. TERM1="ixWindow" TERM2="generated properties"ixWindowThe following table summarizes the OOPL model-dependent property values generated for the object type ixWindow:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Property NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"titleCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of GUI classCOLNAME="1" VALIGN="TOP" MOREROWS="0"database+COLNAME="2" VALIGN="TOP" MOREROWS="0"if present, name of the target database, else NULLCOLNAME="1" VALIGN="TOP" MOREROWS="0"classnameCOLNAME="2" VALIGN="TOP" MOREROWS="0"<nameOfGUIClass>WindowCOLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"<nameOfGUIClass>WNTERM1="ixSuperTable" TERM2="generated properties"ixSuperTableThe following table summarizes the OOPL model-dependent property values generated for the object type ixSuperTable:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Property NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"updateTable+COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"numDisplayedCols+COLNAME="2" VALIGN="TOP" MOREROWS="0"total number (plus one) of attributes of the persistent class and its (recursive) superclasss that must be displayed. The extra attribute is the invisible field class_type COLNAME="1" VALIGN="TOP" MOREROWS="0"selectFromPart+COLNAME="2" VALIGN="TOP" MOREROWS="0"a comma separated list of names of the persistent class and its super classesCOLNAME="1" VALIGN="TOP" MOREROWS="0"selectJoinPart+COLNAME="2" VALIGN="TOP" MOREROWS="0"join the tables of the persistent class and its super classesCOLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"<nameOfGUIClass>STTERM1="ixSuperField" TERM2="generated properties"ixSuperFieldThe following table summarizes the OOPL model-dependent property values generated for the object type ixSuperField:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Property NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"SQLRole+COLNAME="2" VALIGN="TOP" MOREROWS="0"if key attribute, then noUpdateRole, else updateRowCOLNAME="1" VALIGN="TOP" MOREROWS="0"colNum+COLNAME="2" VALIGN="TOP" MOREROWS="0"the sequence number of the ixSuperFieldCOLNAME="1" VALIGN="TOP" MOREROWS="0"columnName+COLNAME="2" VALIGN="TOP" MOREROWS="0"the name of the column in the database tableCOLNAME="1" VALIGN="TOP" MOREROWS="0"tableName+COLNAME="2" VALIGN="TOP" MOREROWS="0"the name of the table this column is included inCOLNAME="1" VALIGN="TOP" MOREROWS="0"title+COLNAME="2" VALIGN="TOP" MOREROWS="0"the name of the column in the database tableCOLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"<nameOfPersistentClass><nameOfColumn>SFCOLNAME="1" VALIGN="TOP" MOREROWS="0"encLength+COLNAME="2" VALIGN="TOP" MOREROWS="0"encoded length of the type of this columnCOLNAME="1" VALIGN="TOP" MOREROWS="0"initialDataValue+COLNAME="2" VALIGN="TOP" MOREROWS="0"initial value of the attributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"maxDataChars+COLNAME="2" VALIGN="TOP" MOREROWS="0"maximum numbers of characters to display the typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"type+COLNAME="2" VALIGN="TOP" MOREROWS="0"an integer representing the typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"nullable+COLNAME="2" VALIGN="TOP" MOREROWS="0"TRUE if nullable, else FALSECOLNAME="1" VALIGN="TOP" MOREROWS="0"primaryKey+COLNAME="2" VALIGN="TOP" MOREROWS="0"if (non-imported) key, then TRUE, else FALSEFor the ixSuperField class_type (see REFID="24933" TYPE="XREF-TEXTCOPY"The attribute class_type), the following extra properties are set:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Property NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"shownCOLNAME="2" VALIGN="TOP" MOREROWS="0"FALSECOLNAME="1" VALIGN="TOP" MOREROWS="0"queryStateCOLNAME="2" VALIGN="TOP" MOREROWS="0"readOnlyStateCOLNAME="1" VALIGN="TOP" MOREROWS="0"heightCOLNAME="2" VALIGN="TOP" MOREROWS="0"1COLNAME="1" VALIGN="TOP" MOREROWS="0"title_HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"1 TERM1="ixButton" TERM2="generated properties"ixButtonThe following table summarizes the OOPL model-dependent property values generated for the object type ixButton:COLS="2"COLNAME="1" COLWIDTH="142p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Property NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"titleCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the button (e.g. Query)COLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"<nameOfClass><nameOfButton>BTID="16111"Event Handlers of Generated WIF ObjectsGenerated TERM1="event handler" TERM2="generated"TERM1="WIF object" TERM2="generated event handlers"event handlersEach object in a wif template file has properties and event handlers assigned to it. The following table summarizes the event handlers that are generated for the various WIF objects:COLS="3"COLNAME="1" COLWIDTH="85p"COLNAME="2" COLWIDTH="139p"COLNAME="3" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"WIF ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event HandlerCOLNAME="3" VALIGN="TOP" MOREROWS="0"ReasonCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="ixWindow" TERM2="generated event handlers"ixWindowCOLNAME="2" VALIGN="TOP" MOREROWS="0"pre_bodyCOLNAME="3" VALIGN="TOP" MOREROWS="0"include statementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"constructor_extensionCOLNAME="3" VALIGN="TOP" MOREROWS="0"initialization of the SuperField class_type COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="ixSuperTable" TERM2="generated event handlers"ixSuperTableCOLNAME="2" VALIGN="TOP" MOREROWS="0"SQLDeleteCOLNAME="3" VALIGN="TOP" MOREROWS="0"must be implemented by the useruse deleteFromDB from referred class objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SQLInsertCOLNAME="3" VALIGN="TOP" MOREROWS="0"must be implemented by the useruse insertInDB from referred class objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SQLUpdateCOLNAME="3" VALIGN="TOP" MOREROWS="0"must be implemented by the useruse updateInDB from referred class objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"ixSuperFieldCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="ixButton" TERM2="generated event handlers"ixButtonCOLNAME="2" VALIGN="TOP" MOREROWS="0"activateCOLNAME="3" VALIGN="TOP" MOREROWS="0"implement the actionChapter 6 ID="32714"Reverse EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraIntroductionOne of the benefits of an object-oriented design methodology is its support for the reuse of software components. Reverse engineering facilitates this by allowing you to use existing NewEra code in your project. This code may come from other projects or from third-parties, such as class library vendors or public domain software sites.TERM1="reverse engineering"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="class library" TERM2="reverse engineering"Reverse engineering parses NewEra header files and builds CDs and CDMs that show the class hierarchy defined in the header files. Purpose Use reverse engineering to capture and display the class hierarchy of a class library so that you can reuse the classes in the library. Reverse engineeringn Makes class libraries available in ObjectTeam.n Helps you to understand the structure and functionality of class libraries.Not an import utilityReverse engineering is not designed to capture all the information in a header file. Therefore, do not use reverse engineering to import classes in order to maintain them in ObjectTeam. If you generate header files from the CDs and CDMs created by reverse engineering, they will not match the header files you used to create those CDs and CDMs.Class hierarchyA class hierarchy shows a base class and the subclasses derived from that base class. A class at or near the top of the hierarchy is more generalized. Classes at or near the bottom of the hierarchy are more specialized. The following illustration shows a class hierarchy for a graphical user interface subsystem.FILENAME="00772.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/ne/neeng.fm5.mif"Class libraryA TERM1="class library"class library is a collection of classes intended for use in many different situations. Generally, classes near the top of a class hierarchy are better candidates for a class library because they are more likely to be reused. Classes lower in the hierarchy have more restricted use and might not be useful in a class library.In the previous illustration, myFrame is not useful in a class library because it is an instance. The other classes might appear in a class library.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30342" TYPE="XREF-TEXTCOPY"What Happens During Reverse Engineering 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38598" TYPE="XREF-TEXTCOPY"Running Reverse Engineering 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8TERM1="reverse engineering" TERM2="class library"TERM1="translating" TERM2="header files to Class Association Diagrams"ID="30342"What Happens During Reverse EngineeringIntroductionThis section describes how ObjectTeam reverse engineers NewEra header files.Steps in the translationReverse engineering uses the following steps to translate NewEra header files into CDs and CDMs that show the class hierarchy:1 Parses the NewEra header files.2 Maps the NewEra elements to ObjectTeam elements.3 Combines the elements into draft diagrams.4 Uses detailed positioning and editing to transform the draft diagrams into finished CDs of reasonable size.Parsing the header filesThe parser processes the header files of the class libraries as follows:n It recognizes the definitions of the following C++ constructs:- classn It treats complex constructs as follows:- Nested type definitions are recognized, but processed as if they are not nested. This can result in duplicate definitions.- References to nested type definitions are transformed into references to type definitions that are not nested. For example, nested::type becomes nested@type.- Definitions of templates are ignored; references to instances of the template are mapped to a reasonable name. For example, List<Thing*> becomes List_ThingPtr.n It allows data types to be referenced before they are defined.Preprocessing directivesThe parser ignores all preprocessor symbols, such as #ifdef and #define. However, you can specify a preprocessor to be run before reverse engineering, as described in REFID="38598" TYPE="XREF-TEXTCOPY"Running Reverse Engineering.Mapping the elementsTERM1="NewEra" TERM2="reverse engineering"TERM1="mapping" TERM2="in reverse engineering"TERM1="reverse engineering" TERM2="mapping"After parsing the header file, reverse engineering maps the C++ constructs to ObjectTeam elements, as shown in the following table:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"newera constructionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"classCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data memberCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute and the property attrib_access is setCOLNAME="1" VALIGN="TOP" MOREROWS="0"Member functionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and the method_access property is setCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and the properties method_access and is_event are setCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConstructorCOLNAME="2" VALIGN="TOP" MOREROWS="0"$createCOLNAME="1" VALIGN="TOP" MOREROWS="0"DestructorCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"Shared memberCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class feature (a $ is added to the front of the name)COLNAME="1" VALIGN="TOP" MOREROWS="0"Const attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute and the properties attrib_access and is_const_attrib is setCOLNAME="1" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data type (if the data type is a standard type, lower case is used)COLNAME="1" VALIGN="TOP" MOREROWS="0"Super classCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam inheritance structureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Nested typesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Name in which @ replaces ::Creating draft diagramsTERM1="diagrams" TERM2="draft, in reverse engineering"TERM1="reverse engineering" TERM2="draft diagrams"After mapping the NewEra constructs to ObjectTeam elements, reverse engineering creates draft CDs, as shown below, to hold the elements.FILENAME="00773.tif" ORIGSEQ="35" ORIGTYPE="I" ORIGDOC="../../sources/ne/neeng.fm5.mif"Finishing the diagramsTERM1="diagrams" TERM2="finished, in reverse engineering"TERM1="reverse engineering" TERM2="finished diagrams"Finally, reverse engineering uses the following guidelines to transform the draft CDs into finished CDs:FILENAME="00774.tif" ORIGSEQ="11" ORIGTYPE="I" ORIGDOC="../../sources/ne/neeng.fm5.mif"n If classes are too large, reverse engineering folds them, as shown in the following illustration. Alternatively, if you specify the Create Reference Diagrams option in the Reverse Engineer NewEra dialog box, reverse engineering creates a separate reference diagram for the class.FILENAME="00775.tif" ORIGSEQ="24" ORIGTYPE="I" ORIGDOC="../../sources/ne/neeng.fm5.mif"n If generalizations are too large, reverse engineering transforms them into More Classes symbols.FILENAME="00776.tif" ORIGSEQ="46" ORIGTYPE="I" ORIGDOC="../../sources/ne/neeng.fm5.mif"ID="38598"Running Reverse EngineeringIntroductionThis section describes how to run reverse engineering.How to reverse engineerΣ To reverse engineer a class library from one or more header files:1 Move to System level in Object Design phase.Note: Typically, you reverse engineer into an empty system. This prevents name conflicts with existing classes.2 Select Utilities | Reverse Engineer NewEra.A Reverse Engineer NewEra dialog box appears (see REFID="39215" TYPE="XREF-TEXTCOPY"Files for reverse engineering), prompting you to select the files to be reverse engineered.3 Select the files that you want to reverse engineer, then select OK.A Reverse Engineer NewEra dialog box appears (see REFID="18733" TYPE="XREF-TEXTCOPY"Options for reverse engineering), prompting you to select the options that you want to use. 4 Select the options, then select OK.ObjectTeam reverse engineers the selected file, reporting the results in a Monitoring window.FILENAME="00777.unk" ORIGFILE="pics/dbreveng.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/neeng.fm5.mif"As shown in the following illustration, the generated CDs display the class hierarchy defined in the selected files. The display includes attributes and operations; associations between classes are not reverse engineered.FILENAME="00778.unk" ORIGFILE="pics/cadrvng.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/neeng.fm5.mif"ID="39215"Files for reverse engineeringDuring reverse engineering, ObjectTeam prompts you to select the files that you want to reverse engineer. In most cases, you select NewEra header files. The following illustration shows the Windows dialog box and the UNIX dialog box. In Windows, use the File Name and File of Type fields to filter the list of files displayed. In UNIX, use the Filter field and Filter button.FILENAME="00779.unk" ORIGFILE="pics/rvngselw.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/neeng.fm5.mif"FILENAME="00780.unk" ORIGFILE="pics/rvngselu.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/neeng.fm5.mif"ID="18733"Options for reverse engineeringDuring reverse engineering, ObjectTeam displays the following dialog box prompting you to select the options that you want to use:FILENAME="00781.unk" ORIGFILE="pics/rvngopts.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/neeng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box):COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the diagram to be generated. Multiple header files can be generated to a single diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only an inheritance structure is generated)n Only CDMs (only features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, separate CDs are generated for classes that exceed the maximum size. COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"This field is disabled. It is not used by the NewEra code generator.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"This field is disabled. It is not used by the NewEra code generator.COLNAME="1" VALIGN="TOP" MOREROWS="0"CaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"NewEra is case insensitive and ObjectTeam is case sensitive. Use this field to specify which case should be used in ObjectTeam.n FirstCase. For each identifier, use the case that is first encountered. (When reverse engineering multiple files, use this option with caution.)n UpperCase. Always use uppercase characters.n LowerCase. Always use lowercase characters.Chapter 7 ID="36160"Customizing Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraIntroductionThis chapter contains an overview of the areas in ObjectTeam code generation that can be customized and configured.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42656" TYPE="XREF-TEXTCOPY"Customizing Data Types 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13618" TYPE="XREF-TEXTCOPY"Configuring NewEra Environment 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17927" TYPE="XREF-TEXTCOPY"Customizing the Extension of Generated Files 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24488" TYPE="XREF-TEXTCOPY"Customizing WIF Generation 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24352" TYPE="XREF-TEXTCOPY"Customizing Referential Integrity Policies 7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31ID="42656"Customizing Data TERM1="data type" TERM2="customizing"TypesStandard typesIn the Object Design phase you can use standard types to define data types of data attributes and parameters. All the valid standard types are stored in the file:M4_home\modules\newera\etc\TERM1="stand_types"stand_types.stand_typesThis file also contains minimum and maximum values for the standard types. Whenever you generate code or check a diagram's contents, the data types used in the diagram are always checked against the data types in the standard types file. The standard types are then mapped to the appropriate language (i.e. NewEra) types.Here is a sample of the stand_types.stand_types file for NewEra:...#-------------------------------------------------------------# StandardTypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Min 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Max 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Min 2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| Max 2#-------------------------------------------------------------bytename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32767name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0uns_charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32767name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0datetime_year_to_dayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0datetime_hour_to_minutename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0datetime_year_to_fractionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|5name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32decimalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|32double_precisionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|13name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|13name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|0...What do the columns meanThe columns Min 1, Max 1 and Min 2 and Max 2 can be used to specify constraints on array size or format values of the standard types.Checking typesWhenever you generate code or check a diagram's contents, the data types used in the diagram are checked against the data types in the standard types file. This checking is always carried out, even when you don't generate persistent code.During code generation, the standard types are mapped to:n NewEra types n SQL types Customization FileYou can create a customization file stand_types.stand_types if you want to extend or change the default stand_types.stand_types file. You can do that by selecting File | New on the Browser level of your choice with the pseudo object <customization files> as current object. The name of the new customization file must be stand_types.stand_types. After you have created the file, you can edit it and save it.The next time you generate code, your user-defined customization file is evaluated by the code generator. The nearest customization file overrules all other customization files that might be defined on higher levels. So if you have, for instance, a user-defined customization file stand_types.stand_types defined on Configuration level, Project level and System level, the one on System level overrules all the other ones.TERM1="NewEra types"NewEra TypesNewEra typesNewEra types are data types that are supported by the Relational Database System (RDBMS) used. The standard types are mapped to NewEra types during persistent code generation.The mapping is taken care of by the configuration file:M4_home\modules\newera\etc\TERM1="stand_types"lang_types.lang_typesHere is a sample of the lang_types.lang_types file for NewEra:...#--------------------------------------------------------------------------#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Standardname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'NewEraname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'range#--------------------------------------------------------------------------bytename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BYTEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()uns_charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_year_to_dayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'YEARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_hour_to_minutename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HOURname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MINUTEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_year_to_fractionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'YEARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FRACTIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()decimalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECIMALname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()double_precisionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DOUBLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRECISIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FLOATname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()doublename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FLOATname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*shortname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'SMALLINTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*...What do the columns meanThe first column in this file lists the standard types. These must be consistent with the types in the stand_types.stand_types file. The second column lists the NewEra types the standard types must be mapped upon. In the column range the type of brackets used in the target language is indicated.Customization fileYou can create customization files for the files lang_types.lang_types. The way to do that is analogous to creating a customization file for the stand_types.stand_types file.TERM1="SQL types"ID="31513"SQL typesSQL typesSQL types are data types that are supported by the SQL implementation of the RDBMS used.The mapping is taken care of by the configuration file:M4_home\modules\newera\etc\db_types. db_typesHere is a sample of the db_types file for Informix:...#--------------------------------------------------------------------------#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'standardname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Informixname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'hasname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'range?#--------------------------------------------------------------------------bytename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'BYTEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*charname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CHARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()datename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'somename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'examplesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEdatetime_year_to_dayname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'YEARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DAYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_hour_to_minutename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HOURname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MINUTEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*datetime_year_to_fractionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DATETIMEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'YEARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FRACTIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()decname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()decimalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DECIMALname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()double_precisionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DOUBLEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'PRECISIONname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()floatname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FLOATname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()intname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*integername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTEGERname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'somename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'examplesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTERVAL#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'parametersname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'notname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'supportedinterval_year_to_monthname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTERVALname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'YEARname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MONTHname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*interval_hour_to_minutename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'INTERVALname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HOURname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TOname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MINUTEname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'*moneyname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MONEYname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'()...What do the columns meanThe first column in this file lists the standard types. These must be consistent with the types in the stand_types.stand_types file. The second column lists the SQL types the standard types must be mapped upon. In the column has range the type of brackets used in the target language is indicated.Customization fileYou can create customization files for the files db_types. The way to do that is analogous to creating a customization file for the stand_types file.ID="13618"Configuring NewEra EnvironmentIntroductionWhen you configure the NewEra environment (see REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your NewEra Environment), the following command is run behind the scenes:otsh -f M4_home\modules\newera\tcl\config_ne.tcl This file copies the source files of the selected class library (lw4omtne) to the user environment. You are supposed to build this library with the NewEra Application Builder.For more informationFor details on the class library lw4omtne, refer to REFID="18476" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20 and further.If you don't want to use the configuration script config_ne.tcl, refer to REFID="23768" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'7name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21 and further for details on how to change the appropriate Tcl files.TERM1="class library"ID="18476"Class Library TERM1="lw4omtne"lw4omtneWhat is the class library lw4omtne forThe classes in the class library lw4omtne are used to provide NewEra storage structures for classes participating in associations and qualified associations. These type of classes are more commonly referred to as container classes or collector classes, since they can contain many occurrences of any type of class. They also provide maintenance and search methods. The code generator maintains (qualified) associations specified in CDs by generating class member functions. See REFID="34119" TYPE="XREF-TEXTCOPY"Associations for the mapping of associations in diagrams and the implementation in (non-persistent) NewEra code.Which classes does the class library includeThe next table summarizes the classes available in lw4omtne and a short description. COLS="2"COLNAME="1" COLWIDTH="79p"COLNAME="2" COLWIDTH="369p"COLNAME="1" VALIGN="TOP" MOREROWS="0" Class COLNAME="2" VALIGN="TOP" MOREROWS="0" DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0" RefSet COLNAME="2" VALIGN="TOP" MOREROWS="0" A set containing object referencesCOLNAME="1" VALIGN="TOP" MOREROWS="0" ORefSet COLNAME="2" VALIGN="TOP" MOREROWS="0" An ordered set containing object referencesCOLNAME="1" VALIGN="TOP" MOREROWS="0" RefDict COLNAME="2" VALIGN="TOP" MOREROWS="0" A dictionary containing object referencesCOLNAME="1" VALIGN="TOP" MOREROWS="0" RSetDict COLNAME="2" VALIGN="TOP" MOREROWS="0" A dictionary containing sets of object referencesCOLNAME="1" VALIGN="TOP" MOREROWS="0" ORSetDictCOLNAME="2" VALIGN="TOP" MOREROWS="0" A dictionary containing ordered sets of object referencesCOLNAME="1" VALIGN="TOP" MOREROWS="0" DBObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0" The root class of every persistent classWhat are these classes based onThe current implementation of the set and dictionary classes are based on the NewEra class ixVector, which is part of the Data Class Library (DCL) that comes standard with the NewEra product. When these data structures are used heavily, they should be replaced with more efficient implementations to improve performance.The class DBObject is the root class of every persistent class for which code is generated. DBObject offers general functions for database interaction (connections, transactions), but also functionality that is needed by every persistent class. (See REFID="14975" TYPE="XREF-TEXTCOPY"The Class DBObject for more information.)The file main.4glWith the library comes a file called main.4gl which contains an example of the MAIN function every program needs. Note that this file must not be included in the library itself! ID="23768"Adapting ID="NewEra Configuration File"NewEra Configuration FilesWhich configuration files can you changeIf you want to use a different class library, you have to edit the following Tcl files:n ne_const.tcl n ne_config.tcl The elements you can change in these files are listed below. The files can be found in the following directory:M4_home\modules\newera\tclTERM1="ne_const.tcl"ne_const.tclAdapt this file to change constants for code generation.These are the Tcl variables in this file:COLS="2"COLNAME="1" COLWIDTH="192p"COLNAME="2" COLWIDTH="253p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl variablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"definesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TYPE_ID_NMCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the type column in the database runtime systemdefault class_typeCOLNAME="1" MOREROWS="1" VALIGN="TOP"START_INCLUDE_MESSAGEEND_INCLUDE_MESSAGESTART_CTOR_MESSAGEEND_CTOR_MESSAGECOLNAME="2" MOREROWS="1" VALIGN="TOP"magic strings to be used for code regeneration; defaults are:"-- Start user added include file section""-- End user added include file section""-- Start constructor user section""-- End constructor user section"COLNAME="1" VALIGN="TOP" MOREROWS="0"START_DTOR_MESSAGECOLNAME="2" VALIGN="TOP" MOREROWS="0""-- Start destructor user section"COLNAME="1" VALIGN="TOP" MOREROWS="0"END_DTOR_MESSAGECOLNAME="2" VALIGN="TOP" MOREROWS="0""-- End destructor user section"COLNAME="1" VALIGN="TOP" MOREROWS="0"START_SOURCE_MESSAGECOLNAME="2" VALIGN="TOP" MOREROWS="0""-- Start user added source code section"COLNAME="1" VALIGN="TOP" MOREROWS="0"END_SOURCE_MESSAGECOLNAME="2" VALIGN="TOP" MOREROWS="0""-- End user added source code section"COLNAME="1" VALIGN="TOP" MOREROWS="0"REGEN_ENDCOLNAME="2" VALIGN="TOP" MOREROWS="0""-- Do not delete this line -- regeneration end marker"Changing these strings in an existing project can cause regeneration failures.These are the Tcl procedures in this file:COLS="2"COLNAME="1" COLWIDTH="159p"COLNAME="2" COLWIDTH="289p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl procedureCOLNAME="2" VALIGN="TOP" MOREROWS="0"returns/generates/translatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"class2file nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"returns the source file name for a class nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"h_class2file nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"returns the header file name for a class nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"gen_include class sectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"INCLUDE statement for name in sectionwith file protectorCOLNAME="1" VALIGN="TOP" MOREROWS="0"gen_include_filename filename sectCOLNAME="2" VALIGN="TOP" MOREROWS="0"INCLUDE statement for filename in section COLNAME="1" VALIGN="TOP" MOREROWS="0"reference_name classCOLNAME="2" VALIGN="TOP" MOREROWS="0"name for variable of reference typedefault: classRefCOLNAME="1" VALIGN="TOP" MOREROWS="0"set_name classCOLNAME="2" VALIGN="TOP" MOREROWS="0"name for variable of set typedefault : classSetCOLNAME="1" VALIGN="TOP" MOREROWS="0"set_type_name classCOLNAME="2" VALIGN="TOP" MOREROWS="0"set type name for class, uses set:name COLNAME="1" VALIGN="TOP" MOREROWS="0"dict_name classCOLNAME="2" VALIGN="TOP" MOREROWS="0"name for variable of dictionary typedefault: nameDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"dict_type_name key_type value_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0" dictionary type name for key_type and value_type, uses dict::name COLNAME="1" VALIGN="TOP" MOREROWS="0"set_dict_name classCOLNAME="2" VALIGN="TOP" MOREROWS="0"name for variable of set dictionary typedefault: classRSDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"set_dict_type_name key_type value_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0" set dictionary type name for key_type and value_type COLNAME="1" VALIGN="TOP" MOREROWS="0"set_dict_name classCOLNAME="2" VALIGN="TOP" MOREROWS="0"The set dict name for class COLNAME="1" VALIGN="TOP" MOREROWS="0"set_dict_type_name key_type value_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"The set dict type name for key and value, uses rsdict::name COLNAME="1" VALIGN="TOP" MOREROWS="0"oset_dict_name classCOLNAME="2" VALIGN="TOP" MOREROWS="0"The ordered set dict name for class default: classORSDictCOLNAME="1" VALIGN="TOP" MOREROWS="0"oset_dict_type_name key_type value_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"The ordered set dict type name for key and value, uses orsdict::name TERM1="ne_config.tcl"ne_config.tclAdapt this file to change class library settings. These are the Tcl variables in this file:COLS="2"COLNAME="1" COLWIDTH="174p"COLNAME="2" COLWIDTH="274p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"definesCOLNAME="1" VALIGN="TOP" MOREROWS="0"exsrc_searchpathCOLNAME="2" VALIGN="TOP" MOREROWS="0"directories that are searched for external sources; directories are separated by a semicolon; the external sources are set through the External Class Source propertyCOLNAME="1" VALIGN="TOP" MOREROWS="0"string::nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the string class(default: ixString )COLNAME="1" VALIGN="TOP" MOREROWS="0"set::nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the class library reference set class(default: RefSet)COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"set::addCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the add methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"set::add_retvalCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the add_retval method (add retrurn value)COLNAME="1" VALIGN="TOP" MOREROWS="0"set::sizeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the size methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"set::removeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the remove methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"oset::nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the class library ordered reference set class(default: ORefSet)COLNAME="1" VALIGN="TOP" MOREROWS="0"oset::addCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the add methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"oset::add_retvalCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the add_retval method (add retrurn value)COLNAME="1" VALIGN="TOP" MOREROWS="0"oset::sizeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the size methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"oset::removeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the remove methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"dict::nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the class library dictionary class(default: RefDict)COLNAME="1" VALIGN="TOP" MOREROWS="0"dict::setCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the set methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"dict::sizeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the size methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"dict::removeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the remove methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"rsdict::nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the class library set class(default: RSetDict)COLNAME="1" VALIGN="TOP" MOREROWS="0"rsdict::addCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the add methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"rsdict::add_retvalCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the add_retval method (add retrurn value)COLNAME="1" VALIGN="TOP" MOREROWS="0"rsdict::sizeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the size methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"rsdict::removeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the remove methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"orsdict::nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the class library ordered set class(default: ORSetDict)COLNAME="1" VALIGN="TOP" MOREROWS="0"orsdict::addCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the add methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"orsdict::add_retvalCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the add_retval method (add retrurn value)COLNAME="1" VALIGN="TOP" MOREROWS="0"orsdict::sizeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the size methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"orsdict::removeCOLNAME="2" VALIGN="TOP" MOREROWS="0"name of the remove methodThese are the Tcl procedures in this file:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"tcl procedureCOLNAME="2" VALIGN="TOP" MOREROWS="0"definedCOLNAME="1" VALIGN="TOP" MOREROWS="0" set::iter decl_sect impl_sect name type actionCOLNAME="2" VALIGN="TOP" MOREROWS="0"generates an iterator of type and name in section; action contains the iterated code (RefSet)COLNAME="1" VALIGN="TOP" MOREROWS="0" oset::iter decl_sect impl_sect name type actionCOLNAME="2" VALIGN="TOP" MOREROWS="0"generates an iterator of type and name in section; action contains the iterated code (ORefSet)COLNAME="1" VALIGN="TOP" MOREROWS="0" dict::get_and_return sect name key return_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"gets an element from the dictionary selected by key and returns its value (RefDict)COLNAME="1" VALIGN="TOP" MOREROWS="0" dict::get_test_and_act sect name key return_type actionCOLNAME="2" VALIGN="TOP" MOREROWS="0"gets an element from the dictionary selected by key, tests its validity and calls action for that element (RefDict)COLNAME="1" VALIGN="TOP" MOREROWS="0" dict::iter decl_sect impl_sect name type qual_type actionCOLNAME="2" VALIGN="TOP" MOREROWS="0"generates an iterator of type, qual_type and name in section; action contains the iterated code (RefDict)COLNAME="1" VALIGN="TOP" MOREROWS="0" dict::initializer name key valueCOLNAME="2" VALIGN="TOP" MOREROWS="0"generates the dictionary initializer for the constructor (RefDict)COLNAME="1" VALIGN="TOP" MOREROWS="0" rsdict::get_and_return sect name key return_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"gets an element from the dictionary selected by key and returns its value (RSetDict)COLNAME="1" VALIGN="TOP" MOREROWS="0" rsdict::iter decl_sect impl_sect name type qual_type actionCOLNAME="2" VALIGN="TOP" MOREROWS="0"generates an iterator of type and name in section; action contains the iterated code (RSetDict)COLNAME="1" VALIGN="TOP" MOREROWS="0" rsdict::initializer name key valueCOLNAME="2" VALIGN="TOP" MOREROWS="0"generates the set initializer for the constructor (RefDict)COLNAME="1" VALIGN="TOP" MOREROWS="0" orsdict::get_and_return sect name key return_typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"gets an element from the dictionary selected by key and returns its value (ORSetDict)COLNAME="1" VALIGN="TOP" MOREROWS="0"orsdict::iter decl_sect impl_sect name type qual_type actionCOLNAME="2" VALIGN="TOP" MOREROWS="0"generates an iterator of type and name in section; action contains the iterated code (ORSetDict)COLNAME="1" VALIGN="TOP" MOREROWS="0"orsdict::initializer name key valueCOLNAME="2" VALIGN="TOP" MOREROWS="0"generates the dictionary initializer for the constructor (ORSetDict)ID="17927"Customizing the TERM1="File extension" TERM2="customizing"Extension of Generated FilesDefault File extensionsBy default, the extension for generated source files is 4gl for NewEra source files and 4gh for header files. You can, however, change this into something else.How to change the extensionΣ To change the extension of generated source files:1 Create a customization file objtype.objtype.You do this by opening up the pseudo object <customization files> on an appropriate browser level, select File | New and select objtype.objtype from the dialog box.2 Double-click on the new customization file in the information area of the browser.The Object Type Customization Editor starts up.3 To change the extension for header files, for example, select the row containing the Repository Type External File Version and the Browser Type 4gh.4 Select Edit | Redefine.A dialog box appears.5 Click on the Interface tab in this dialog box.FILENAME="00782.unk" ORIGFILE="pics/objextfv.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necust.fm5.mif"6 Change the value 4gh in the field File system extension into the preferred extension.7 Click OK and select File | Save in the Object Type Customization Editor.8 To make sure the new customization file is read by ObjectTeam, go to Corporate Level in the browser and go back to Implementation System level.9 To test if your customization takes effect, select File | New | External File Version.10 Select 4gh from the dialog box and click the Edit button.11 The text editor that is now started up should show the file name with the new extension.Newly generated files will have the new extension in your user environment. However, the column Type in the information area of the browser on Implementation System level still reads 4gh.Tip: Delete files that were generated before you created the customization file. When you generate them again, they will have the new file extension.ID="24488"Customizing WIF GenerationIntroductionYou can customize the generation of wif template files (see REFID="16738" TYPE="XREF-TEXTCOPY"Chapter 5, Modeling the User Interface) by changing the Tcl variables in the following Tcl file:M4_home\modules\newera\tcl\wif_const.tclThe Tcl variables you can change can be divided into two sections:n Tcl variables that control the generation of graphical objects in the wif template filen Tcl variables that control the generation of geometric properties of graphical objects in the wif template fileBoth types of variables are discussed in this section.How to create a customization file wif_const.tclIf you want to make any changes to the Tcl variables mentioned here, you have to create a customization file wif_const.tcl. For more informationRefer to ObjectTeam Customization Guide for details on how to create customization files.Customizing the Generation of Graphical ObjectsIntroductionThe next pages summarize the Tcl variables that control the generation of the different graphical objects in a wif template file. These variables are set in the Tcl file wif_const.tcl.The following graphical objects are covered:n REFID="41132" TYPE="XREF-TEXTCOPY"ixWindown REFID="29565" TYPE="XREF-TEXTCOPY"ixSuperTablen REFID="22794" TYPE="XREF-TEXTCOPY"ixSuperFieldn REFID="29076" TYPE="XREF-TEXTCOPY"ixButtonID="41132"ixWindowThe following Tcl variables handle the generation of the object ixWindow in the wif template file:COLS="2"COLNAME="1" COLWIDTH="141p"COLNAME="2" COLWIDTH="307p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"determinesCOLNAME="1" VALIGN="TOP" MOREROWS="0"WindowPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"which properties are generated for the wif-objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdWindowPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"which ixWindow properties get calculated values (updated at each (re)generation; assigned with =)COLNAME="1" VALIGN="TOP" MOREROWS="0"DefWindowPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"default values for ixWindow properties (assigned with *=)COLNAME="1" VALIGN="TOP" MOREROWS="0"UserWindowPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"default values for ixWindow properties (assigned with =)COLNAME="1" VALIGN="TOP" MOREROWS="0"WindowHandlersCOLNAME="2" VALIGN="TOP" MOREROWS="0"which event handlers are generated for an ixWindow objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"DefWindowHandlersCOLNAME="2" VALIGN="TOP" MOREROWS="0"bodies for the ixWindow event handlersID="29565"ixSuperTableThe following Tcl variables handle the generation of the object ixSuperTable in the wif template file:COLS="2"COLNAME="1" COLWIDTH="132p"COLNAME="2" COLWIDTH="316p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"determinesCOLNAME="1" VALIGN="TOP" MOREROWS="0"SupTblPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"which properties are generated for an ixSuperTable objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"SupTblPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"which ixSuperTable properties get calculated values (updated at each (re)generation; assigned with =)COLNAME="1" VALIGN="TOP" MOREROWS="0"DefSupTblPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"default values for ixSuperTable properties (assigned with *=)COLNAME="1" VALIGN="TOP" MOREROWS="0"UserSupTblPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"default values for ixSuperTable properties (assigned with =)COLNAME="1" VALIGN="TOP" MOREROWS="0"SupTblHandlersCOLNAME="2" VALIGN="TOP" MOREROWS="0"which event handlers are generated for an ixSuperTable objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"DefSupTblHandlersCOLNAME="2" VALIGN="TOP" MOREROWS="0"bodies for the ixSuperTable event handlersID="22794"ixSuperFieldThe following Tcl variables handle the generation of the object ixSuperField in the wif template file:COLS="2"COLNAME="1" COLWIDTH="120p"COLNAME="2" COLWIDTH="328p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"determinesCOLNAME="1" VALIGN="TOP" MOREROWS="0"SupFldPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"which properties are generated for an ixSuperField objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdSupFldPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"which ixSuperField properties get calculated values (updated at each (re)generation; assigned with =)COLNAME="1" VALIGN="TOP" MOREROWS="0"DefSupFldPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"default values for ixSuperField properties (assigned with *=)COLNAME="1" VALIGN="TOP" MOREROWS="0"UserSupFldPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"default values for ixSuperField properties (assigned with =)ID="29076"ixButtonThe following Tcl variables handle the generation of the object ixButton in the wif template file:COLS="2"COLNAME="1" COLWIDTH="160p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"determinesCOLNAME="1" VALIGN="TOP" MOREROWS="0"SupTblBtnPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"which properties are generated for an ixButton objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdSupTblBtnPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"which ixButton properties get calculated values (updated at each (re)generation; assigned with =)COLNAME="1" VALIGN="TOP" MOREROWS="0"DefSupTblBtnPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"default values for ixButton properties (assigned with *=)COLNAME="1" VALIGN="TOP" MOREROWS="0"UserSupTblBtnPropsCOLNAME="2" VALIGN="TOP" MOREROWS="0"default values for ixButton properties (assigned with =)COLNAME="1" VALIGN="TOP" MOREROWS="0"SupTblBtnHandlersCOLNAME="2" VALIGN="TOP" MOREROWS="0"which event handlers are generated for an ixButton objectCOLNAME="1" VALIGN="TOP" MOREROWS="0"DefSTBtnActivateHdlrsCOLNAME="2" VALIGN="TOP" MOREROWS="0"contains the bodies for the active event handlers indexed on the name of the ixButtonCustomizing Geometric PropertiesWhich geometric properties are generatedThe picture below shows the lay-out of the initially generated WIF-file. Generated values of geometric properties can be influenced by the global Tcl variables as indicated in the figure below:FILENAME="00783.unk" ORIGFILE="pics/geomprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necust.fm5.mif"ID="24352"Customizing TERM1="referential integrity" TERM2="SQL generation"Referential Integrity PoliciesRules for Referential IntegrityObjectTeam offers the possibility to incorporate rules for referential integrity checking in the database. The default Referential Integrity rules are specified in the customization file:M4_home\etc\sqlrules.sqlrulesWhat does this file doIn the sqlrules.sqlrules file, a rule is specified for every type of association, aggregation and generalization. The rules, specified in the last column of the file, refer to Tcl procedures. During persistent code generation, the Tcl procedure specified for the specific type of relation is called. The SQL code that is generated by this procedure is inserted in the SQL script create_procs. See the ObjectTeam Repository Interface Guide for an overview of the mapping of the different types of relations to the SQL model.What do the columns meanIn the SQL rules file, a rule is specified for every combination of:n relation type:The relation type is determined by the (combination of) the master type and the detail type:- associative: when the detail type is associative- optional: when both the master type and the detail type are optional- total: when the detail type is not associative and either the master type or the detail type is total- supersubtype: when the master type is super type and the detail type is subtypen database operation:insert, update, or delete n table type:master or detail n master type:optional, total (i.e. mandatory), or super type n detail type:optional, total (i.e. mandatory), subtype, or associative n TERM1="policies" TERM2="for referential integrity"TERM1="referential integrity" TERM2="policies"policy:- NoneTERM1="none" TERM2="policy for referential integrity": no checks are carried out when the database operation is executed. - CascadeTERM1="cascade" TERM2="policy for referential integrity": referential integrity is maintained by propagating the database operation across the association. The most obvious use is for delete.- RestrictTERM1="restrict" TERM2="policy for referential integrity": the database operation is cancelled if a problem regarding referential integrity occurs.- NullifyTERM1="nullify" TERM2="policy for referential integrity": when an object is removed, the foreign key value is changed to NULL, indicating that no link exists. This policy cannot be selected for insert.n allowed:- default: whether or not referential integrity is checked for this type of relation is determined by what is indicated at the top of the SQL rules file: on or off.- yes: referential integrity is checked- no: referential integrity is not checkedn rule:- rej_not_exist: this rule is only valid for the database operations insert and update and for the policy Restrict. The database operation is cancelled if a tuple exports or imports keys and the tuple to which it export keys or from which it imports keys doesn't exist- rej_exist: this rule is only valid for the database operations update and delete and for the policy Restrict. The database operation is cancelled if the tuple export or imports keys.- rej_last: this rule is only valid for the database operation delete and the table type is detail.- ins_in_master: this rule is only valid for the database operations insert and update and for the policy Cascade. If a tuple is inserted in the detail table and the corresponding keys do not exist in the master table, they are inserted in the master table.- upd_in_detail: this rule is only valid for the database operation update and for the policy Cascade. If keys in the master table are updated, the corresponding keys in the detail table are also updated.- del_in_detail: this rule is only valid for the database operations update and delete and for the policy Cascade. If a tuple in the master table is deleted, all the detail tuples are also deleted.- nullify_detail: this rule is only valid for the database operations delete and update, for the table type master, and for the policy Nullify. If a tuple in the master table is deleted, all the corresponding keys in the detail table are set to NULL.- none: no rule is executed- not_applicable Customizing RI globally If you want to change anything regarding Referential Integrity policies that must affect all relations of a particular type, you should create a customization file with the name sqlrules.sqlrules on the browser level of your choice.Refer to ObjectTeam Customization Guide for details on how to create customization files.Customizing RI locallyThe default policy for a particular type of relation is specified in the SQL rules file. For every type of relation a certain rule is defined. However, for individual associations, aggregations or generalizations, you can overrule the following settings from the sqlrules file:n The policy for a particular operation n Whether or not referential integrity must be checked You can do that in the CD by editing the properties of the association, aggregation or generalization you want to overrule the default settings for:FILENAME="00784.unk" ORIGFILE="pics/prpriloc.gif" ORIGTYPE="X" ORIGDOC="../../sources/ne/necust.fm5.mif"Appendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for NewEraNewEra code generation propertiesThe following table lists the properties that effect NewEra code generation. These are available in the CD in the Object Design phase.COLS="5"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="108p"COLNAME="3" COLWIDTH="99p"COLNAME="4" COLWIDTH="126p"COLNAME="5" COLWIDTH="153p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Persistent non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="4" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="5" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"AbbreviationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"AttributeClassQualifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"IgnoredCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="37407" TYPE="XREF-TEXTCOPY"AbbreviationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"BothCOLNAME="3" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateNoneCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="42104" TYPE="XREF-TEXTCOPY"Attribute Access and REFID="18253" TYPE="XREF-TEXTCOPY"Data Attribute PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"BothCOLNAME="3" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="4" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateNoneCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="40839" TYPE="XREF-TEXTCOPY"Association Properties and REFID="37283" TYPE="XREF-TEXTCOPY"AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Constant AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="30471" TYPE="XREF-TEXTCOPY"Constant AttributeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Copy QualificationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"ShallowDeepNullCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="38900" TYPE="XREF-TEXTCOPY"Copy QualificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="37646" TYPE="XREF-TEXTCOPY"Qualified Association PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="19497" TYPE="XREF-TEXTCOPY"Default valueCOLNAME="1" VALIGN="TOP" MOREROWS="0"Delete PolicyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="4" VALIGN="TOP" MOREROWS="0"DefaultNoneCascadeRestrictNullifyCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="21782" TYPE="XREF-TEXTCOPY"AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="4" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="23357" TYPE="XREF-TEXTCOPY"GeneralizationCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="4" VALIGN="TOP" MOREROWS="0"Check BoxCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="33377" TYPE="XREF-TEXTCOPY"EventCOLNAME="1" VALIGN="TOP" MOREROWS="0"External Class SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="18549" TYPE="XREF-TEXTCOPY"External Class SourceCOLNAME="1" VALIGN="TOP" MOREROWS="0"External Include ListCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="12344" TYPE="XREF-TEXTCOPY"External Include ListCOLNAME="1" VALIGN="TOP" MOREROWS="0"Insert PolicyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="4" VALIGN="TOP" MOREROWS="0"DefaultNoneCascadeRestrictCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="21782" TYPE="XREF-TEXTCOPY"AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="4" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="23357" TYPE="XREF-TEXTCOPY"GeneralizationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="4" VALIGN="TOP" MOREROWS="0"PublicPrivateProtectedCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="29834" TYPE="XREF-TEXTCOPY"Method AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"NullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"BothCOLNAME="3" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="4" VALIGN="TOP" MOREROWS="0"DefaultYesNoCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="30201" TYPE="XREF-TEXTCOPY"Nullable and REFID="18253" TYPE="XREF-TEXTCOPY"Data Attribute PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"BothCOLNAME="3" VALIGN="TOP" MOREROWS="0"QualifierCOLNAME="4" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="37646" TYPE="XREF-TEXTCOPY"Qualified Association PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="2" VALIGN="TOP" MOREROWS="0"BothCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="4" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="12066" TYPE="XREF-TEXTCOPY"Persistent and REFID="11158" TYPE="XREF-TEXTCOPY"How do you create a persistent classCOLNAME="1" VALIGN="TOP" MOREROWS="0"Referential IntegrityCOLNAME="2" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="4" VALIGN="TOP" MOREROWS="0"Global definedOnOffCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="21782" TYPE="XREF-TEXTCOPY"AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="4" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="23357" TYPE="XREF-TEXTCOPY"GeneralizationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Referred ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="23113" TYPE="XREF-TEXTCOPY"Modeling GUI ObjectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl Method Implementation ProcedureCOLNAME="2" VALIGN="TOP" MOREROWS="0"Non-persistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="18195" TYPE="XREF-TEXTCOPY"Tcl Method Implementation ProcedureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Text COLNAME="2" VALIGN="TOP" MOREROWS="0"BothCOLNAME="3" VALIGN="TOP" MOREROWS="0"All objectsCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="36796" TYPE="XREF-TEXTCOPY"Free TextCOLNAME="1" VALIGN="TOP" MOREROWS="0"Update PolicyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="4" VALIGN="TOP" MOREROWS="0"DefaultNoneCascadeRestrictNullifyCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="21782" TYPE="XREF-TEXTCOPY"AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PersistentCOLNAME="3" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="4" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="5" VALIGN="TOP" MOREROWS="0"REFID="23357" TYPE="XREF-TEXTCOPY"GeneralizationPowerBuilder Code Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for PowerBuilderAbout this manualThe ObjectTeam Code Generation Guide for PowerBuilder contains information specific to the PowerBuilder« programming language. This includes information for setting up, configuring, and specifying code generation details in CDs that you will use to generate PowerBuilder code. PrerequisitesThis guide is intended for experienced users of ObjectTeam and the analysis and design method it supports. This guide gives you information on how to map ObjectTeam diagrams to PowerBuilder code; it does not teach you how to use PowerBuilder.To customize or extend the capabilities of the PowerBuilder code generator, you must have a thorough understanding of the ObjectTeam Shell, the Object-Oriented Programming Language (OOPL) model structure, and the Tool Command Language (Tcl) commands.PowerBuilder versionThe PowerBuilder code generator is designed for use with PowerBuilder 5.0, Professional or Enterprise edition. To avoid potential problems, ensure that the following PowerBuilder files are in your path before using the PowerBuilder code generator:n PowerBuilder 5.0\pb050.exe n Common Files\Powersoft Shared\pborc050.dll Chapter 1 ID="13837"Preparing Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for PowerBuilderIntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.PowerBuilder module requiredThe ObjectTeam module PowerBuilder Code Generation provides the menu items, the properties and the Tcl code required to use the PowerBuilder Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="40013" TYPE="XREF-TEXTCOPY"Chapter 2, Generating Code, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11800" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11719" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventUpper- and lower-case charactersObjectTeam is case-sensitive, but in many cases PowerBuilder allows only lower-case characters. To prevent potential problems, Cayenne strongly recommends that you use only lower-case characters to name items in systems that are used with the PowerBuilder code generator.ClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions of the class type. In PowerBuilder, each ObjectTeam class must have a valid supertype. For more information, see REFID="15448" TYPE="XREF-TEXTCOPY"Mapping Classes.External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00785.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/pb/pbobjdes.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="16205" TYPE="XREF-TEXTCOPY"Chapter 3, Modeling Nonvisual Elements, and REFID="41939" TYPE="XREF-TEXTCOPY"Chapter 4, Modeling the Visual Interface, describe how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 ID="40013"Generating CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for PowerBuilderIntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details that not specified in the model.Prerequisitesn The ObjectTeam module PowerBuilder Code generation must be active from Object Design Phase and Implementation Phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="13837" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Generated filesThe PowerBuilder source files generated by ObjectTeam are ASCII files that can be imported into a PowerBuilder (.pbl) library.Steps for generating codeThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Configure the PowerBuilder environment, copying required source files from the ObjectTeam installation directories to the appropriate user environment directories.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Import your systems into the Implementation phase. During this step, ObjectTeam runs the Tcl scripts that generate the PowerBuilder source files.Note: System level in the Implementation phase is fundamentally different than System level in other phases. The System files in the Implementation phase are source files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam generates a portion of your application, but not the entire application. To complete the generated source files, edit them in PowerBuilder, as described in the following table.Steps for editing and regenerating codeThe following table provides an overview of the process for editing and regenerating code. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Create a PowerBuilder (.pbl) library and import the generated source files into it. You can do this in either ObjectTeam or PowerBuilder.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"In PowerBuilder, create a PowerBuilder application. Add the library you just created to the library search path of the application. The generated PowerBuilder objects are now available in your PowerBuilder application.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"In PowerBuilder, complete the generated code. For example, ObjectTeam generates events for an object, but you must complete the event scripts in PowerBuilder.The PowerBuilder (.pbl) library now contains the modified code.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Export the modified code from the PowerBuilder (.pbl) library, overwriting the generated source files. The generated source files now contain the changes that you made in PowerBuilder.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"In ObjectTeam, modify the model and regenerate the PowerBuilder source files.The edits you made in PowerBuilder are not lost when you regenerate the source files (by reimporting systems into the Implementation phase). The code generator recognizes your changes and transfers them to the newly generated files.TERM1="code regeneration"TERM1="regeneration" TERM2="code" TERM1="otsh" TERM2="code regeneration"COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Import the generated source files into your PowerBuilder (.pbl) library and return to step 3.Importing and exporting source filesObjectTeam supports incremental development. You can edit the ObjectTeam model or the generated PowerBuilder code. The PowerBuilder code generator preserves your changes as long as you remember the following:n After editing the model in ObjectTeam, generate the PowerBuilder source file and import it into your PowerBuilder (.pbl) library. Your changes are now available in PowerBuilder.n After editing in PowerBuilder, export the code overwriting the originally generated source files. The PowerBuilder source file now contains your changes, which will be preserved when ObjectTeam regenerates the source file.The following figure illustrates this process:FILENAME="00786.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/pb/pbcodegn.fm5.mif"Automatic import and exportIt is critical to import generated source files into your PowerBuilder (.pbl) library and to export edited files out of the PowerBuilder library. REFID="31389" TYPE="XREF-TEXTCOPY"Workflow Using the Keep Synchronized Property describes how you can automate the process by using the System-level property Keep Synchronized With PowerBuilder Libraries.Illustration of code generationThe following illustration shows how ObjectTeam generates code, including the names of the Tcl scripts that it uses.FILENAME="00787.tif" ORIGSEQ="23" ORIGTYPE="I" ORIGDOC="../../sources/pb/pbcodegn.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35736" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your PowerBuilder Environment 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23311" TYPE="XREF-TEXTCOPY"Generating PowerBuilder Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38296" TYPE="XREF-TEXTCOPY"Editing Generated Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28110" TYPE="XREF-TEXTCOPY"Regenerating Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15913" TYPE="XREF-TEXTCOPY"Using PowerBuilder With ObjectTeam 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'24ID="35736"Components of Code GenerationTcl scripts for code generationThe Tcl script import.tcl activates, among other things, the Tcl script TERM1="gencpp.tcl"pbimporter.tcl, which contains Tcl procedures to retrieve information from internal models, format it and write it to PowerBuilder files. pbimporter.tcl uses other Tcl scripts that use other Tcl scripts as well, and so on.The default TERM1="Tcl" TERM2="script files used for code generation"Tcl scripts used to generate PowerBuilder files can be found under the M4_home\tcl\l_pb directory tree.For more informationSee REFID="22956" TYPE="XREF-TEXTCOPY"Chapter 6, Customizing PowerBuilder Code Generation.OOPL modelWhen you generate code, ObjectTeam converts the CDs and CDMs of the Object Design phase into an intermediate model: the OOPL model. The PowerBuilder code generator then generates the PowerBuilder source files based on the OOPL model.For more informationThe ObjectTeam Programming Interface Guide provides a detailed description of the classes in the OOPL model.TERM1="VisualWorks"PowerBuilder filesYou use ObjectTeam to model visual and nonvisual objects, as well as the associations among them. From the ObjectTeam model, you generate PowerBuilder source files that can be imported into a PowerBuilder (.pbl) library.For more informationSee REFID="23311" TYPE="XREF-TEXTCOPY"Generating PowerBuilder Source Files and REFID="38296" TYPE="XREF-TEXTCOPY"Editing Generated Source Files.PowerBuilderPowerBuilder is an application development environment. All PowerBuilder objects are stored in PowerBuilder (.pbl) libraries. Every PowerBuilder application has a library search path that defines the set of PowerBuilder libraries that are used by the application. In PowerBuilder, you can edit any object defined in any library that is included in the library search path of the current application.For more informationSee the PowerBuilder documentation.TERM1="code regeneration"TERM1="regeneration" TERM2="code"Code TERM1="otsh" TERM2="code regeneration"regenerationCode (re)generation is an automated process that (re)generates PowerBuilder files. ObjectTeam ensures that n You can regenerate previously generated PowerBuilder source files when you change your ObjectTeam model.n Changes that you make in PowerBuilder are preserved when you regenerate the PowerBuilder source files.For more informationSee REFID="28110" TYPE="XREF-TEXTCOPY"Regenerating Code.ID="40480"Configuring Your PowerBuilder EnvironmentIntroductionTERM1="Visual Basic" TERM2="configuring environment"In ObjectTeam, you configure your PowerBuilder environment in the Object Design phase and the Implementation phase.What happens in the Object Design phaseWhen you configure your PowerBuilder environment in the Object Design phase, ObjectTeam adds a new system to this phase of your project: the PBBuiltins system. This system contains the classes that represent the PowerBuilder object types, such as window, check box, custom visual object, and custom class object.PurposeIn ObjectTeam, you model a PowerBuilder application by creating an ObjectTeam class for each PowerBuilder object that you want to create. The supertype class of the ObjectTeam class indicates the type of PowerBuilder object that you want to create. In other words, when you model a PowerBuilder application, each ObjectTeam class that you create must be derived from one of the classes defined in the PBBuiltins system.What happens in the Implementation phaseWhen you configure your PowerBuilder environment in the Implementation phase, ObjectTeam copies the following files to the user_environment\src directory, where user_environment is the file path for your generated files. (For more information about the user environment, see the ObjectTeam Project Management Guide.)n classlib.pbl. A PowerBuilder library that contains the following custom class objects.n classdict.sru, classset.sru, dictelement.sru, setelement.sru. PowerBuilder source files that define custom class objects used by the code that ObjectTeam generates for associations. For more information about how these classes are used, see REFID="14358" TYPE="XREF-TEXTCOPY"Mapping Associations.Modify your library search pathInclude classlib.pbl in the library search path of any PowerBuilder application that uses PowerBuilder files generated by ObjectTeam. If the classlib.pbl is not in the library search path, the generated code cannot access the classes that it requires.How to configure the environment in Object DesignΣ To configure the PowerBuilder environment in the Object Design phase:1 Move to Object Design Phase level, or System level in the Object Design phase.2 Select Utilities | Configure PowerBuilder Environment.ObjectTeam creates the PBBuiltins system in the Object Design phase.Tip: For an overview of the classes defined in this system, open the system in ObjectTeam and examine the CD named SystemObjectsHierarchy. For more detailed information, use Utilities | Reports | On Classes to generate a report of the classes in the system.ID="36159"How to configure the environment in ImplementationΣ To configure the PowerBuilder environment in the Implementation phase:1 Move to Implementation Phase level.2 Select Utilities | Configure PowerBuilder Environment.ObjectTeam copies the .pbl and .sru files to the user_environment\src directory.Note: You can also configure the PowerBuilder environment from System level in the Implementation phase. However, to avoid potential errors, it is best to configure your environment from the Implementation Phase level before importing any systems.TERM1="Implementation" TERM2="importing systems"TERM1="importing" TERM2="in Implementation Phase"ID="23311"Generating PowerBuilder Source FilesResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create PowerBuilder source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are PowerBuilder files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate source files on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate PowerBuilder.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet. - Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files.How to generate code on System levelΣ To generate (selected) source files for a system from System level of the Implementation phase:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate PowerBuilder.A cascading menu appears.3 Select New, Selected, or All:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files. The following illustration shows the Monitor window after generating code for a system.FILENAME="00788.unk" ORIGFILE="pics/import.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbcodegn.fm5.mif"Location of the source filesThe PowerBuilder files are stored in the repository as external files. They are also written to the user_environment\system-name directory, where user_environment is the file path for your generated files. For more information on the user environment, see the ObjectTeam Project Management Guide. The following illustration shows how the source files appear in the Browser.FILENAME="00789.unk" ORIGFILE="pics/pbfiles.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbcodegn.fm5.mif"TERM1="user environment" TERM2="updating"TERM1="Update User Environment (Utilities menu)"Update user environmentUtilities | Update User Environment updates your user environment based on the repository. This can be particularly useful if you are working on two machines, and the user environment of each is set to a local drive. When you move between machines, you can use Utilities | Update User Environment to update the local drive of the current machine.Generated filesThe PowerBuilder code generator generates the following files:TERM1="C++ header file" TERM2="generating"TERM1="generating" TERM2="C++ header file"COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"File TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"class.srwCOLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that represents a PowerBuilder window.COLNAME="1" VALIGN="TOP" MOREROWS="0"class.srmCOLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that represents a PowerBuilder menu.COLNAME="1" VALIGN="TOP" MOREROWS="0"class.sruCOLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that represents a PowerBuilder user object (custom visual object, standard visual object, custom class object, or standard class object).COLNAME="1" VALIGN="TOP" MOREROWS="0"class.srsCOLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that represents a PowerBuilder structure.Note: ObjectTeam does not generate a PowerBuilder source file for every ObjectTeam class. Only for those classes that represent appropriate PowerBuilder objects and only if the Global Property of class is set to Yes. See REFID="15448" TYPE="XREF-TEXTCOPY"Mapping Classes for more information.When code is not generatedThe PowerBuilder code generator generates code for all classes defined in the current system. It does not generate code in the following situations:n If a CD in the current system contains a class that is defined in another system, the code generator does not generate code for that class.n If a CD in the current system contains a class component (a graphical element) that does not have an associated item (a semantic element), the code generator does not generate code for that class.Note: For more information about components and items, see REFID="29698" TYPE="XREF-TEXTCOPY"Working With Items on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31 in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams, of the ObjectTeam Modeling Guide.ID="38296"Editing Generated Source FilesIntroductionThe generated PowerBuilder files are ASCII text files that can be imported into a PowerBuilder (.pbl) library. This section describes how to edit the generated files.PrerequisiteAt System level in the Implementation phase, the Browser displays a PowerBuilder menu that provides access to PowerBuilder features, such creating a PowerBuilder (.pbl) library. To use the items in the PowerBuilder menu, the following PowerBuilder files must be in your path:n PowerBuilder 5.0\pb050.exe n Common Files\Powersoft Shared\pborc050.dll Command line accessThe executable genpbl.exe provides command line access to the items in the PowerBuilder menu. For a description of genpbl and the other ObjectTeam executables, see the ObjectTeam System Administrator's Guide.Edit generated files in PowerBuilderThe recommended method for editing the generated source files is to import them into a PowerBuilder (.pbl) library, edit the library in PowerBuilder, and then export the modified information from the library back to the generated source files. REFID="36293" TYPE="XREF-TEXTCOPY"Workflow for Editing Files describes this process.Text editorYou can also edit the generated source files using your default text editor; however, the PowerBuilder documentation discourages this way of editing PowerBuilder information. To edit a generated file using your default text editor, double-click on the file that you want to edit.Keep Synchronized... propertyThe System-level property, Keep Synchronized With PowerBuilder Libraries, helps to automate the process of moving the generated PowerBuilder source files in and out of the PowerBuilder (.pbl) libraries, as described in REFID="31389" TYPE="XREF-TEXTCOPY"Workflow Using the Keep Synchronized Property.Editing generated filesThe generated PowerBuilder files serve as framework files. They contain the code that reflects your model, but not all of the code necessary for the application. Comments indicate where you should add code to complete the application:n TERM1="C++" TERM2="function"TERM1="C++" TERM2="code from method"TERM1="method" TERM2="body"A function or event is generated for each operation defined in an ObjectTeam class; however, you must add the code that implements the function or event. The script of the generated function or event contains one of the following comments. Add statements below the comment; optionally, delete the comment.// Implement this function!// Implement this event!n A generated constructor or destructor event contains the following comments; it might also contain generated statements. Add statements between the comments.// Start user section// End user sectionNote: See REFID="15448" TYPE="XREF-TEXTCOPY"Mapping Classes for more information about generating constructor and destructor events.n Other generated functions, such as the accessor methods for associations, also contain generated code. They do not contain comments indicating where you should add code; therefore, you should not add code to these functions. If you add code, it is not preserved when you regenerate the source files.Changes are preservedChanges you make to generated PowerBuilder files are preserved when you regenerate the files, provided that you adhere to the following guidelines:n TERM1="code regeneration" TERM2="regeneration markers"TERM1="regeneration markers"Do not delete generated comments. The Visual Basic code generator uses the comments to parse the generated source files.n Add code only where indicated by comments, as described above.n If you add variables (instance variables, shared variables, or new variables in a structure), functions, events, structures, or window controls to a generated object, use round-trip engineering to add the appropriate attributes, operations, or classes to the ObjectTeam model before regenerating the files. For more informationSee REFID="22218" TYPE="XREF-TEXTCOPY"Round-Trip Engineering for more information.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36293" TYPE="XREF-TEXTCOPY"Workflow for Editing Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31389" TYPE="XREF-TEXTCOPY"Workflow Using the Keep Synchronized Property 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19ID="36293"Workflow for Editing FilesIntroductionThis section describes the workflow for generating PowerBuilder source files, editing the generated files, and then regenerating the source files.PowerBuilder librariesYou can create PowerBuilder libraries in ObjectTeam or PowerBuilder. However, the items in the PowerBuilder menu only work with the PowerBuilder libraries created by ObjectTeam; therefore, the workflow described here uses ObjectTeam to create the PowerBuilder libraries that hold the generated source files.ID="30704"How to generate and edit source filesΣ To generate and edit PowerBuilder source files:1 Generate the source files by importing systems or files into Implementation Phase level, as described in REFID="23311" TYPE="XREF-TEXTCOPY"Generating PowerBuilder Source Files.2 If you have not yet created a PowerBuilder library, do so now:a Move to the System in the Implementation phase that contains the generated source files.b Select PowerBuilder | Library | Create.ObjectTeam opens a Monitoring window to display messages, creates a PowerBuilder library (system-name.pbl), and updates the Information area to display the name of the library.3 Select PowerBuilder | Import Entries Into Library | All.ObjectTeam opens a Monitoring window to display messages and imports the generated files into the PowerBuilder (.pbl) library.Alternative: Select the generated files that you want to import and select PowerBuilder | Import Entries Into Library | Selected.4 Select PowerBuilder | Run PowerBuilder.ObjectTeam opens an Execution window and executes the command to start PowerBuilder.5 In PowerBuilder:a Create or open your application.b Add the ObjectTeam-created library to the library search path of your application.c Edit the objects in the library as you would any other PowerBuilder objects.d Exit from all PowerBuilder painters to ensure that you have saved all changes.Library search pathsIn ObjectTeam, when you import source files into a PowerBuilder library, ObjectTeam constructs and uses a temporary library path. The temporary library path lists all PowerBuilder libraries in the current Implementation phase. This ensures that the classlib.pbl library is also included in the temporary library path. (classlib.pbl is the PowerBuilder library created for you when you configure the PowerBuilder environment in the Implementation phase, as described in REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your PowerBuilder Environment.)In PowerBuilder, when you add a PowerBuilder library to your application, if that library references other libraries, you must ensure that you also add the referenced libraries to the library path of the application.How to regenerate the edited source filesΣ To regenerate the edited source files:1 Select PowerBuilder | Export Entries From Library | All.Alternative: Select the files that you want to export and select PowerBuilder | Export Entries From Library | Selected.ObjectTeam exports the modified objects out of the PowerBuilder (.pbl) library, updating the generated files. The generated files now contain the changes that you made in PowerBuilder.2 If, in PowerBuilder, you added variables (instance variables, shared variables, or new variables in a structure), functions, events, structures, or window controls to a generated object, use round-trip engineering to add the appropriate attributes, operations, or classes to the ObjectTeam model. See REFID="22218" TYPE="XREF-TEXTCOPY"Round-Trip Engineering for more information.3 Regenerate the source files, as described in the previous procedure (REFID="30704" TYPE="XREF-TEXTCOPY"How to generate and edit source files).WorkflowThe following figure shows the workflow graphically:FILENAME="00790.tif" ORIGSEQ="40" ORIGTYPE="I" ORIGDOC="../../sources/pb/pbcodegn.fm5.mif"ID="31389"Workflow Using the Keep Synchronized PropertyKeep Synchronized propertyWhen you select the System-level property Keep Synchronized With PowerBuilder Libraries, ObjectTeam automatically moves the generated files into and out of the PowerBuilder library for you:n When you generate source files by importing systems or files into Implementation Phase level, the PowerBuilder code generator generates the source files and imports them into the PowerBuilder library.- If you are generating the source files for the first time and have not yet created a PowerBuilder library does not yet exist, the code generator automatically creates the PowerBuilder library.- If you are regenerating the files, the code generator automatically exports the generated (edited) source files from the PowerBuilder library before regenerating the source files.n When you use round-trip engineering, the code generator automatically exports the generated (edited) source files from the PowerBuilder library before running round-trip engineering.How to use the Keep Synchronized propertyΣ To use the Keep Synchronized With PowerBuilder Libraries property:1 In the Browser, move to Implementation phase level.2 Select the system on which you want to set the Keep Synchronized property.3 Select File | Properties | Edit.The Edit Properties dialog box appears.4 In the left pane, select the system name.The System-level properties appear in the right pane.5 Select the Keep Synchronized With PowerBuilder Libraries check box.How to generate and edit source filesΣ To generate and edit PowerBuilder source files:1 Select the Keep Synchronized With PowerBuilder Libraries property for the current system.2 Generate the source files by importing systems or files into Implementation Phase level, as described in REFID="23311" TYPE="XREF-TEXTCOPY"Generating PowerBuilder Source Files.ObjectTeam opens a Monitoring window to display messages, creates a PowerBuilder library (system-name.pbl), imports the generated files into the PowerBuilder (.pbl) library, and updates the Information area.3 Select PowerBuilder | Run PowerBuilder.ObjectTeam opens an Execution window and executes the command to start PowerBuilder.4 In PowerBuilder:a Create or open your application.b Add the ObjectTeam-created library to the library search path of your application.c Edit the objects in the library as you would any other PowerBuilder objects.d Exit from all PowerBuilder painters to ensure that you have saved all changes.How to regenerate the edited source filesΣ To regenerate the edited source files:1 Select the Keep Synchronized With PowerBuilder Libraries property for the current system.2 If, in PowerBuilder, you added variables (instance variables, shared variables, or new variables in a structure), functions, events, structures, or window controls to a generated object, use round-trip engineering to add the appropriate attributes, operations, or classes to the ObjectTeam model. See REFID="22218" TYPE="XREF-TEXTCOPY"Round-Trip Engineering for more information.ObjectTeam exports the modified objects out of the PowerBuilder (.pbl) library, updating the generated files, before running running-trip engineering.3 Regenerate the source files by importing systems or files into Implementation Phase level, as described in REFID="23311" TYPE="XREF-TEXTCOPY"Generating PowerBuilder Source Files.ObjectTeam exports the modified objects out of the PowerBuilder (.pbl) library, updating the generated files, before regenerating the source files.WorkflowThe following figure shows the workflow graphically. The operations shown in the shaded area are performed automatically when the Keep Synchronized With PowerBuilder Libraries property is selected.FILENAME="00791.tif" ORIGSEQ="54" ORIGTYPE="I" ORIGDOC="../../sources/pb/pbcodegn.fm5.mif"ID="28110"Regenerating CodeTERM1="code regeneration" TERM2="edited C++ source file"Design changes and code changesObjectTeam supports incremental development. You can generate code from your models, edit that code, and regenerate the code without losing your changes. You can work with models during design and with code during implementation, shifting your focus between the two as necessary.It is, however, important that you make changes where appropriate.n Change the code when you are adding code that is not generated by ObjectTeam (for example, adding method bodies), or when you are making local changes to the code (for example, adding a missing variable or function to a class).Note: If you add variables, functions, events, structures, or controls to the code, you must add the appropriate attributes, operations, or classes to ObjectTeam before regenerating the source files. See REFID="38296" TYPE="XREF-TEXTCOPY"Editing Generated Source Files for more information.n Change the model when you are changing the structure of the model (for example, if you are changing the class hierarchy or class associations), or when you are making global changes to the code (for example, if you are changing the name of a class, attribute, or operation).Editing generated filesThe generated PowerBuilder files are framework files that you need to complete. Comments in the file indicate where you should add code.Always edit the generated files in accordance with the guidelines described in REFID="38296" TYPE="XREF-TEXTCOPY"Editing Generated Source Files. This ensures that your changes are preserved when you regenerate the PowerBuilder files.Editing the ObjectTeam modelThe ObjectTeam model is always used as the source for generating the PowerBuilder files. If you change the model, you generally want to regenerate the PowerBuilder files.Old filesChanges to the ObjectTeam model can cause a previously generated PowerBuilder file to change. In this case, the code generator saves the originally generated file. This saved copy of the generated file is marked as an old file and appears highlighted in the Information area of the Browser.You can compare the old and new copies of a generated file and copy sections of the old file to the new file as necessary. However, you must always delete all old files before regenerating the PowerBuilder files.Preserving filesIf you want to save both the old files and the new files, you can copy the old files to another directory before deleting them from the Browser. Alternatively, before changing the ObjectTeam model, you can freeze both the model and the generated PowerBuilder files; this ensures that you have a stable version of the model and generated files to return to should your changes to the model not give the desired results.How to regenerate codeWarning: You must delete old files before you can regenerate code.Σ To regenerate one or more PowerBuilder files:1 In the Implementation phase, move to the System that contains the files that you want to regenerate.2 Select the files.3 Use Utilities | Generate PowerBuilder | Selected.ObjectTeam opens a Monitor window for displaying log messages, then imports the files.For more informationSee REFID="23311" TYPE="XREF-TEXTCOPY"Generating PowerBuilder Source Files for more information about the Utilities | Generate PowerBuilder menu item.ID="15913"Using PowerBuilder With ObjectTeamIntroductionThis section contains hints and tips for using PowerBuilder and ObjectTeam to build applications.PowerBuilder librariesThe following guidelines for creating and maintaining PowerBuilder libraries that contain objects generated by ObjectTeam are strongly recommended:n Create the PowerBuilder (.pbl) library in ObjectTeam. This ensures that the library is in the Cayenne repository.n Import into the library only PowerBuilder source files originally generated by ObjectTeam. This ensures that all objects in the library are in the Cayenne repository.n An ObjectTeam system can contain at most one PowerBuilder library. Import into a PowerBuilder library only the source files that are contained in the same system. This ensures that the source files are correctly regenerated.n When you add these libraries to the library search path of a PowerBuilder application, point directly to the library created by ObjectTeam. This ensures that you are using the library that is in the Cayenne repository.PowerBuilder applicationsWhen you create an application in PowerBuilder, you can have PowerBuilder build an application template. Typically, you do not want to build the application template if you plan to use ObjectTeam.If you choose to build a template application, PowerBuilder adds a number of objects to the default library of the application. Because these objects are originally created in PowerBuilder, you cannot use ObjectTeam to edit or maintain them.Reusing objectsIf you have objects defined in existing PowerBuilder (.pbl) libraries, you can reuse those objects by referencing them as external classes in ObjectTeam. See REFID="37141" TYPE="XREF-TEXTCOPY"Using External Objects for an example.Chapter 3 Modeling ID="16205"Nonvisual ElementsTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for PowerBuilderIntroductionThis chapter describes how to model the nonvisual aspects of an application. This includes:n Nonvisual objects: custom class objects, class standard objects, and structures.n Nonvisual aspects of visual objects (for example, variables and functions in a window).Chapter 4, Modeling the Visual Interface, describes how to model the user interface of an application.Summary of mappingsThe following table summarizes the mappings between ObjectTeam and PowerBuilder:COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="2" VALIGN="TOP" MOREROWS="0"PowerBuilderCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"User object, structure, window, or menuCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="1" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event or functionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Variable and access functionsUpper- and lower-case charactersObjectTeam is case-sensitive, but in many cases PowerBuilder allows only lower-case characters. To prevent potential problems, Cayenne strongly recommends that you use only lower-case characters when naming items in ObjectTeam systems used with the PowerBuilder code generator.PrerequisitesThis chapter assumes that you are familiar with generating and editing PowerBuilder source files, as described in Chapter 2, Generating Code.ExamplesWhen you are using the PowerBuilder code generator, every ObjectTeam class must have a valid supertype class. For simplicity, the examples in this chapter do not show the supertype class. Unless otherwise indicated, you can assume that the supertype class is nonvisualobject, which generates a custom class object.For more informationSee REFID="15448" TYPE="XREF-TEXTCOPY"Mapping Classes for more information about the valid supertype classes.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15448" TYPE="XREF-TEXTCOPY"Mapping Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21955" TYPE="XREF-TEXTCOPY"Mapping Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14596" TYPE="XREF-TEXTCOPY"Mapping Operations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28744" TYPE="XREF-TEXTCOPY"Mapping Inheritance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'24COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14358" TYPE="XREF-TEXTCOPY"Mapping Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26ID="15448"Mapping ClassesIntroductionAn ObjectTeam class maps to a PowerBuilder object.Supertype class indicates object typeThe supertype of an ObjectTeam class indicates the type of PowerBuilder object that you want to generate. If an ObjectTeam class does not have a valid supertype class, ObjectTeam generates a custom class user object.PBBuiltinsEach type of PowerBuilder object that ObjectTeam can generate is represented as a class in the PBBuiltins system; these classes are the valid supertype classes. ObjectTeam creates the PBBuiltins system when you configure the Object Design environment, as described in REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your PowerBuilder Environment.Global and local objectsThe Global Type property of the ObjectTeam class determines whether the generated PowerBuilder object is global or local.Note: ObjectTeam generates PowerBuilder source files only for global objects. Typically, local objects are contained in a global object and, therefore, defined in the source file of that global object.Constructors and destructorsPowerBuilder supports constructor and destructor events for many types of objects. ObjectTeam generates these events in the following situations:n You define an operation named constructor or destructor and, in the operation properties, select the Event check box to indicate that the operation should be generated as an event. See REFID="14596" TYPE="XREF-TEXTCOPY"Mapping Operations.n You define an association. In this case, ObjectTeam generates a constructor event to support creation and maintenance of the association. See REFID="14358" TYPE="XREF-TEXTCOPY"Mapping Associations.Note: Many ObjectTeam code generators generate constructors based on the existence of a $create operation. The PowerBuilder code generator does no special processing for a $create operation.Class propertiesYou use ObjectTeam's class properties to provide input to the code generator. REFID="39809" TYPE="XREF-TEXTCOPY"Editing Class Properties describes how to edit class properties, and the effect of each property.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16085" TYPE="XREF-TEXTCOPY"Specifying Object Type 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13782" TYPE="XREF-TEXTCOPY"Specifying Global Type 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39809" TYPE="XREF-TEXTCOPY"Editing Class Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8ID="16085"Specifying Object TypeIntroductionEvery ObjectTeam class must have a valid supertype class. The code generator uses the supertype class to determine what type of PowerBuilder object to generate.ExampleTo model a PowerBuilder window, for example, you create an ObjectTeam class whose supertype is window. (The window class is defined in the PBBuiltins system.)Default supertype classIf an ObjectTeam class does not have a supertype class, the PowerBuilder code generator displays a warning message and uses nonvisualobject as the supertype class. This indicates that the desired PowerBuilder object type is custom class user object.Supertype classes for PowerBuilder typesThe following table lists the PowerBuilder object types generated by ObjectTeam and their matching supertype classes from the PBBuiltins system:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="270p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PowerBuilder TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"PBBuiltins ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"windowCOLNAME="2" VALIGN="TOP" MOREROWS="0"windowCOLNAME="1" VALIGN="TOP" MOREROWS="0"menuCOLNAME="2" VALIGN="TOP" MOREROWS="0"menu, menucascadeCOLNAME="1" VALIGN="TOP" MOREROWS="0"structureCOLNAME="2" VALIGN="TOP" MOREROWS="0"structureCOLNAME="1" VALIGN="TOP" MOREROWS="0"standard class user objectsCOLNAME="2" VALIGN="TOP" MOREROWS="0"connection, datastore, dynamicdescriptionarea, dynamicstagingarea, error, mailsession, message, oleobject, olestorage, olestream, pipeline, transaction, transportCOLNAME="1" VALIGN="TOP" MOREROWS="0"custom class user objectCOLNAME="2" VALIGN="TOP" MOREROWS="0"nonvisualobjectCOLNAME="1" VALIGN="TOP" MOREROWS="0"standard visual user objectsCOLNAME="2" VALIGN="TOP" MOREROWS="0"checkbox, commandbutton, datawindow, dropdownlistbox, dropdownpicturelistbox, editmask, graph, groupbox, hscrollbar, line, listbox, listview, multilineedit, olecontrol, oval, picture, picturebutton, picturelistbox, radiobutton, rectangle, richtextedit, roundrectangle, singlelineedit, statictext, tab, treeview, vscrollbarCOLNAME="1" VALIGN="TOP" MOREROWS="0"custom visual user objectsCOLNAME="2" VALIGN="TOP" MOREROWS="0"userobjectStructuresA structure groups variables; therefore, an ObjectTeam class that represents a structure should contain only attributes. The PowerBuilder code generator ignores any operations that are specified for such a class.A structure can be either a global or local object. As described in REFID="13782" TYPE="XREF-TEXTCOPY"Specifying Global Type, the Global Type property of the ObjectTeam class that represents the structure determines whether the structure is generated as a global or local object.Standard class user objectsA standard class user object inherits its definition from a built-in, nonvisual PowerBuilder object, such as a connection or datastore. The attributes and operations that you specify for an ObjectTeam class that represents a standard class user object enhance the behavior of the built-in PowerBuilder object.A standard class user object should be a global object; therefore, the Global Type property of an ObjectTeam class that represents a standard class user object should be set to Yes.Custom class user objectA custom class user object is an object of your own design that encapsulates the attributes (variables) and operations (functions) that you specify.A custom class user object should be a global object; therefore, the Global Type property of an ObjectTeam class that represents a custom class user object should be set to Yes.Visual objectsChapter 4, Modeling the Visual Interface, provides more information about modeling windows, menus, standard visual user objects, and custom visual user objects.ID="13782"Specifying Global TypeIntroductionIn PowerBuilder, an object can be global or local.n Global objects are independent objects that can be used anywhere in the application. They are stored in PowerBuilder (.pbl) libraries.n Local objects are contained in global objects. A local object is defined in a global object and can only be accessed within the context of that object.Global Type propertyThe Global Type property of an ObjectTeam class determines whether the generated PowerBuilder object is global or local:n Yes (default) indicates that the object is global.n No indicates that the object is local.For more informationREFID="39809" TYPE="XREF-TEXTCOPY"Editing Class Properties describes how to set class properties.Source files generated for global objects onlyThe PowerBuilder code generator generates a PowerBuilder source file for each ObjectTeam class that represents a global PowerBuilder object.The PowerBuilder code generator does not generate source files for local objects. Typically, a local object is contained in a global object and is defined in the source file generated for the global object.Global objects must be defined itemsBefore generating code, check that all classes that represent global objects are defined items. If a class is not a defined item, it is an external class; ObjectTeam does not generate code for external classes.Σ To check that a class is a defined item:1 Display the Edit Properties dialog box for the class.2 Examine the Define Item button on the dialog box.- If the Define Item button is available, the class is not a defined item. Select the Define Item button to define the item.- If the Define Item button is unavailable (grayed out), the class is already a defined item.ID="39809"Editing Class PropertiesIntroductionIn the Object Design phase, you use class properties to provide input to the PowerBuilder code generator.How to edit class propertiesTERM1="Edit Properties (Item menu)" TERM2="for class"TERM1=""TERM1="class property" TERM2="editing"Σ To edit properties of a class:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select the class name.The class properties appear on the right side of the dialog box.FILENAME="00792.unk" ORIGFILE="pics/clsprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"4 Select the desired properties:- Use the Global Type field to indicate whether the object is global or local, as described in REFID="13782" TYPE="XREF-TEXTCOPY"Specifying Global Type.- Use the Autoinstantiate field to indicate that the generated object is autoinstantiated (that is, a variable whose data type is the same as this class is automatically assigned an instance of the class when the variable comes in scope).Note: This field is ignored unless the supertype of the current class is userobject or nonvisualobject.- Use the Window Type field to specify the type of the generated window: Child, Main (default), MDI, MDIHelp, Popup, or Response.Note: This field is ignored unless the supertype of the current class is window. - Use the Text tab to enter a description of the class. This text does not appear in the generated code.5 Select OK.ID="21955"Mapping AttributesIntroductionTERM1="attribute" TERM2="mapping of"TERM1="mapping" TERM2="attribute"TERM1="Visual Basic" TERM2="variables"ObjectTeam attributes map to PowerBuilder variables, either instance variables or shared variables.Note: If the Global Type property of an ObjectTeam class is set to No, the code generator ignores the data attributes of the class. See REFID="39809" TYPE="XREF-TEXTCOPY"Editing Class Properties for more information.Attribute syntaxIn ObjectTeam, you use the following syntax to specify attributes for a class:[ * | $ | / ] name : type [ = initial-value ]wheren * indicates a key attribute, which is generated as an instance variable.n $ indicates a class attribute, which is generated as a shared variable.TERM1="attribute" TERM2="class attribute"TERM1="class variable"TERM1="$ (class attribute)"n / indicates a derived attribute. PowerBuilder does not support derived attributes; therefore, this indicator is ignored by the code generator.TERM1="derived attribute"TERM1="/ (derived attribute)"n type is either a standard type or the name of another class, as described in REFID="19428" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types.n initial-value, if specified, is the initial value assigned to the generated variable. The code generator does not validate the data type of the specified value. TERM1="attribute" TERM2="default value"TERM1="default value, for attribute"TERM1="initial value, for attribute"Attribute maps to variableTERM1="variable, in Visual Basic"By default, an attribute maps to an instance variable, as shown in the following example:FILENAME="00793.unk" ORIGFILE="pics/cust.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"// User defined attributesstring namestring displayfont = "Helvetica"Attribute propertiesYou use attribute properties to provide input to the code generator. REFID="17827" TYPE="XREF-TEXTCOPY"Editing Attribute Properties describes how to edit attribute properties, and the effect of each property.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19428" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17827" TYPE="XREF-TEXTCOPY"Editing Attribute Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17590" TYPE="XREF-TEXTCOPY"Specifying Constants 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34899" TYPE="XREF-TEXTCOPY"Specifying Attribute Access 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="19428"Specifying Attribute Data TypesIntroductionTERM1="data type" TERM2="for attribute"TERM1="attribute" TERM2="data type"Specify the data type of an attribute (or parameter) using either a standard data type or the name of another class. For example:attr:integerDeclaring an arrayTERM1="array, in Java"Use square brackets to declare an attribute as an array. The dimension is optional. For example:attr : integer [ 10 ]This syntax produces the following line of code.integer attr[ 10 ]Standard data typesThe standard data types are defined by the TERM1="stand_types customization file"stand_types customization file. These are the data types that are valid in the Object Design phase.The translation between standard data types and PowerBuilder data types is defined by the TERM1="lang_types customization file"lang_types customization file. These are the translations used by the PowerBuilder code generator.Customizing the standard data typesYou can add additional data types to the list of standard types by editing the stand_types customization file. If you add additional standard types, you must also provide translations for those data types by editing the lang_types customization file.By default, the stand_types and lang_types customization files are defined on Corporate level in the \etc\l_pb external directory. You can edit the customization files at Corporate level, or create and edit them at a lower level, such as Project level. (The customization files at the lower level override the customization files at the higher level.)For more informationThe ObjectTeam Customization Guide describes how to create and edit customization files. The stand_types and lang_types customization files are ASCII files that can be edited using any text editor.ID="17827"Editing Attribute PropertiesIntroductionIn the Object Design phase, you use attribute properties to specify attribute access and to indicate whether the attribute is a constant.How to edit attribute propertiesTERM1="Edit Properties (Item menu)" TERM2="for attribute"TERM1=""TERM1="attribute property" TERM2="editing"Σ To edit attribute properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an attribute name from the list in the left-hand pane of the dialog box.The attribute properties appear on the right side of the dialog box.FILENAME="00794.unk" ORIGFILE="pics/attrprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"4 Select the desired properties:- Use the Constant Attribute field to generate a constant rather than a variable, as described in REFID="17590" TYPE="XREF-TEXTCOPY"Specifying Constants.- Use the Attribute Access field to specify the read/write access for the attribute, as described in REFID="34899" TYPE="XREF-TEXTCOPY"Specifying Attribute Access.- Use the Text tab to enter comment text. The text does not appear in the generated code.TERM1="comment" TERM2="for attribute"TERM1=""TERM1="attribute property" TERM2="for comment"TERM1=""TERM1="Visual Basic" TERM2="comment, for attribute"5 Select OK.ID="17590"Specifying ConstantsIntroductionSelect the Attribute Constant check box on the Misc tab of the Edit Properties dialog box to generate a constant rather than a variable.Initial value requiredObjectTeam uses the attribute's initial value as the value of the constant. If you select the Attribute Constant checkbox for an attribute, you must also specify an initial value for the attribute.ExampleIn the following example, the Attribute Constant property is selected for the displayfont attribute; it is not selected for the name attribute.FILENAME="00795.unk" ORIGFILE="pics/cust.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"// User defined attributesstring nameconstant string displayfont = "Helvetica"ID="34899"Specifying Attribute AccessIntroductionTERM1="attribute" TERM2="access method"TERM1="attribute property" TERM2="access method"TERM1="access property" TERM2="for attribute access method"TERM1=""TERM1="Visual Basic" TERM2="attribute access method"TERM1="attribute access method"TERM1="method" TERM2="attribute access"The values you specify in the Attribute Access group box on the Misc tab of the Edit Properties dialog box determine which access keywords are included in the declaration of the generated variable or constant. In PowerBuilder, these access keywords control access to the variable or constant.ExamplesThe following examples show how the Attribute Access fields (Read-Write) affect code generation for the name attribute.FILENAME="00796.unk" ORIGFILE="pics/cust.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"Public-Public (default)string namePublic-Protectedprotectedwrite string namePublic-Privateprivatewrite string nameProtected-Publicprotected string nameProtected-Protectedprotected string nameProtected-Privateprotected privatewrite string namePrivate-Publicprivate string namePrivate-Protectedprivate string namePrivate-Privateprivate string nameID="14596"Mapping OperationsIntroductionTERM1="procedure" TERM2="mapping of"TERM1="mapping" TERM2="procedure"TERM1="Visual Basic" TERM2="procedures"Operations defined for an ObjectTeam class map to either a function or an event in the generated PowerBuilder object.n Functions. By default, an operation maps to a function. If the operation has a return type, the function has a return value; otherwise, it does not.n Events. If the Event property of an operation is selected, as described in REFID="19182" TYPE="XREF-TEXTCOPY"Editing Operation Properties, the operation maps to an event.Note: Functions are only generated if the Global Type property of the class is set to Yes. See REFID="39809" TYPE="XREF-TEXTCOPY"Editing Class Properties for more information about the Global Type property.Operation syntaxIn ObjectTeam, you use the following syntax to specify operations for a class:[ $ ] name ( [ parameter-list ] ) [ : return_type ] [ {abstract} ]wheren $ indicates a class operation. PowerBuilder does not support shared operations; therefore, this indicator is ignored by the code generator.TERM1="class" TERM2="procedure"TERM1="procedure" TERM2="class procedure"TERM1="$ (class procedure)"n name is the operation name.Note: The parentheses following the operation name are mandatory, even if the operation has no parameters.n parameter-list is a comma-separated list of parameters, where each parameter is specified as follows:parameter_name : data_typeThe data_type of a parameter is either a standard type or a class modeled in the CD. Specifying the data type of a parameter is similar to specifying the data type of an attribute (see REFID="19428" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types).n return_type is either a standard type or a class modeled in the CD. Specifying the return type for a function is similar to specifying the data type of an attribute (see REFID="19428" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types).n {abstract} indicates an abstract operation. PowerBuilder does not support abstract operations; therefore, this indicator is ignored by the code generator.ID="18902"ExampleThe following code excerpt shows the default translation of two operations on the customer class:FILENAME="00797.unk" ORIGFILE="pics/cust2.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"public function integer check_credit ();// Implement this function !!integer dummyreturn dummyend functionpublic subroutine print (integer copies);// Implement this function !!end subroutinePropertiesYou use properties on operations and their parameters to provide input to the code generator. The following sections describe how to edit these properties, and the effect of each property.Association accessor functionsThe PowerBuilder code generator also generates association accessor functions, as described in REFID="27062" TYPE="XREF-TEXTCOPY"Mapping Simple Associations. (You do not specify these functions as operations on the ObjectTeam class.)In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19182" TYPE="XREF-TEXTCOPY"Editing Operation Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19034" TYPE="XREF-TEXTCOPY"Editing Parameter Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22ID="19182"Editing Operation PropertiesIntroductionIn the Object Design phase, you define operation properties to specify operation access and whether the operation should be generated as an event.How to edit operation propertiesTERM1="Edit Properties (Item menu)" TERM2="for operation"TERM1=""TERM1="operation property" TERM2="editing"Σ To edit operation properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an operation name from the list in the left-hand pane of the dialog box.The operation properties appear on the right side of the dialog box.FILENAME="00798.unk" ORIGFILE="pics/operprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"4 Select the desired properties:- Use the Method Access field to specify the read/write access for the method, as described in REFID="29675" TYPE="XREF-TEXTCOPY"Specifying Method Access.- Use the Event check box to indicate that the operation should be generated as an event rather than a function.- Use the Text tab to enter comment text. This text does not appear in generated code.TERM1="comment" TERM2="for operation"TERM1=""TERM1="operation property" TERM2="for comment"TERM1=""TERM1="Visual Basic" TERM2="comment, for procedures"5 Select OK.ExampleIn the example at the beginning of this section (see REFID="18902" TYPE="XREF-TEXTCOPY"Example), the Method Access property for both operations is set to public (the default). In the following example, the Method Access property for the checkCredit operation is set to protected and the Method Access property for the print operation is set to private.FILENAME="00799.unk" ORIGFILE="pics/cust2.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"protected function integer check_credit ();// Implement this function !!integer dummyreturn dummyend functionprivate subroutine print (integer copies);// Implement this function !!end subroutineEvent exampleIn the following example, the Event check box is selected for both operations.global type customer from userobject...event type integer check_credit ()event print (integer copies)end typeevent check_credit;// Implement this event !!integer dummyreturn dummyend eventevent print;// Implement this event !!end eventID="29675"Specifying Method AccessIntroductionTERM1="attribute" TERM2="access method"TERM1="attribute property" TERM2="access method"TERM1="access property" TERM2="for attribute access method"TERM1=""TERM1="Visual Basic" TERM2="attribute access method"TERM1="attribute access method"TERM1="method" TERM2="attribute access"The values you specify in the Method Access field on the Misc tab of the Edit Properties dialog box determine wether the generated function is one of the following:n Public (default). A public function is accessible anywhere within the program.n Protected. A protected function behaves as a public function to a derived class but as a private function to the rest of the program.n Private. A private function can only be accessed by the other functions of its class.Note: If the Event check box is selected, the Method Access field is ignored.TERM1="operation property" TERM2="access"TERM1="access property" TERM2="for operation"ID="31329"VisibilityYou can display the access level of methods in your diagram by checking Options | Show Visibility in the Class Diagram Editor. Method names will then be displayed with the following leading characters indicating the method's access level:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="318p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special characterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"+COLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"#COLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"-COLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateThese special characters can also be used to set the access level of methods. Typing a minus sign (-) before a method name will set the access level of the method to Private, for example. Warning: The special characters only work if the menu entry Options | Show Visibility in the Class Diagram Editor has been checked. Otherwise, the special characters will just be regarded as part of the method name.ExamplesThe following examples show how the Method Access field affect code generation for the print method.FILENAME="00800.unk" ORIGFILE="pics/cust2.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"Public (default):public subroutine print (integer copies)Protected:protected subroutine print (integer copies)Private:private subroutine print (integer copies)ID="19034"Editing Parameter PropertiesIntroductionIn the Object Design phase, you define properties of operation parameters to specify how the parameter is passed.How to edit parameter propertiesTERM1="Edit Properties (Item menu)" TERM2="for parameter"TERM1=""TERM1="parameter property" TERM2="editing"Σ To edit parameter properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a parameter name from the list in the left-hand pane of the dialog box.The parameter properties appear on the right side of the dialog box.FILENAME="00801.unk" ORIGFILE="pics/parmprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"4 Select the desired properties: - Use the Pass By field to specify how the parameter should be passed to the function: by value (default), by reference, or as a readonly parameter.- Use the Text tab to enter a description of the parameter. This text does not appear in the generated code.5 Select OK.ExamplesThe following examples show how the Pass By field affects code generation of the print subroutine and its copies parameter.Value (default)private subroutine print (integer copies);// Implement this function !!end subroutineReferencepublic subroutine print (ref integer copies);// Implement this function !!end subroutineReadonlypublic subroutine print (readonly integer copies);// Implement this function !!end subroutineID="28744"Mapping InheritanceSingle inheritance onlyTERM1="mapping" TERM2="class inheritance"TERM1="inheritance" TERM2="class"TERM1="class" TERM2="inheritance"Both ObjectTeam and PowerBuilder provide full support for single inheritance. PowerBuilder does not support mulitple inheritance; therefore, the PowerBuilder code generator displays an error if an ObjectTeam class has more than one supertype class.Disjoint and overlapping inheritanceTERM1="disjoint inheritance"TERM1="overlapping inheritance"In ObjectTeam, you can specify either disjoint or overlapping inheritance. The PowerBuilder code generator generates the code for disjoint inheritance, regardless of which symbol you use.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DisjointCOLNAME="2" VALIGN="TOP" MOREROWS="0"OverlappingCOLNAME="1" VALIGN="TOP" MOREROWS="0"FILENAME="00802.unk" ORIGFILE="pics/hierdisj.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00803.unk" ORIGFILE="pics/hierover.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"ExampleThe following code excerpt shows how the code generated for the rectangle subclass references the shape superclass.FILENAME="00804.unk" ORIGFILE="pics/inher.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"ShapeThe following code excerpt is generated for the shape class.global type shape from nonvisualobjectend type// User defined attributesreal areapublic subroutine print ();// Implement this function !!end subroutineRectangleThe following code excerpt is generated for the rectangle class.global type rectangle from shapeend type// User defined attributesreal heightreal widthID="14358"Mapping AssociationsIntroductionAn ObjectTeam association maps to a PowerBuilder variable and a set of accessor functions that maintain the variable.RestrictionsIf the Global Type property of an ObjectTeam class is set to No, the code generator ignores the associations of the class. See REFID="39809" TYPE="XREF-TEXTCOPY"Editing Class Properties for more information about the Global Type property.The constructor event of the generated PowerBuilder object is used to initialize the association variable. To allow associations for windows, the code generator creates a constructor event for the window and uses the window's open event to trigger the window's constructor event.Supported associationsTERM1="mapping" TERM2="association"TERM1="association" TERM2="mapping of"ObjectTeam and the PowerBuilder code generator support the following:n Binary association (associations between two classes)n Qualified associations (associations that include a qualifier)n Link attributes (attributes used to define an association)n Association as class (class used to define an association)TERM1="n-ary association"TERM1="association" TERM2="n-ary"N-ary associationsN-ary associations are ignored by the PowerBuilder code generator. Code is generated for the classes involved, but no code is generated for the n-ary association.OptionalityIf a class has a mandatory association, the constructor for the class should ensure that it is related to an instance of the associated class. PowerBuilder's constructors do not support parameters; therefore, in the current release of the PowerBuilder generator, the generated class constructor does not initialize mandatory associations.AggregationsTERM1="aggregation"The PowerBuilder code generator translates aggregations like associations, unless the aggregrations are being used to model object containment. See Chapter 4, Modeling the Visual Interface, for more information about using aggregations to model container objects.Ordered associationsThe {ordered} indicator on an association is ignored by the PowerBuilder code generator. In lists of associations generated by the PowerBuilder code generator, new elements are always added to the front of the list.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27062" TYPE="XREF-TEXTCOPY"Mapping Simple Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'28COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11388" TYPE="XREF-TEXTCOPY"Mapping Associations With Multiplicity of Many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'32COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36884" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'35COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20798" TYPE="XREF-TEXTCOPY"Mapping Link Attributes and Classes as Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16465" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'43ID="27062"Mapping Simple AssociationsIntroductionThis section describes how the PowerBuilder code generator implements the following simple associations between the customer class and the book class.Unidirectional associationFILENAME="00805.unk" ORIGFILE="pics/asscuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"Bidirectional associationFILENAME="00806.unk" ORIGFILE="pics/asscbi.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"Unidirectional and bidirectionalTERM1="association" TERM2="unidirectional"TERM1="unidirectional association"TERM1="association" TERM2="bidirectional"TERM1="bidirectional association"TERM1="one-to-one association"TERM1="association" TERM2="one-to-one"The direction of an association is defined by the role names on the association. A role name at the far end of the association indicates an association from the class at the near end to the class at the far end.If an association has a role name at only one end, it is a unidirectional association (implemented in one direction). If an association has role names at both ends, it is a bidirectional association (implemented in both directions).Mapping a unidirectional associationTERM1="Visual Basic" TERM2="association attribute"TERM1="Visual Basic" TERM2="association attribute access method"The PowerBuilder code generator implements a unidirectional association by adding an association attribute and a set of association accessor methods to the code generated for the class at the near end of the association. This allows the class at the near of the association (customer) to access the class at the far end (book); the class at the far end of the association cannot access the class at the near end.Mapping a bidirectional associationThe PowerBuilder code generator implements a bidirectional association by adding an association attribute and a set of association accessor methods to the code generated for both classes. This allows each class to access the other. To ensure integrity of a bidirectional association, the update method for a bidirectional association always maintains the association in both directions.Association attributesTERM1="association attribute"TERM1="attribute" TERM2="association attribute"TERM1="association attribute access method"TERM1="method" TERM2="association attribute access"The ObjectTeam documentation and generated PowerBuilder code use the term association attributes to refer to data attributes generated to support ObjectTeam associations (as opposed to data attributes generated from ObjectTeam attributes). In PowerBuilder, an association attribute is simply another data attribute.Association accessor methodsThe association accessor methods use the association attributes to implement and maintain the associations between the classes. By default, the code generator creates public methods that read and update the association (association attributes). However, you can use the Association Access property of the association to change this default behavior, as described in REFID="16465" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Associations.Example of a unidirectional associationFollowing is an excerpt from the code generated for the customer class in the unidirectional association. Because this is a unidirectional association, the book class does not contain any code related to the association.Notice the following:n The association attribute, customer.possession, defines the association between the customer and the book. The constructor initializes the association attribute.n The remove, set, and get functions manage the association:- The removePossession function can be used to remove the association name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the customer no longer owns the book.- The setPossession function can be used to add the association name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the customer purchases the book.- The getPossession function can be used to retrieve the association name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' which book (if any) the customer owns.// Association attributesprivate book possessionpublic subroutine removePossession ();// Association accessor methodsetNull(possession)end subroutinepublic subroutine setPossession (book newPossession);// Association accessor methodpossession = newPossessionend subroutinepublic function book getPossession ();// Association accessor methodreturn possessionend functionevent constructor;setNull(possession)// Start user code section// End user code sectionend eventevent destructor;// Start user code section// End user code sectionend eventExample of a bidirectional associationFollowing is an excerpt from the code generated for the customer class in the bidirectional association. Because this is a bidirectional association, the book class would contain similar code.Notice that the remove, set and get functions maintain the association in both directions:n As in the previous example, the functions update the association attribute customer.possession to reflect the association between the customer and the book.n Because this is a bidirectional association, the functions also update the association attribute possession.owner (book.owner) to reflect the association between the book and the customer.// Association attributespublic book possessionpublic subroutine removePossession ();// Association accessor methodif not isNull(possession) then setNull(possession.owner)end ifsetNull(possession)end subroutinepublic subroutine setPossession (book newPossession);// Association accessor methodif not isNull(possession) then setNull(possession.owner)end ifif not isNull(newPossession) then customer nullRef setNull(nullRef) newPossession.setOwner(nullRef) newPossession.owner = thisend ifpossession = newPossessionend subroutinepublic function book getPossession ();// Association accessor methodreturn possessionend functionevent constructor;setNull(possession)// Start user code section// End user code sectionend eventevent destructor;// Start user code section// End user code sectionend eventID="11388"Mapping Associations With Multiplicity of ManyIntroductionREFID="27062" TYPE="XREF-TEXTCOPY"Mapping Simple Associations shows the code generated for associations with a multiplicity of one. This section shows the code generated for associations with a multiplicity of many.PrerequisiteThis section assumes that you are familiar with the information in the previous section, REFID="27062" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.Multiplicity of manyIn the following example, each customer can have zero or more books:FILENAME="00807.unk" ORIGFILE="pics/asscmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"classset classFor an association with multiplicity of many, the type of the association attribute is classset. The classset class, which is supplied with the PowerBuilder code generator, includes special methods for handling sets of associations. The association accessor methods use these special methods to get, add, and remove associations.Note: ObjectTeam copies the classset class to your user environment when you configure your Implementation environment, as described in REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your PowerBuilder Environment.Generated codeFollowing is an excerpt from the code generated for the customer class shown above. Notice thatn The add function adds an association to the set of associations. (The add function is similar to the set function that is generated for an association with multiplicity of one.)n The remove function removes an association from the set.n The get function retrieves the set of associations.// Association attributesprivate classset possessionSetpublic subroutine addPossession (book newPossession);// Association accessor methodif isNull(newPossession) then returnend ifpossessionSet.add(newPossession)end subroutinepublic subroutine removePossession (book oldPossession);// Association accessor methodif isNull(oldPossession) then returnend ifpossessionSet.remove(oldPossession)end subroutinepublic function classset getPossessionSet ();// Association accessor methodreturn possessionSetend functionevent constructor;possessionSet = create classset// Start user code section// End user code sectionend eventevent destructor;// Start user code section// End user code sectiondestroy(possessionSet)end eventMany, numerically specifiedIn the following example, each customer can have at most 10 books. The PowerBuilder code generator ignores the numeric specifier. The code generated for this association is the same as that shown above.FILENAME="00808.unk" ORIGFILE="pics/asscnum.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"Association propertiesYou can, of course, effect the code generated for any of these association by editing the association properties, as described in REFID="16465" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Associations.ID="36884"Mapping Qualified AssociationsIntroductionTERM1="association" TERM2="qualified"TERM1="qualified association"TERM1="mapping" TERM2="qualified association"The mapping of a qualified association, is similar to that of an association with multiplicity of many. For a qualified association, however, the qualifier (bookid, in the following example) is used to identify each association in the set of associations.PrerequisiteThis section assumes that you are familiar with the information in the previous section, REFID="27062" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.Qualified associationThis section describes how the PowerBuilder code generator implements the following associations between the customer class and the book class. FILENAME="00809.unk" ORIGFILE="pics/asscqual.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"How to edit qualifier propertiesTERM1="Edit Properties (Item menu)" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="editing properties"You must specify the data type of the qualifier by editing the association properties.Σ To edit qualifier properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a qualifier from the list in the left-hand pane of the dialog box.The qualifier properties appear on the right side of the dialog box.4 Select the desired properties:- Use the Misc tab to specify a data type for the qualifier.- TERM1="comment" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="comment for"TERM1="Visual Basic" TERM2="comment, for qualifier"Use the Text tab to describe the qualifier. This text does not appear in the generated code.5 Select OK.classdict classFor a qualified association, the type of the association attribute is classdict. The classdict class, which is supplied with the PowerBuilder code generator, includes special methods for handling qualifiers. The association accessor methods use these special methods to access the qualifier.Note: ObjectTeam copies the classdict class to your user environment when you configure your Implementation environment, as described in REFID="40480" TYPE="XREF-TEXTCOPY"Configuring Your PowerBuilder Environment.ExampleFollowing are excerpts from the code generated for the customer and book classes shown above. Notice thatn The association customer.possession is managed using an association attribute with type classdict class, and the bookid index.n The association book.owner is managed using an association attribute with type customer class.Example code for the customer class// Association attributespublic classdict possessionDictpublic function classset getPossessionDict (integer bookid);// Association accessor methodreturn possessionDict.get(bookid)end functionpublic subroutine addPossession (integer bookid, book newPossession);// Association accessor methodif isNull(newPossession) then returnend ifnewPossession.owner = thisclassset theSettheSet = possessionDict.get(bookid)if isNull(theSet) then theSet = create classset possessionDict.set(bookid, theSet)end iftheSet.add(newPossession)end subroutinepublic subroutine removePossession (integer bookid, book oldPossession);// Association accessor methodif isNull(oldPossession) then returnend ifclassset theSettheSet = possessionDict.get(bookid)if not isNull(theSet) then theSet.remove(oldPossession)end ifsetNull(oldPossession.owner)end subroutineevent constructor;possessionDict = create classdict// Start user code section// End user code sectionend eventevent destructor;// Start user code section// End user code sectiondestroy(possessionDict)end eventExample code for the book class// Association attributespublic customer ownerpublic subroutine removeOwner (integer bookid);// Association accessor methodif not isNull(owner) then owner.removePossession(bookid, this)end ifsetNull(owner)end subroutinepublic subroutine setOwner (integer bookid, customer newOwner);// Association accessor methodif not isNull(newOwner) then newOwner.addPossession(bookid, this)end ifowner = newOwnerend subroutinepublic function customer getOwner ();// Association accessor methodreturn ownerend functionevent constructor;setNull(owner)// Start user code section// End user code sectionend eventevent destructor;// Start user code section// End user code sectionend eventAssociation propertiesYou can effect the code generated for any association by editing the association properties, as described in REFID="16465" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Associations.ID="20798"Mapping Link Attributes and Classes as AssociationsPrerequisiteThis section assumes that you are familiar with the mapping of various types of associations, as described in the previous sections.ID="35128"Attributes and classes on associationsObjectTeam allows you to specify information about an association by linking attributes, or a class, to the association. The following diagram shows a link attribute symbol; a class symbol could be used in the same location.FILENAME="00810.unk" ORIGFILE="pics/assclnk.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"ID="30454"Association mapped as two associationsAn association that includes a link attribute or a class is transformed before code generation. The link attribute or class becomes a separate class, with appropriate associations to the original classes. The generated code is then based on the transformed association.ExampleThe code generated for the CD shown above is actually based on the following CD:FILENAME="00811.unk" ORIGFILE="pics/assccnv.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"Name used for the third classLink attributeTERM1="association" TERM2="and link attribute"TERM1=""TERM1="link attribute"TERM1="mapping" TERM2="link attribute"If an attribute is linked to the association, the new class is assigned the name of the association. Therefore, an association that has a link attribute must have an association name.Note: The class created for the link attribute does not have a supertype class. As for any class that does not have a supertype class, the code generator uses nonvisualobject as the supertype class, which creates a custom class user object.Link classTERM1="association" TERM2="and class"TERM1=""TERM1="class" TERM2="as association"TERM1=""TERM1="mapping" TERM2="class, as association"If a class is linked to the association, that class is used as the third class. Therefore, an association that is described by a class does not need an association name.Role names are requiredAs with all associations, role names are required. If a role name is omitted, the association attributes and methods that would map to that role name are not generated.ExampleFollowing is the code generated for the link attribute shown above (REFID="35128" TYPE="XREF-TEXTCOPY"Attributes and classes on associations). The code reflects the transformed CD (REFID="30454" TYPE="XREF-TEXTCOPY"Association mapped as two associations).Note: Only the get functions are generated for associations that include link attributes or classes. The remove and add functions are not generated.Generated code for the purchase class// Association attributespublic customer ownerpublic book possessionpublic function customer getOwner ();// Association accessor methodreturn ownerend functionpublic function book getPossession ();// Association accessor methodreturn possessionend functionevent constructor;setNull(owner)setNull(possession)// Start user code section// End user code sectionend eventevent destructor;// Start user code section// End user code sectionend eventGenerated code for the customer class// Association attributespublic classset purchaseOfPossessionSetpublic function classset getPurchaseOfPossessionSet ();// Association accessor methodreturn purchaseOfPossessionSetend functionevent constructor;purchaseOfPossessionSet = create classset// Start user code section// End user code sectionend eventevent destructor;// Start user code section// End user code sectiondestroy(purchaseOfPossessionSet)end eventGenerated code for the book class// Association attributespublic purchase purchaseOfOwnerpublic function purchase getPurchaseOfOwner ();// Association accessor methodreturn purchaseOfOwnerend functionevent constructor;setNull(purchaseOfOwner)// Start user code section// End user code sectionend eventevent destructor;// Start user code section// End user code sectionend eventAssociation propertiesYou can effect the code generated for any association by editing the association properties, as described in REFID="16465" TYPE="XREF-TEXTCOPY"Specifying Access Methods for Associations.ID="16465"Specifying Access Methods for AssociationsIntroductionThe values you specify in the Association Access group box on the Edit Properties dialog box for an association determines what association accessor methods are generated for the association.Note: The association accessor methods for bidirectional associations are always public. Therefore, for bidirectional associations, the Association Access group box on the Edit Properties dialog box is ignored.Read-write accessThe Association Access group box contains a Read field and a Write field. For each field, you can specify one of the following values:n Public (default). Generates public access methods.n Private. Generates private access methods.n Protected. Generates protected access methods.n None. Prevents generation of the access methods.The Read field controls generation of the get function; the Write field controls generation of the add (or set) and remove functions.How to edit association propertiesTERM1="Edit Properties (Item menu)" TERM2="for association"TERM1=""TERM1="association attribute property" TERM2="editing"Σ To edit association properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a role name from the list in the left-hand pane of the dialog box.The association properties appear on the right side of the dialog box.FILENAME="00812.unk" ORIGFILE="pics/asscprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgen.fm5.mif"4 Select the desired properties:- TERM1="association attribute property" TERM2="access"TERM1="access property" TERM2="for association attribute"Use the Association Access field to specify which association methods are generated for the association attribute. See the examples below.- TERM1="comment" TERM2="for association"TERM1=""TERM1="association attribute property" TERM2="for comment"TERM1=""TERM1="Visual Basic" TERM2="comment, for association"Use the Text tab to describe the association. This text does not appear in the generated code.5 Select OK.ExampleREFID="27062" TYPE="XREF-TEXTCOPY"Mapping Simple Associations shows an example of a unidirectional association and the code generated for the association. If you modify the Association Access field for the possession role, specifying the Read field as Protected and the Write field as Private, the following code would be generated:private subroutine removePossession ();// Association accessor methodsetNull(possession)end subroutineprivate subroutine setPossession (book newPossession);// Association accessor methodpossession = newPossessionend subroutineprotected function book getPossession ();// Association accessor methodreturn possessionend functionChapter 4 Modeling ID="41939"the Visual InterfaceTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for PowerBuilderIntroductionThis chapter describes how to model the visual interface of an application. This includes modeling windows, menus, visual custom user objects, and visual standard objects.REFID="16205" TYPE="XREF-TEXTCOPY"Chapter 3, Modeling Nonvisual Elements, describes how to model the nonvisual aspects of an application. This includes:n Nonvisual aspects of visual objects (for example, variables and functions in a window).n Nonvisual objects: custom class objects, class standard objects, and structures.Upper- and lower-case charactersObjectTeam is case-sensitive, but in many cases PowerBuilder allows only lower-case characters. To prevent potential problems, Cayenne strongly recommends that you use only lower-case characters when naming items in ObjectTeam systems used with the PowerBuilder code generator.PrerequisitesThis chapter assumes that you are familiar with the following:n Valid supertype classes and the Global Type class property, as described in REFID="15448" TYPE="XREF-TEXTCOPY"Mapping Classes on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3.n Generating and editing PowerBuilder source files, as described in REFID="40013" TYPE="XREF-TEXTCOPY"Chapter 2, Generating Code.ExamplesFor simplicity, in the examples in this chapter, classes do not have attributes, operations, or associations (except those that are used to model the user interface). Global classes can have attributes, operations, and/or associations. If included, these features are mapped to PowerBuilder variables and functions, as described in REFID="16205" TYPE="XREF-TEXTCOPY"Chapter 3, Modeling Nonvisual Elements.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11320" TYPE="XREF-TEXTCOPY"Basic Modeling Technique 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20826" TYPE="XREF-TEXTCOPY"Modeling Menus 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11993" TYPE="XREF-TEXTCOPY"Modeling Windows 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40978" TYPE="XREF-TEXTCOPY"Modeling Standard Visual User Objects 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16125" TYPE="XREF-TEXTCOPY"Modeling Custom Visual User Objects 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28166" TYPE="XREF-TEXTCOPY"Modeling Data Windows 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="11320"Basic Modeling TechniqueIntroductionThis section describes the basic technique for modeling PowerBuilder windows in ObjectTeam.Sample windowThe w_welcome window from the PowerBuilder tutorial is modeled as an example:FILENAME="00813.unk" ORIGFILE="pics/weldone.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Sample CDThe following CD models the w_welcome window:FILENAME="00814.unk" ORIGFILE="pics/welcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39166" TYPE="XREF-TEXTCOPY"Modeling the Window 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19610" TYPE="XREF-TEXTCOPY"Completing the Window 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23395" TYPE="XREF-TEXTCOPY"Alternative Technique 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9ID="39166"Modeling the WindowPBBuiltin classesTERM1="vb_gui_lib system"The folded classes in the CD (picture, window, singlelineedit, commandbutton, and statictext) are defined in the PBBuiltins system. The unfolded classes represent the window elements that you are modeling. As described in REFID="15448" TYPE="XREF-TEXTCOPY"Mapping Classes on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3, each ObjectTeam class must have a valid supertype class. The supertype class indicates the type of PowerBuilder object that you want to generate.AggregationsIn PowerBuilder, certain objects can contain other objects. For example, the w_welcome window contains a picture, 3 static text fields, 2 singleline edit fields, and 2 command buttons. The w_welcome window is an aggregation of these controls; therefore, in the CD, aggregations are used to show containment. The role name of the aggregation becomes the name of the control in PowerBuilder.Steps for modeling the windowTERM1="window" TERM2="representing in ObjectTeam"TERM1="Visual Basic" TERM2="forms, modeling"TERM1="form" TERM2="basic modeling"The following table summarizes the steps used to create the CD:COLS="2"COLNAME="1" COLWIDTH="36p"COLNAME="2" COLWIDTH="414p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the w_welcome class to represent the window. Also, add the window class and make w_welcome a subclass of window.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Add attributes and operations to the w_welcome class. For simplicity, in this example, only the wf_connect operation is added.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the p_sports class to represent the picture control. Also, add the picture class and make p_sports a subclass of picture.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the sle_userid and sle_password classes to represent the single line edit controls. Add the singlelineedit class and make sle_userid and sle_password subclasses of singlelineedit.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the cb_ok and cb_cancel classes to represent the command button controls. Add the commandbutton class and make cb_ok and cb_cancel subclasses of commandbutton.COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the st_welcome, st_userid, and st_password classes to represent the static text controls. Add the statictext class and make st_welcome, st_userid, and st_password subclasses of statictext.COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"The w_welcome window contains all eight controls. It is an aggregation of these controls. Create the eight relationships that define the aggregation. Each relationship must have a role name. COLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"Add a clicked event to the cb_ok class and cb_cancel class. To do so: add a clicked() operation; select Item | Edit Properties; select the clicked operation; and select the Event check box on the Misc tab of the Edit Properties dialog.COLNAME="1" VALIGN="TOP" MOREROWS="0"9COLNAME="2" VALIGN="TOP" MOREROWS="0"The w_welcome window is a global object. The controls on the w_welcome window are local objects.The Global Type property of an ObjectTeam class indicates whether the generated PowerBuilder object is global (default) or local. For each of the 8 control classes, change the value of the Global Type property from Yes to No.COLNAME="1" VALIGN="TOP" MOREROWS="0"10COLNAME="2" VALIGN="TOP" MOREROWS="0"The w_welcome window is a Response window. Set the Window Type property of the w_welcome class to Response.COLNAME="1" VALIGN="TOP" MOREROWS="0"11COLNAME="2" VALIGN="TOP" MOREROWS="0"For each class that is not defined in the system, select Item | Edit properties. If the Define item button is available, select it to define the class item. See REFID="39577" TYPE="XREF-TEXTCOPY"All classes must be defined items for more information.ID="39577"All classes must be defined itemsObjectTeam generates code for class items. It does not generate code for graphical elements that do not have associated class items.When you create a class, ObjectTeam creates a graphical element. When you perform one of the following actions, ObjectTeam creates a class item:n Add an attribute, operation, or association to the classn Set a property on the classn Open the Edit Properties dialog box for the class and select the Define item button.ID="19610"Completing the WindowGenerated windowIn ObjectTeam, you model the content of the window, not its layout. Therefore, the generated PowerBuilder file defines the window and its controls, but it does not define the properties of the window or its controls. TERM1="form" TERM2="layout information"When you open the generated window in PowerBuilder, it appears as shown below (the controls are stacked in the upper left corner):FILENAME="00815.unk" ORIGFILE="pics/welstart.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Completing the windowIn PowerBuilder, complete the window as follows:n Arrange the controls.n Specify the appropriate text for each static text and command button control by editing the control's properties.n Specify the bitmap for the picture control by editing the control's properties.n Adjust the size of the window.When you are done, the window looks like the one shown at the beginning of this section (see REFID="11320" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3).Regenerating the windowTERM1="form" TERM2="regenerating"When you export the window from the PowerBuilder (.pbl) library, the exported source file reflects the changes that you made in PowerBuilder. ObjectTeam preserves the changes when you regenerate the file. What you can change in PowerBuilderREFID="38296" TYPE="XREF-TEXTCOPY"Editing Generated Source Files on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13 provides guidelines for editing generated PowerBuilder files. When editing visual objects in PowerBuilder, adhere to those general guidelines and to the following guidelines for visual objects:n You can change the position and size of a window or control.n You can change the properties of a window or control.Note: The name of window or control is also stored in ObjectTeam; therefore:- If you change the name of a window, you must also change the class name of the window in the ObjectTeam. - If you change the name of a control, you must also change the role name in ObjectTeam.n You can add code to a generated event. The body of each generated event contains the following comment. Add your code below the comment.// Implement this event!n You can add new control events; however, you must then add those events to the appropriate control class in ObjectTeam before regenerating the PowerBuilder files. Round-trip engineering can do this for you, as described in REFID="22218" TYPE="XREF-TEXTCOPY"Round-Trip Engineering on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11.n You can add controls to a window; however, you must then define the same controls in ObjectTeam by adding the appropriate classes to the ObjectTeam model before regenerating the PowerBuilder files. Round-trip engineering can do this for you, as described in REFID="22218" TYPE="XREF-TEXTCOPY"Round-Trip Engineering on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11.ID="23395"Alternative TechniqueTwo ways to model windowsObjectTeam provides two ways to model windows:n Model the window and controlsn Model the window onlyModel the window and controlsAs described in the previous sections, you can use ObjectTeam to model windows and controls, then use PowerBuilder to complete the generated window. The benefit of this approach is that, while modeling the application, you remain focused on the functions of the application rather than becoming distracted by the details of the GUI.Model the window onlyAlternatively, you can use the following approach:1 In ObjectTeam, model only the window.2 Generate the window.3 In PowerBuilder, add the controls and events.4 In ObjectTeam, use round-trip engineering to add the controls and events to the ObjectTeam model.ID="20826"Modeling MenusMenu classTERM1="Menu class"To model menus in ObjectTeam, create a class for each menu item. The supertype class of a menu item is the menu class, which is defined in the PBBuiltins system.Menus can contain other objectsIn PowerBuilder, a menu is a container object. A menu object can contain menus and menu cascades. A menu cascade can contain menus.Sample menuFollowing is a menu similar to one used in the PowerBuilder tutorial:FILENAME="00816.unk" ORIGFILE="pics/menu.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Sample CDThe following CD models the File pull-down menu shown above:FILENAME="00817.unk" ORIGFILE="pics/menucad.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"About the CDSupertype classAll classes are subtypes of the menu class; for simplicity, the subtype-supertype relationships are not shown.Global Type propertyIn PowerBuilder, a menu must be a global object; therefore, the Global Type property of the m_frame class must be set to Yes. Typically, the menu items are local objects; therefore, the Global Type property is set to No for all other classes in the CD.AggregationsThe aggregations define the menu structure: n The menu object contains the tool bar itemsn Each tool bar item contains the menu items on its pull-down menun Each menu item contains its cascading menu items (if any)Note: The role names become the PowerBuilder control names.OperationsEach menu item has a clicked event. Therefore, each class that represents a menu item, has a clicked() operation with the Event property of the operation selected.Completing the menuThe generated PowerBuilder file contains the menu declarations, but no menu properties. The name of each menu item defaults to its control name. In PowerBuilder, open and edit the menu as follows:n Edit the name of each menu item.n Optionally, edit other menu item properties.n For each menu item, add the script for the clicked() event.ToolbarsYou do not model toolbars in ObjectTeam. To place a menu item in a toolbar, specify the appropriate menu properties in PowerBuilder. Only MDI applications can have toolbars.Menu cascadesA menu cascade in PowerBuilder is a toolbar icon that has a drop-down list of other toolbar icons. Only MDI applications can have menu cascades.Σ To model a menu cascade in ObjectTeam:1 Model a menu, as shown above.2 Change the supertype of the parent menu item from menu to menucascade. (For example, change the supertype of m_open from menu to menucascade.)3 Generate the menu.4 In PowerBuilder, make sure that the child menu items have toolbar icons.When you run the MDI application, the toolbar contains a menu cascade that contains the icons for the child menu items.ID="11993"Modeling WindowsWindow classTo model a PowerBuilder window in ObjectTeam, create a class that represents the window and make it a subclass of the window class, which is defined in the PBBuiltins system.Windows can contain other objectsIn PowerBuilder, a window is a container object. It can contain menus, structures, standard visual user objects, and custom visual user objects.Class propertiesGlobal TypeObjectTeam does not generate code for the window unless it is a global object; therefore, set the Global Type property of the class that represents the window to Yes.Window TypeThe Window Type property of the class that represents the window determines the type of window that is generated: Child, Main (default), MDI, MDIHelp, Popup, or Response.AggregationsA window can contain other objects. As described in REFID="11320" TYPE="XREF-TEXTCOPY"Basic Modeling Technique, you use aggregations to indicate which objects are contained in a window.Sample windowFollowing is the main window of the MDI application built in the PowerBuilder tutorial:FILENAME="00818.unk" ORIGFILE="pics/wframe.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Sample CDThe following CD models the window:FILENAME="00819.unk" ORIGFILE="pics/wfrmcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"About the CDThe w_frame window is a global PowerBuilder window of type MDI Frame With Microhelp. Therefore, in the w_frame class, the Global Type property is set to Yes and the Window Type property is set to MDIHelp. Completing the windowTo complete the window in PowerBuilder, specify the title of the window by editing the window's properties.InheritancePowerBuilder and ObjectTeam both support inheritance of windows. For an example of how to model inheritance of windows, see REFID="28166" TYPE="XREF-TEXTCOPY"Modeling Data Windows.ID="40978"Modeling Standard Visual User ObjectsStandard visual user objectsA standard visual user object is a global object that is predefined in PowerBuilder. In ObjectTeam, each stardard visual user object is represented as a class in the PBBuiltins system.Events on standard visual user objectsEach standard visual user object contains a set of predefined events.n If you need only these predefined events, you can simply use the standard visual user object provided by PowerBuilder.n If you want to redefine a predefined event or add new events, you create a new object based on the standard visual user object.Modeling standard visual user objectTERM1="standard visual user object"TERM1="modeling" TERM2="standard visual user object"To model a standard visual user object, add the appropriate PBBuiltins class to your CD and use an aggregation to indicate that the window contains the standard visual user object.Modeling new object based on standard visual user objectTERM1="standard visual user object"TERM1="modeling" TERM2="standard visual user object"To model a new object based on a standard visual user object, create a class that represents the user object and make it a subclass of the appropriate PBBuiltins class. Use an aggregation to indicate that the window contains the new object.ExampleThe following CD models a window with three controls: a picture control and two command buttons. For the picture control, the predefined events are sufficient so you can use the standard visual user object picture. For the command buttons, the clicked event must be redefined so you must create new objects: cb_ok and cb_cancel.FILENAME="00820.unk" ORIGFILE="pics/suserobj.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Class propertiesTypically, if you define a new object based on a standard visual user object, the new object is used only within a single window. In this case, the window is a global object and the new object is a local object; therefore, in the class that represents the new object, you generally set the Global Type property to No. In the previous CD, for example, the Global Type property is set to No for both the cb_ok and cb_cancel classes.PBBuiltins classesFollowing are the valid supertype classes for standard visual user objects:COLS="3"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="162p"COLNAME="3" COLWIDTH="144p"COLNAME="1" VALIGN="TOP" MOREROWS="0"checkboxCOLNAME="2" VALIGN="TOP" MOREROWS="0"commandbuttonCOLNAME="3" VALIGN="TOP" MOREROWS="0"datawindowCOLNAME="1" VALIGN="TOP" MOREROWS="0"dropdownlistboxCOLNAME="2" VALIGN="TOP" MOREROWS="0"dropdownpicturelistboxCOLNAME="3" VALIGN="TOP" MOREROWS="0"editmaskCOLNAME="1" VALIGN="TOP" MOREROWS="0"graphCOLNAME="2" VALIGN="TOP" MOREROWS="0"groupboxCOLNAME="3" VALIGN="TOP" MOREROWS="0"hscrollbarCOLNAME="1" VALIGN="TOP" MOREROWS="0"lineCOLNAME="2" VALIGN="TOP" MOREROWS="0"listboxCOLNAME="3" VALIGN="TOP" MOREROWS="0"listviewCOLNAME="1" VALIGN="TOP" MOREROWS="0"multilineeditCOLNAME="2" VALIGN="TOP" MOREROWS="0"olecontrolCOLNAME="3" VALIGN="TOP" MOREROWS="0"ovalCOLNAME="1" VALIGN="TOP" MOREROWS="0"pictureCOLNAME="2" VALIGN="TOP" MOREROWS="0"picturebuttonCOLNAME="3" VALIGN="TOP" MOREROWS="0"picturelistboxCOLNAME="1" VALIGN="TOP" MOREROWS="0"radiobuttonCOLNAME="2" VALIGN="TOP" MOREROWS="0"rectangleCOLNAME="3" VALIGN="TOP" MOREROWS="0"richtexteditCOLNAME="1" VALIGN="TOP" MOREROWS="0"roundrectangleCOLNAME="2" VALIGN="TOP" MOREROWS="0"singlelineeditCOLNAME="3" VALIGN="TOP" MOREROWS="0"statictextCOLNAME="1" VALIGN="TOP" MOREROWS="0"tabCOLNAME="2" VALIGN="TOP" MOREROWS="0"treeviewCOLNAME="3" VALIGN="TOP" MOREROWS="0"vscrollbarData windowsThe datawindow class represents a data window control. ObjectTeam does not generate data window objects. Use PowerBuilder to create the data window object and to associate the data window object with the generated data window control. See REFID="28166" TYPE="XREF-TEXTCOPY"Modeling Data Windows for more information.ID="16125"Modeling Custom Visual User ObjectsIntroductionsCustom visual user objects allow you to group visual user objects. By placing a custom visual user object in a window, you place the entire group of visual user objects in the window.Userobject classTo model a custom visual user object in ObjectTeam, create a class that represents the user object and make it a subclass of the userobject class, which is defined in the PBBuiltins system.Userobjects can contain other objectsIn PowerBuilder, a custom visual user object is a container object. It can contain structures, standard visual user objects, and other custom visual user objects.Class propertiesA custom visual user object is generally a global object, which allows it to be used on more than one window. Therefore, for a class that represents a custom visual user object, you generally set the Global Type property to Yes.AggregationsA custom visual user object, like a window, can contain other objects. As described in REFID="11320" TYPE="XREF-TEXTCOPY"Basic Modeling Technique, you use aggregations to indicate containment.Sample windowREFID="11320" TYPE="XREF-TEXTCOPY"Basic Modeling Technique shows the w_welcome window that is built in the PowerBuilder tutorial. The user name and password fields that appear in that window might be useful in a number of different windows.The following CDs show how you might model those fields as a custom visual user object and how you would then include that custom visual user object on the w_welcome window.Sample CD: define the userobjectThe following CD models a custom visual user object that contains the user name and password fields:FILENAME="00821.unk" ORIGFILE="pics/userodef.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Sample CD: use the userobjectThe following CD models the w_welcome window using the custom visual user object defined above:FILENAME="00822.unk" ORIGFILE="pics/userouse.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Control names for global objectsIn PowerBuilder, a control cannot have the same name as a global object. In the CD shown above, for example, if you used a role name of u_loginfields instead of u_login, the PowerBuilder code generator would display the following error:Name of aggregation "u_loginfields" from class "w_welcome" to class "u_loginfields" results in invalid type name in global class "w_welcome".ID="28166"Modeling Data WindowsIntroductionThis section uses an example from the PowerBuilder tutorial to show the use of inheritance, data windows, and external objects.Sample windowIn the PowerBuilder tutorial, you create two windows, w_customers and w_products, that provide access to the Customer and Product tables in the Powersoft Demo Database. Following is the w_customers window; the w_products window is similar.FILENAME="00823.unk" ORIGFILE="pics/wcust.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Implementation detailsTo implement the w_customers and w_products window, you use inheritance and external objects:n Inheritance. The w_customers and w_products windows are both based on the ancestor window, w_master_detail. The ancestor window defines the data window controls, dw_master and dw_details, that appear in the descendant windows.n External objects. The data window controls, dw_master and dw_detail, are both based on the data window control u_dwstandard. You do not create u_dwstandard; it is an external object defined in the PowerBuilder library pbtutor.pbl.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17760" TYPE="XREF-TEXTCOPY"Using Inheritance 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37141" TYPE="XREF-TEXTCOPY"Using External Objects 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19080" TYPE="XREF-TEXTCOPY"Completing the Generated Windows 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27ID="17760"Using InheritanceSample CDThe following CD models the w_customers and w_products windows:FILENAME="00824.unk" ORIGFILE="pics/wcustcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"WindowsThe w_customers and w_products windows are both based on the w_master_details window. All three windows are global objects; therefore, the Global Type property is set to Yes for all three classes.EventsThe operations specified in the w_master_details class are events; therefore, the Event property is specified for each operation. The events are generated in the source file for the w_master_detail window; they are then available to the descendant windows.MenuThe menu is a global object; therefore, its Global Type property is set to Yes. It is associated with the w_master_detail window, so it is also available to the descendant windows.Note: This example assumes that the m_fileopen class is further defined by another CD in the current system. See REFID="20826" TYPE="XREF-TEXTCOPY"Modeling Menus for more information about menus.Data window controlsThe data window controls, dw_master and dw_detail, are both local objects; therefore, their Global Type properties are set to No. They are defined in the source file generated for the w_master_detail window; therefore, they also appear in the descendant windows.The dw_master and dw_detail data window controls are both based on the u_dwstandard data window control, which is defined in another PowerBuilder library (another ObjectTeam system). See REFID="37141" TYPE="XREF-TEXTCOPY"Using External Objects for more information.Data window objectsIn PowerBuilder, a data window control contains a data window object. ObjectTeam does not generate data window objects, therefore, they are not included in the CD.After generating the PowerBuilder source files, in PowerBuilder, you create the data window objects and add them to generated data window controls. See REFID="19080" TYPE="XREF-TEXTCOPY"Completing the Generated Windows for more information.ID="37141"Using External ObjectsIntroductionThis section describes how to use external objects name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' objects that are defined in a PowerBuilder library other than the current PowerBuilder library.Note: The term external objects used in this section does not refer to PowerBuilder's external visual user objects. ObjectTeam does not generate external visual user objects.External objects in PowerBuilderA PowerBuilder library defines a set of objects. An object defined in one PowerBuilder library can reference the objects defined in another PowerBuilder library. For example, the dw_master and dw_detail data window controls are defined in the current PowerBuilder library, but they are based on the u_dwstandard data window control defined in the pbtutor.pbl PowerBuilder library.External classes in ObjectTeamIn ObjectTeam, each system defines a PowerBuilder library. A class defined in the current system represents an object that is defined in the PowerBuilder library. An external class name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' one that appears in the current system, but is defined another system name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' represents an object that is defined in another PowerBuilder library.For example, the dw_master and dw_detail classes shown in the CD at the beginning of this section (REFID="28166" TYPE="XREF-TEXTCOPY"Modeling Data Windows) are defined in the current system. The u_dwstandard class is defined in another system.Generated code references external objectsObjectTeam does not generate code for external classes. However, the code it generates for the classes defined in the current system can reference external classes. To generate the appropriate references to the external classes, ObjectTeam must know the supertype of the external class; that is, it must know the type of the referenced object.External classes must be definedEvery external class used in a system, must be defined in another system that is in the same phase as the current system. For PowerBuilder code generation, the only information required for the external class is its supertype. ExampleThe following CD defines the external class u_dwstandard.Tip: You can create this CD by reverse engineering the PowerBuilder library pbtutor.pbl. REFID="32714" TYPE="XREF-TEXTCOPY"Chapter 5, Reverse and Round-Trip Engineering, describes how you can use reverse engineering to build systems that define external classes.FILENAME="00825.unk" ORIGFILE="pics/udwcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbgui.fm5.mif"Library search pathWhen you import a source file into a PowerBuilder library, PowerBuilder must be able to resolve all references to external objects. The library search path defines the list of libraries that PowerBuilder uses to resolve external objects.n In PowerBuilder, you define the library search path by editing the application properties.n In ObjectTeam, the code generator defines the library search path as the list of all PowerBuilder libraries in all subdirectories of the current user_environment.How to add libraries to ObjectTeam search pathWhen you create a PowerBuilder library in ObjectTeam, the system.pbl library appears in the user_environment\system directory. When you configure the PowerBuilder environment in the Implementation phase, the classlib.pbl library appears in the user_environment\src directory. If you want to include additional PowerBuilder libraries in the library search path used by the code generator, copy the PowerBuilder libraries into the user_environment\src directory. For example, to add pbtutor.pbl to the library search path, copy pbtutor.pbl to the user_environment\src directory.ID="19080"Completing the Generated WindowsIntroductionAfter generating the PowerBuilder source files, in PowerBuilder, complete them as described below.w_master_detailsTo complete the w_master_details window:n Resize the dw_master and dw_detail controls.n Add the script for the rowfocuschanged event of the dw_master control.n Add the scripts for the ue_retrieve, ue_insert, ue_update, ue_delete, and open events of the w_master_details window.w_customersIn the w_customers window, the data window control dw_master contains the data window object d_custlist and the data window control dw_details contains the data window object d_customer.To complete the w_customers window:n Edit the title of the window by editing the window properties.n Create the d_custlist data window object.n Specify d_custlist as the data window object associated with the dw_master control by editing the control's properties.n Create the d_customer data window object.n Specify d_customer as the data window object associated with the dw_details control by editing the control's properties.w_productsIn the w_products window, the data window control dw_master contains the data window object d_prodlist and the data window control dw_details contains the data window object d_product.To complete the w_products window:n Edit the title of the window by editing the window properties.n Create the d_prodlist data window object.n Specify d_prodlist as the data window object associated with the dw_master control by editing the control's properties.n Create the d_product data window object.n Specify d_product as the data window object associated with the dw_details control by editing the control's properties.Chapter 5 ID="32714"Reverse and Round-Trip EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for PowerBuilderIntroductionThis chapter describes how to use reverse engineering and round-trip engineering with the PowerBuilder code generator.Reverse engineeringReverse engineering objects defined in an existing PowerBuilder library makes them available as classes in ObjectTeam. ObjectTeam projects can use the classes to reference the existing objects. In this way, reverse engineering supports reuse of software components.Note: Classes created by reverse engineering should not be edited or regenerated from within ObjectTeam. They should only be used as external classes.Round-trip engineeringRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated PowerBuilder source files. Use round-trip engineering to update the ObjectTeam model before you regenerate the source files. If you add variables, functions, controls, or structures to the generated source file, but do not add them to the ObjectTeam model, they are lost when you regenerate the source files.ExplanationThe code generator generates code based on the ObjectTeam model. When you regenerate the source file, only the attributes, operations, and controls defined in the model appear in the generated source file.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17925" TYPE="XREF-TEXTCOPY"Reverse Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22218" TYPE="XREF-TEXTCOPY"Round-Trip Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="17925"Reverse EngineeringIntroductionTERM1="project" TERM2="using data from other sources"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="class library, reverse engineering"Reverse engineering parses files exported from PowerBuilder (.pbl) libraries and builds CDs and CDMs that model the objects defined in those files. It can be particularly useful if you want to reference existing PowerBuilder objects from within an ObjectTeam project.Purpose Use reverse engineering to capture and display the objects defined in your PowerBuilder (.pbl) libraries. This serves two primary purposes:n Makes the PowerBuilder objects available as ObjectTeam classes.n Helps you to understand the structure and functionality of the PowerBuilder objects.Not an import utilityReverse engineering is not designed to capture all the information in a PowerBuilder export file. Therefore, do not use reverse engineering to import objects in order to edit and regenerate them from ObjectTeam. If you generate PowerBuilder files from the CDs and CDMs created by reverse engineering, the generated files are not the same as the original files.ID="19526"What happens during reverse engineeringReverse engineering uses the following steps to translate PowerBuilder files into CDs and CDMs:1 Parses the following types of PowerBuilder files, which are exported from PowerBuilder libraries: .srw (window), .srm (menu), .sru (user object), and .srs (structure). Then, maps the PowerBuilder elements to ObjectTeam elements.2 Creates CDs and CDMs that define the ObjectTeam elements.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29399" TYPE="XREF-TEXTCOPY"Parsing the Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32959" TYPE="XREF-TEXTCOPY"Creating the Diagrams 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23625" TYPE="XREF-TEXTCOPY"Running Reverse Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10ID="29399"Parsing the FilesParsing the PowerBuilder filesThe parser recognizes the following elements in the PowerBuilder files:n Windows, menus, structures, standard and custom class user objects, and standard and custom visual user objectsn Instance and shared variables; global variables are ignoredn Object functions and user events; external functions are ignoredMapping the elementsTERM1="Visual Basic" TERM2="reverse engineering"TERM1="mapping" TERM2="in reverse engineering"TERM1="reverse engineering" TERM2="mapping"After parsing the PowerBuilder file, reverse engineering maps the PowerBuilder constructs to ObjectTeam elements, as shown in the following table:COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PowerBuilder ConstructionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam ElementCOLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with Global Type and Window Type properties set. Class hierarchies and aggregations show the relationships among classes.COLNAME="1" VALIGN="TOP" MOREROWS="0"Instance variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute, data type, and default value (if any). Attribute Access property is set.COLNAME="1" VALIGN="TOP" MOREROWS="0"Shared variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class attribute (name is prefixed with $), data type, and default value (if any). Attribute Access property is set.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConstantCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute and data type. The Constant attribute property is set and default value of the attribute is set to the value of the constant. Attribute Access property is set.COLNAME="1" VALIGN="TOP" MOREROWS="0"FunctionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and parameters. Method Access operation property and Pass By parameter property are set. COLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and parameters. The Event operation property and Pass By parameter property are set.Note: For an event with an event ID, the eventID name is the only parameter. For example: eventName(pbm_custom01: eventid)Customizing reverse engineeringThe customization file tcl\rev_assoc.tcl file in the powerbuilder module defines the reverse engineering rules used to detect associations and attribute accessors. You can modify reverse engineering by editing this customization file, as described in the ObjectTeam Customization Guide.Warning: This customization file is not used unless you select the Reverse Engineer Associations option during reverse engineering.ID="32959"Creating the DiagramsCreating diagramsTERM1="diagrams" TERM2="draft, in reverse engineering"TERM1="reverse engineering" TERM2="draft diagrams"After mapping the PowerBuilder constructs to ObjectTeam elements, reverse engineering creates the CDs and CDMs that define the ObjectTeam elements. It creates the following CDs:n One or more CDs to show the class hierarchyNote: In PowerBuilder, each object type is a class. Therefore, reverse engineering creates a CD for each type of object that shows all objects of that type.n One or more CDs to show the associations among the classesNaming conventions for CDsEach CD is named for the primary class in the CD; for example, Class1. The word Tree is appended to the name of each CD that defines part of the class hierarchy; for example, TestClass1Tree.How many diagrams are createdThe number and complexity of the CDs created by reverse engineering depend largely on the following:n The files that you select for reverse engineering, particularly the number and complexity of classes defined in the files.n The reverse engineering options that you select, particularly whether you choose to reverse engineer associations.ID="22283"Options for reverse engineeringDuring reverse engineering, ObjectTeam displays the following dialog box prompting you to select the options that you want to use:FILENAME="00826.unk" ORIGFILE="pics/reoption.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbeng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box):COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Prefix used to name each generated CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only class structure is generated)n Only CDMs (only class features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering creates a separate reference CD for each class that exceeds the maximum size. The class is folded in all diagrams other than the reference diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class. When a class exceeds this size, it is folded.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree. When a class hierarchy exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram. When a diagram exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Reverse Engineering Associations is selected, specifies the algorithm reverse engineering uses to create the CDs that show the associations:n Simple. Creates a CD for each class that has associations.n Grid. Creates a CD for each n unfolded classes, where n is the number specified in the Number of Classes per CD field.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of Classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Placement Algorithm is Grid, specifies the number of unfolded classes per CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"Reverse Engineer AssociationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering examines the attributes and accessor methods defined on each class to determine the associations among classes. It then creates CDs that show those associations.COLNAME="1" VALIGN="TOP" MOREROWS="0"CaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"PowerBuilder almost always uses lowercase and ObjectTeam is case sensitive. Use this field to specify which case should be used in ObjectTeam.n FirstCase. For each identifier, use the case that is first encountered. (When reverse engineering multiple files, use this option with caution.)n UpperCase. Always use uppercase characters.n LowerCase. Always use lowercase characters.GUI aggregationsReverse engineering always creates CDs that show the aggregations that define the GUI, even if you have not selected the Reverse Engineer Associations option. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box.CDs that show the class hierarchyFollowing are the guidelines used to draw the CDs that show the class hierarchy:n Reverse engineering creates a CD for each top-level parent class. The CD contains the parent class and all subclasses.n If a class has multiple parent classes, reverse engineering creates a CD for each parent. The CD for the first parent class contains the parent class, the child class, and all subclasses of the child class. The CD for each of the other parent classes contains only the parent class and the child class; in these diagrams, the child class is folded.FILENAME="00827.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/pb/pbeng.fm5.mif"CDs that show associationsIf you select the Reverse Engineer Associations option in the Reverse Engineer dialog box, reverse engineering creates CDs that show the associations. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box. Both algorithms are described below.If you do not select the Reverse Engineer Associations option, reverse engineering shows associations only as attributes and accessor methods in the appropriate classes.Note: Bidirectional associations are reverse engineered as two unidirectional associations.GUI aggregationsReverse engineering always creates CDs that show the aggregations that define the GUI, even if you have not selected the Reverse Engineer Associations option. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box.Simple algorithmIf you select Simple in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Creates a CD for each class that has one or more associations. 2 Unfolds the main class in each CD and folds all associated classes.The following illustration shows a CD created by the simple algorithm:FILENAME="00828.unk" ORIGFILE="pics/resimp.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbeng.fm5.mif"Grid algorithmIf you select Grid in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Divides all classes into groups of n, where n is the number specified by the Number of Classes per CD field of the Reverse Engineer dialog box. The algorithm attempts to group associated classes.Tip: To create a diagram that contains all classes, specify n as the number of classes being reverse engineered (or greater).2 For each group of classes, creates a CD and adds the classes (unfolded) to the CD. To position the classes, reverse engineering uses a uniform grid whose squares are the size of the largest class in the group and its longest association.3 For each class in each CD, draws all associations from the class to all associated classes. If an associated class is not in the CD, reverse engineering adds it (folded) to the CD.The following illustration shows a CD created by the grid algorithm. (The classes in the illustration have been rearranged slightly to fit more easily on the page.)FILENAME="00829.unk" ORIGFILE="pics/regrid.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbeng.fm5.mif"ID="23625"Running Reverse EngineeringIntroductionThis section describes how to run reverse engineering.How to reverse engineerΣ To reverse engineer PowerBuilder files:1 Move to System level in Object Design phase.Note: Typically, you reverse engineer into an empty system. However, name conflicts can still occur since classes are created with scope Phase.2 Select Utilities | Reverse Engineer PowerBuilder.The Reverse Engineer PowerBuilder dialog box appears, prompting you to select the files to be reverse engineered.FILENAME="00830.unk" ORIGFILE="pics/refiles.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbeng.fm5.mif"Tip: Reverse engineering creates CDs and CDMs based on the files that you select. Therefore, you generally want to reverse engineer all related files at the same time.3 Select the files that you want to reverse engineer, then select Open.A second Reverse Engineer PowerBuilder dialog box appears (see REFID="22283" TYPE="XREF-TEXTCOPY"Options for reverse engineering), prompting you to select the options that you want to use. 4 Select the options, then select OK.ObjectTeam reverse engineers the selected file, reporting the results in a Monitoring window.ID="22218"Round-Trip EngineeringIntroductionRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated PowerBuilder source files. Use round-trip engineering to update the ObjectTeam model before you regenerate the source files.PurposeThe code generator generates code based on the ObjectTeam model. If you do not update the ObjectTeam model before regenerating the source files, the new source files do not include your changes. ExampleYou generate PowerBuilder files. You then edit the generated source file, adding a new function. If you do not update the ObjectTeam model, the model does not contain the operation that corresponds to the function. When you regenerate the source file, the code generator assumes that you deleted the operation from ObjectTeam and, therefore, does not include the obsolete function in the newly generated source file.Changes captured by round-trip engineeringIf you have made the following types of changes to the generated PowerBuilder source, round-trip engineering updates the ObjectTeam model based on those changes:n Added or deleted variables, or edited variable declarationsn Added or deleted procedures or edited procedure declarationsn Added controls to a windown Added structures to an object, such as a window or custom class objectChanges not captured by round-trip engineeringRound-trip engineering ignores the following types of changes that you might have made to the generated source files. If you have made these types of changes, you must update the ObjectTeam model manually:n Deleted controls from a windown Deleted structures from an objectRound-trip engineering and eventsAdding events in Powerbuilder is not discouraged, since the code attached to an event may get lost during a roundtrip action in ObjectTeam. The preferred way to add events is to add them in ObjectTeam, and regenerate the code. Next, you can attach code to the event in Powerbuilder, without running the risk of losing code during a roundtrip action.What happens during round-trip engineeringThe following table shows the steps that occur during round-trip engineering:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"You select the generated (edited) source files that you are interested in and start round-trip engineering.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam parses the selected files and compares the information in the files with the information in the ObjectTeam model.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"For each difference it finds, ObjectTeam proposes an action and prompts you for confirmation. For example:In class "Account": delete attribute "Address"?COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Based on your answers, ObjectTeam updates the ObjectTeam model.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15830" TYPE="XREF-TEXTCOPY"Parsing the Generated (Edited) Source Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33338" TYPE="XREF-TEXTCOPY"Running Round-Trip Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="15830"Parsing the Generated (Edited) Source FilesIntroductionThis section describes which changes to the generated source files are captured by round-trip engineering. Changes to attributesYou can add, delete, and modify shared or instance variables. In PowerBuilder, when you edit the variables in a generated file, you see the following comments:n // User defined attributesRound-trip engineering updates the ObjectTeam model based on the variable declarations that appear under this comment. Typically, these are the variable declarations that you edit.n // Non modeled user defined attributesRound-trip engineering ignores variable declarations that appear under this comment. However, the code generator preserves these variables when you regenerate the source files. These are variables, such as SQL cursors, that you want to use in PowerBuilder, but do not want to model in ObjectTeam.n // Association attributesThis comment appears only for instance variables. It lists the variables that ObjectTeam uses to implement associations. Round-trip engineering ignores these variable declarations and the code generator generates them based on the associations defined in the ObjectTeam model. Therefore, changes that you make to these variable declarations are not preserved.Attribute Access propertyThe Attribute Access property of an attribute is based on the access keyword in the attribute declaration. If you do not specify an access keyword, the Read and Write fields of the Attribute Access property are set to Public.ID="34671"Changes to functions You can add and delete functions. You can modify function declarations by adding, removing, or reordering parameters, changing default values, changing the return type, or changing the access method (public, protected, private). You can change the code in the body of any function. Such changes are ignored by round-trip engineering, but are preserved by the code generator when you regenerate the source files.Overloaded functionsIf you have multiple functions with the same name, do not delete one and change the declaration of another at the same time. Delete one, run round-trip engineering, change the declaration of the other, and run round-trip engineering. This approach prevents potential errors in round-trip engineering.Changes to eventsYou can modify event declarations by adding, removing, or reordering parameters, changing default values, or changing the return type.You can change the code in the body of any event. Such changes are ignored by round-trip engineering, but are preserved by the code generator when you regenerate the source files.Changes to controls and structuresChanges to controlsYou can add controls to a generated window. However, if you delete a control, you must edit the ObjectTeam model manually. In ObjectTeam, controls are modeled as classes and round-trip engineering does not delete classes from the ObjectTeam model.If you add controls to a generated window, round-trip engineering updates the ObjectTeam model. Round-trip engineering does not modify existing CDs. It creates the following CDs to hold the classes that represent the new controls:n A CD for each type of new control; these CDs show the superclass of each newly created ObjectTeam classn A CD for each modified window; these CDs show the associations between the new controls and their windowsChanges to structuresYou can add structures to a generated window or class. Adding a structure to a window or class is similar to adding a control to a window.ID="33338"Running Round-Trip EngineeringCustomizing round-trip engineeringThe customization file roundtrip.roundtrip in the M4_home/etc directory controls what actions round-trip engineering proposes, as well as the default answers it supplies. To examine or modify the current behavior of round-trip engineering, examine or modify the customization file.How to run round-trip engineeringΣ To run round-trip engineering:1 Move to the System level of the Implementation phase.2 Select the PowerBuilder files on which you want to run round-trip engineering.3 Select Utilities | Round Trip Selected.The following dialog box appears.FILENAME="00831.unk" ORIGFILE="pics/rndtrip1.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbeng.fm5.mif"4 Optionally, enter a prefix to be used in naming any CDs created by round-trip engineering, then select OK. If you do not enter a prefix, round-trip engineering uses the prefix NewRT.ObjectTeam opens the Roundtrip Selected Files dialog box, compares the classes in the PowerBuilder files to the classes in the Object Design phase, and then begins proposing actions and prompting you for confirmation.FILENAME="00832.unk" ORIGFILE="pics/rndtrip2.gif" ORIGTYPE="X" ORIGDOC="../../sources/pb/pbeng.fm5.mif"5 Use the buttons to respond to the proposed actions:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ButtonCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"YesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Make the proposed change.COLNAME="1" VALIGN="TOP" MOREROWS="0"NoCOLNAME="2" VALIGN="TOP" MOREROWS="0"Do not make the proposed change.Note: When you regenerate the PowerBuilder file, the change to the PowerBuilder file will be lost.COLNAME="1" VALIGN="TOP" MOREROWS="0"Default to AllCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use the default response for all remaining questions.COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cancel all changesObjectTeam updates the model based on your responses.Chapter 6 ID="22956"Customizing PowerBuilder Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for PowerBuilderIntroductionExpert users can extend the PowerBuilder code generator by modifying the Tcl scripts that are supplied in the M4_home\tcl\l_pb directory. Editing these Tcl scripts, or writing new ones that add functionality to the code generator, requires a thorough knowledge of the OOPL model structure, Tcl commands, and the ObjectTeam Shell.Modifying Tcl proceduresYou can adapt existing methods of Object Tcl classes that are used in the code generation by redefining them in a user-defined Tcl file.Warning: Cayenne Software cannot support any provided Tcl scripts that you modify. Therefore, the scripts and their structures are not documented. If you choose to modify any Tcl scripts or procedures, you must have a thorough knowledge of the script's structures to avoid introducing errors. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22291" TYPE="XREF-TEXTCOPY"How Tcl is Used in the Code Generation 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15580" TYPE="XREF-TEXTCOPY"Customizing Tcl Scripts Used for Code Generation 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="22291"How Tcl is Used in the TERM1="Tcl" TERM2="in ObjectTeam environment"Code GenerationSEE="Tcl" TERM1="Tool Command Language"IntroductionThis chapter provides information on the use of Tcl (Tool command language) in ObjectTeam. It does not provide an introduction to Tcl itself. If you want to become familiar with Tcl, try the following introductory book:John K. Ousterhout, Tcl and the Tk Toolkit. (Reading, Massachusetts: Addison---Wesley Publishing Company, 1994).What is Tcl?Tcl (Tool command language) is an interpretive command language that resembles C. By default all arguments are passed as strings. These strings are C-compatible. Tcl consists of:n A library of C proceduresn An interpretern The Tcl coreThe Tcl core is a simple language that can be completely programmed. It provides a collection of commonly used features such as these:n Variablesn Conditional and looping commandsn Proceduresn Associative arraysn Listsn Expressionsn File manipulationHow is Tcl used in the code generation?When the ObjectTeam shell executes a Tcl script file, it translates information from the repository, internal models, and TERM1="code generation model" TERM2="and Tcl"TERM1="model" TERM2="code generation"code generation models into source code. The following illustration shows this process schematically:FILENAME="00833.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/pb/pbtcl.fm5.mif"Types of Tcl usedThe methods in the default Tcl script files used for code generation use different levels of Tcl.COLS="2"COLNAME="1" COLWIDTH="168p"COLNAME="2" COLWIDTH="280p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"descriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Standard TclCOLNAME="2" VALIGN="TOP" MOREROWS="0"Refer to general Tcl documentation for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to Tcl proceduresCOLNAME="2" VALIGN="TOP" MOREROWS="0"These procedures are stored in Tcl files. They become available when the file in which the procedure is defined is sourced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to methods of classesin the ObjectTeam modelsCOLNAME="2" VALIGN="TOP" MOREROWS="0"The classes of the ObjectTeam models (including the OOPL model and SQL model) are documented in ObjectTeam Repository Interface Guide. COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in classesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Besides methods of classes belonging to the ObjectTeam models, methods belonging to other built-in classes can also be called. Refer to the ObjectTeam Repository Interface Guide for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in ObjectTeam commandsCOLNAME="2" VALIGN="TOP" MOREROWS="0"These commands are built-in to otsh and otk. You can use these commands, but you cannot edit or view them like Tcl procedures. Refer to the ObjectTeam Repository Interface Guide for details. ID="35220"Which Tcl files are used?Tcl procedures used for code generation are stored in Object Tcl script files. During code generation, these scripts are interpreted and executed by the ObjectTeam shell (otsh). When you use Utilities | Import From Previous Phase in the Browser at the system level of the Implementation phase, otsh interprets the Object Tcl code in the Tcl file tcl\l_pb\pbimporter.tcl. In the implementation of these methods, Tcl methods from other classes are called.Most of the Tcl script files that the code generator uses are located under the M4_home directory in tcl\l_pb\*.tcl. The Tcl script files fstorage.tcl and caynutil.tcl in the tcl directory contain utility procedures that are also used.ID="15580"Customizing Tcl Scripts Used for TERM1="code generation" TERM2="adapting"Code GenerationUser-defined Tcl filesBecause of the open character of Tcl, you can redefine the existing Object Tcl methods of the Tcl scripts, if you want to adapt the code generation to your needs and circumstances. You can include your own properties, control flow keywords, and section keywords in the code generation this way. You can even build your own code generator by creating your own Tcl scripts. Warning: Note that existing Object Tcl classes cannot be redefined. However, you can add new, user-defined Object Tcl classes.ID="37212"Where to store user-defined Tcl proceduresThe Tcl script files used for the default code generation are stored in the file system. They can be found in the following directory:M4_home\tcl If you want to adapt the default code generation, you can edit the Tcl files in this directory, but it is better to modify copies of the original files. There are several ways available to make otsh use user-defined files. These ways are briefly discussed in this section. You can overrule existing Tcl files or you can extend them by creating new Tcl files with new user-defined Tcl procedures and methods, or redefinitions of existing methods. The ways to do that are also covered in this section.Storing Tcl files in the same System as where the code is generatedOne of the available file types on the system level of the Implementation phase is Tcl. You can create new files of this type and redefine methods of existing Object Tcl classes in such a file. During code generation, otsh sources all files of the type Tcl in the current system, regardless of their names.Σ To create such a Tcl file:1 Open the implementation system.2 Select File | New | External File Version.A dialog box of file types appears.3 Select Tcl as the file type, specify a name for the Tcl file (without the extension .tcl), and click OK.You can enter the name of an existing Tcl file used for code generation or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.4 Edit and save the new Tcl file.The next time you generate code (by using Utilities | Import From Previous Phase) the new Tcl file is sourced by otsh.Storing Tcl files in a system TclIf you do not want to store user-defined Tcl files in the same system in which your code is generated, you can create a system called Tcl and store your user-defined Tcl files in there. Any Tcl file that is defined in such a system is sourced during code generation. You can use this mechanism for user-defined Tcl files or for user-defined Tcl files that are meant to replace existing ones.To store files in a Tcl system:1 Make sure the Browser is on the Implementation phase level.2 Select File | New | System Version.3 Type Tcl as the system name, being sure to use a capital T.4 Open the system Tcl.5 Select File | New | External File Version.A dialog box of file types appears.6 Select Tcl as the file type, specify a name for the Tcl file (without the extension .tcl), and click OK.You can enter the name of an existing Tcl file used for code generation or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.7 Edit and save the new Tcl file.The next time you generate code, the new Tcl file is sourced by otsh.TERM1="Tcl" TERM2="script files, testing"Testing Tcl filesIf you want to test a customized Tcl file before you add it to a system in ObjectTeam, you can create the Tcl file in your file system and feed it to otsh outside the ObjectTeam environment. See the ObjectTeam Customization Guide for details on how to start otsh from the command line.When the Tcl file has reached its final state, you can decide to add it to a system in ObjectTeam, as described above. Appendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for PowerBuilderPowerBuilder code generation propertiesThe following table lists the properties that effect PowerBuilder code generation. These are available in the CD in the Object Design phase.COLS="4"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="99p"COLNAME="3" COLWIDTH="117p"COLNAME="4" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="16465" TYPE="XREF-TEXTCOPY"Specifying Access Methods for AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="34899" TYPE="XREF-TEXTCOPY"Specifying Attribute AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"AutoinstantiateCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39809" TYPE="XREF-TEXTCOPY"Editing Class PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Constant AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17590" TYPE="XREF-TEXTCOPY"Specifying ConstantsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="36884" TYPE="XREF-TEXTCOPY"Mapping Qualified AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19182" TYPE="XREF-TEXTCOPY"Editing Operation PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Global TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"YesNoCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="13782" TYPE="XREF-TEXTCOPY"Specifying Global TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicProtectedPrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19182" TYPE="XREF-TEXTCOPY"Editing Operation PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Pass ByCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"ValueReadonlyReferenceCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19034" TYPE="XREF-TEXTCOPY"Editing Parameter PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Text COLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="39809" TYPE="XREF-TEXTCOPY"Editing Class PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="16465" TYPE="XREF-TEXTCOPY"Specifying Access Methods for AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="17827" TYPE="XREF-TEXTCOPY"Editing Attribute PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19182" TYPE="XREF-TEXTCOPY"Editing Operation PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="19034" TYPE="XREF-TEXTCOPY"Editing Parameter PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Window TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"ChildMainMDIMDIHelpPopupResponseCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="11993" TYPE="XREF-TEXTCOPY"Modeling WindowsSmalltalk Code Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for SmalltalkAbout this manualThe ObjectTeam Code Generation Guide for Smalltalk contains information specific to the Smalltalk programming language. This includes information for setting up, configuring, and specifying code generation details in CDs that you will use to generate Smalltalk code. Refer to the ObjectTeam Modeling Guide for general information about the code generation process.PrerequisitesThis guide is intended for experienced users of ObjectTeam and the analysis and design method it supports. This guide gives you information on how to map ObjectTeam diagrams to Smalltalk code; it does not teach you how to use Smalltalk.To customize or extend the capabilities of the Smalltalk code generator, you must have a thorough understanding of the ObjectTeam Shell, the Object-Oriented Programming Language (OOPL) model structure, and the Tool Command Language (Tcl) commands.Chapter 1 ID="37544"Preparing Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for SmalltalkIntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.Smalltalk module requiredThe ObjectTeam module Smalltalk Code Generation provides the menu items, the properties and the Tcl code required to use the Smalltalk Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="28728" TYPE="XREF-TEXTCOPY"Chapter 2, Generating Code, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13501" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35686" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00834.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/st/stobjd.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. (See REFID="11934" TYPE="XREF-TEXTCOPY"Data Attributes for attribute syntax.)The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. Types are abstracted from the data types recognized by the OOPL environment. The code generator translates the standard types to the target types. Take care when customizing the files that define standard types. Any additions you make must conform to the target language or the generated code may not be usable. For details on customizing the standard types, see REFID="24015" TYPE="XREF-TEXTCOPY"Customizing Data Types.OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="17827" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to Smalltalk, describes how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 Generating ID="28728"CodeTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for SmalltalkIntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details that not specified in the model.Prerequisitesn The ObjectTeam module Smalltalk Code generation must be active from Object Design Phase and Implementation Phase level down.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="37544" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Steps in code generationThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Specify the Smalltalk code generation settings.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate Smalltalk files. During this step, ObjectTeam creates Smalltalk files at System level in the Implementation phase.sNote: System level in the Implementation phase is fundamentally different than System level in other phases. The System files in the Implementation phase are source files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Optionally, import the classes into the VisualWorks environment.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Edit the source files in either ObjectTeam or VisualWorks. ObjectTeam generates a large portion of your application code, but not all of it. In this stage, you finish writing the application code.Changes you make to the source files are not lost. When you regenerate the source files, the code generator recognizes your changes and transfers them to the newly generated files.TERM1="code regeneration"TERM1="regeneration" TERM2="code" TERM1="otsh" TERM2="code regeneration"COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"If you have not done so already, import the classes into the VisualWorks environment and test the application. If necessary: correct the source files, the model, or both; regenerate the Smalltalk files; and return to step 4.Illustration of code generationThe following illustration shows how ObjectTeam generates code, including the names of the Tcl scripts that it uses. The CDs and CDMs shown at the top are in the Object Design phase.FILENAME="00835.tif" ORIGSEQ="8" ORIGTYPE="I" ORIGDOC="../../sources/st/stcodg.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12152" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33329" TYPE="XREF-TEXTCOPY"Changing Smalltalk Code Generation Properties 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39919" TYPE="XREF-TEXTCOPY"Generating Smalltalk Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23542" TYPE="XREF-TEXTCOPY"Importing Classes in VisualWorks 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27253" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12958" TYPE="XREF-TEXTCOPY"Regenerating Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16ID="12152"Components of Code GenerationTcl scripts for code generationThe scripts written for code generation retrieve information from the code generation models, format this information and write the results to source code files. Code generation models are built from the CDs in the Object Design phase.TERM1="code regeneration"TERM1="regeneration" TERM2="code"Code TERM1="otsh" TERM2="code regeneration"regenerationCode generation is an automated process that generates Smalltalk files. ObjectTeam ensures that n You can regenerate these files when you change your model.n Changes that you make to the generated files are preserved when you regenerate the files.For more information, see REFID="12958" TYPE="XREF-TEXTCOPY"Regenerating Code.TERM1="class library" TERM2="including in code generation"Class library integrationYou can include external class libraries in your design. Such an external class library is automatically included during the code generation. In addition, ObjectTeam helps you to understand and reuse existing class libraries through reverse engineering.For more information, see REFID="32714" TYPE="XREF-TEXTCOPY"Chapter 4, Reverse Engineering.TERM1="VisualWorks"VisualWorksYou use ObjectTeam to generate classes and associations between classes. The resulting files can be imported into the VisualWorks Smalltalk Environment, where you can edit and complete the generated source files.You can also export the classes back to ObjectTeam and regenerate the classes, without losing the edits you may have made in the VisualWorks environment.For more information, see REFID="12958" TYPE="XREF-TEXTCOPY"Regenerating Code.ID="33329"Changing Smalltalk TERM1="code generation" TERM2="settings for Smalltalk"TERM1="Smalltalk" TERM2="code generation settings"Code Generation PropertiesIntroductionBefore you start (re)generating code, you might want to change the following System-level properties that effect code generation: n REFID="15486" TYPE="XREF-TEXTCOPY"Generate Print Methodsn REFID="25358" TYPE="XREF-TEXTCOPY"Default Smalltalk Class Category NameID="15486"TERM1="generate print methods"TERM1="print method" TERM2="default"TERM1="default print method"Generate Print MethodsUse the Generate Print Methods property to specify whether you want to generate a print method for every attribute (selected) or not (cleared). By default, print methods are not generated.If you choose to generate print methods, a category printing, containing two print methods, is added to every class definition. For example:!Account methodsFor: 'printing'! printOn: aStreamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'super printOn: aStream.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'self printVars: aStream withIndent: 0! printVars: aStream withIndent: anIntegername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aStream cr; tab: anInteger; nextPutAll: 'amount: ' displayString.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'amount printOn: aStream! !Additional information on these print methods can be found in REFID="22269" TYPE="XREF-TEXTCOPY"Default Print methods. Tip: You can check what the current setting of this property is for a particular system by selecting Smalltalk | Code generation Settings on Implementation System level. An information box like the following is then displayed.FILENAME="00836.unk" ORIGFILE="pics/cgenset.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stcodg.fm5.mif"ID="25358"TERM1="category" TERM2="setting default class -"TERM1="class category"Default Smalltalk Class Category NameWith the Default Smalltalk Class Category Name property you can specify which name must be generated as default class category: n The name of the current system (default setting)n The name of the current diagramNote: The diagram the code generator finds first is considered the current diagram name. This implies that the current diagram name may not be the same every time you (re)generate code.The Default Smalltalk Class Category Name property only takes effect in classes for which the property Class Category is not specified (see REFID="38554" TYPE="XREF-TEXTCOPY"Class Category). If the Class Category property is specified, the value of the property is the class category name.Tip: You can check what the current setting of this property is for a particular system by selecting Smalltalk | Code generation Settings on Implementation System level.TERM1="code generation" TERM2="changing default settings"How to change code generation propertiesΣ To change the System-level properties that effect code generation:1 In the Browser, move to the Implementation phase.2 Select the System whose properties you want to change.3 Select File | Properties | Edit.The Edit Properties dialog box appear.4 In the left pane, select the system name.The System-level properties appear in the right pane.5 If you want the default category name to be the name of the current CD, select Diagram in the Default Smalltalk Class Category Name list.6 If you want the code generator to generate default print methods, select the Smalltalk Generate Print Methods check box; otherwise, leave it cleared.TERM1="Implementation" TERM2="importing systems"TERM1="importing" TERM2="in Implementation Phase"ID="39919"Generating Smalltalk Source FilesResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create Smalltalk source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are Smalltalk files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate source files on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate Smalltalk.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet. - Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then imports the systems.How to generate code on System levelΣ To generate (selected) source files for a system from System level of the Implementation phase:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate Smalltalk.A cascading menu appears.3 Select New, Selected, or All:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then generates the source files. The following illustration shows the Monitor window after importing a system that contains only one class.FILENAME="00837.unk" ORIGFILE="pics/imp_impl.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stcodg.fm5.mif"Location of the source filesSource files are stored in the repository as external files. They are also written to the user_environment/system-name directory, where user_environment is the file path for your generated files. (See the ObjectTeam Project Management Guide for more information about the user environment.) The following illustration shows how the source files appear in the Browser.FILENAME="00838.unk" ORIGFILE="pics/srcflloc.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stcodg.fm5.mif"ID="11372"Converting the OOPL ModelIntroductionREFID="39919" TYPE="XREF-TEXTCOPY"Generating Smalltalk Source Files describes how to generate code for systems in the Implementation phase.When you generate code for a system in the Implementation phase, the Smalltalk code generator converts the OOPL model into Smalltalk files. This section describes that process.TERM1="generating code" TERM2="import OOPL model"TERM1="code generation" TERM2="importing OOPL model"OOPL ModelThe OOPL Model, which is generated from the CDs in the Object Design phase, contains information used to generate code. The objects in this model are organized in such a way that code can be generated easily.For more informationThe ObjectTeam Programming Interface Guide provides a detailed description of the classes in the OOPL Model.How ObjectTeam converts the OOPL ModelTo convert an OOPL Model, the ObjectTeam Shell (otsh) executes the Tcl script TERM1="import.tcl"import.tcl. It loads the OOPL model into memory and translates the information into Smalltalk files. The ObjectTeam shell recognizes elements such as classes, data types, associations and methods. The Tcl script import.tcl activates, among other things, the Tcl script TERM1="gencpp.tcl"genst.tcl, which contains Tcl procedures to retrieve information from the OOPL model and other internal models, format it and write it to Smalltalk files. genst.tcl uses other Tcl scripts that use other Tcl scripts as well, and so on.For more informationFor an overview of the Tcl scripts used for code generation, see REFID="36160" TYPE="XREF-TEXTCOPY"Chapter 5, Customizing Code Generation.Generated filesThe Smalltalk code generator generates the following files:TERM1="C++ header file" TERM2="generating"TERM1="generating" TERM2="C++ header file"COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="304p"COLNAME="1" VALIGN="TOP" MOREROWS="0"class_name.stCOLNAME="2" VALIGN="TOP" MOREROWS="0"Smalltalk file containing internal details of a class; a file like this is generated for every class in the CDs imported from the Object Design phase.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="vwimport.st"vwimport.stCOLNAME="2" VALIGN="TOP" MOREROWS="0"Script to be used in VisualWorks to file in classes.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="vwexport.st"vwexport.stCOLNAME="2" VALIGN="TOP" MOREROWS="0"Script to be used in VisualWorks to export classes back to the ObjectTeam user environment.For more informationSee REFID="17827" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to Smalltalk, for more details.ExampleThe following example shows a class from the CD and the matching Smalltalk that would be generated. Note: Print methods are not generated in this example; the Generate Print Methods is switched off (see REFID="33329" TYPE="XREF-TEXTCOPY"Changing Smalltalk Code Generation Properties). The user-defined method PrintAmount still has to be implemented.FILENAME="00839.unk" ORIGFILE="pics/cad_ex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stcodg.fm5.mif""Generatedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'fromname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectTeamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Project:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Smalltalkname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'System:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sys"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Objectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'subclass:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''amount'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classVariableNames:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'''name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'poolDictionaries:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'''name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'category:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''sys'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'creation'!newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^supername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'initialize!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''initialize-release'!releasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'supername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'release.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Startname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'addedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'code"!initializename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Startname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'addedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'code"!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''accessing'!amountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^amount!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''misc'!printAmountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Notname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'yetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'implemented"!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''modifying'!amount:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'anAmountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'amountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'anAmount!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!ID="23542"Importing Classes in TERM1="VisualWorks" TERM2="importing classes from ObjectTeam"TERM1="class" TERM2="importing from ObjectTeam into VisualWorks"TERM1="class" TERM2="filing in"TERM1="filing in classes"VisualWorksIntroductionBesides code files for Smalltalk classes, ObjectTeam also generates the following scripts:n vwimport.st for importing (filing in) the generated classes from ObjectTeam to VisualWorksNote: Sub classes cannot be filed in before their super class. This script ensures the right filing in order.n vwexport.st for exporting (edited) source code from VisualWorks back to the ObjectTeam environmentThis section describes how to use the TERM1="vwimport.st"vwimport.st script to import classes into VisualWorks. For details on using the vwexport.st script, see REFID="12958" TYPE="XREF-TEXTCOPY"Regenerating Code.How to import or export selected classes By default, the generated import and export scripts import and export all classes in a specific system. You can also create scripts that import or export only selected classes.Σ To generate a script that imports or exports only selected classes:1 In the Browser, move to the System level of the Implementation phase.2 Select the Smalltalk files of the classes that you want to import (file in to VisualWorks) or export (move back to ObjectTeam).3 Select one of the following menu items:- Smalltalk | Generate Import Script | For Selected Files - Smalltalk | Generate Export Script | For Selected Files To regenerate scripts that import or export all classes, select Smalltalk | Generate Import/Export Script | For All Files.Warning: The generation of import and export scripts through the Smalltalk menu is based on the contents of the files in the Implementation phase. The generation of the import and export files during Import from Previous Phase, on the other hand, is based on the CDs and CDMs in the ObjectDesign phase.Other Smalltalk environmentsThe primary Smalltalk environment for which ObjectTeam generates Smalltalk files is VisualWorks. However, you should be able to use the files in combination with other Smalltalk environments as well, such as GNU Smalltalk. If you plan to use a Smalltalk environment other than VisualWorks, you need to adapt the generation of import and export scripts that are generated by ObjectTeam. See REFID="14683" TYPE="XREF-TEXTCOPY"Using a Different Smalltalk Environment for information on how to adapt these scripts.How to import classes into VisualWorksΣ To import classes into VisualWorks:1 Make sure the Browser is on Implementation System level.2 Start VisualWorks by selecting Smalltalk | Start VisualWorks.The VisualWorks installation directory must be in the environment variable PATH. The name of the root of the installation must be visual.If you want to use an image other than the standard one, you need to set the environment variable TERM1="VWIMAGEPATH"VWIMAGEPATH to set the path to your personal image. The name of an image file must be: TERM1="visual.im"visual.im.3 In VisualWorks, file in the script file vwimport.st. This file can be found in the user environment of ObjectTeam. For details on how to file in classes in VisualWorks, refer to the VisualWorks documentation.Editing Smalltalk filesAfter the classes have been filed in, you can use VisualWorks to further refine the source code, fill in methods and build an application. When you need to regenerate classes from the Object Design phase of ObjectTeam, remember to first export the appropriate classes back from VisualWorks to ObjectTeam. This ensures that the edits you might have made to your source files are not lost during (re)generation.See REFID="12958" TYPE="XREF-TEXTCOPY"Regenerating Code for more information.ID="27253"Editing (Generated) Source FilesIntroductionWhen code generation is successful, you can relate each generated Smalltalk file to a specific class in a CD of the Object Design phase.Smalltalk filesThe generated Smalltalk files serve as framework files. They contain a signature for each method (generated from the methods of the classes in the CDs), but the method bodies are empty. You need to fill in the following:n TERM1="C++" TERM2="function"TERM1="C++" TERM2="code from method"TERM1="method" TERM2="body"The bodies of the methods that are defined in the classes. No function is generated for the method, instead the following comment line is generated: "Not yet implemented"Note: You can fill in the method bodies manually or generate them automatically. To generate them automatically, in the CD, specify the method body as the value for the class property Tcl Method Implementation, as described in REFID="31627" TYPE="XREF-TEXTCOPY"Tcl Method Implementation Procedure.n The bodies of any user-defined constructors (see REFID="31904" TYPE="XREF-TEXTCOPY"Instance Creation (Constructors)) contained in your diagrams. The only code generated for the instance creation method is the following comment line: "Not yet implemented"Additionally, no initialize method is generated for user-defined constructors.n The user code parts, which are introduced by the following comment line:"Start user added code"Two ways to edit generated Smalltalk filesYou can edit the generated Smalltalk files in ObjectTeam or in VisualWorks.TERM1="source files" TERM2="editing generated -"TERM1="generated source file" TERM2="editing"How to edit source files in ObjectTeamΣ To edit source files in ObjectTeam:1 Move to System level in the Implementation phase.2 In the Information area, double-click on the source file that you want to edit, or select the source file and then select File | Edit.ObjectTeam creates a temporary file containing the working version of the selected Smalltalk file and opens that file in your default text editor. After you have edited, saved and closed the text file, ObjectTeam stores the updated text file back in the repository and the user environment, then deletes the temporary file.TERM1="source files" TERM2="editing generated -"TERM1="generated source file" TERM2="editing"How to edit source files in VisualWorksRefer to your VisualWorks documentation.Update diagramsDepending on the type of additions you have made to the source files, you may need to edit the CDs to reflect your changes. If you do so, be sure to use Check | Global Model to check the updated diagrams before regenerating the source files.ID="12958"Regenerating CodeTERM1="code regeneration" TERM2="edited C++ source file"Design changes and code changesObjectTeam supports incremental development. You can generate code from your models, edit that code, and regenerate the code without losing your changes. You can work with models during design and with code during implementation, shifting your focus between the two as necessary.It is, however, important that you make changes where appropriate.n Change the code when you are adding code that is not generated by ObjectTeam (for example, adding method bodies), or when you are making local changes to the code (for example, adding a missing attribute or operation to a class).n Change the model when you are changing the structure of the model (for example, if you are changing the class hierarchy or class associations), or when you are making global changes to the code (for example, if you are changing the name of a class, attribute, or operation).Editing generated Smalltalk filesThe generated Smalltalk files are framework files that you need to complete. Comments in the file indicate where you should add code, as described in REFID="27253" TYPE="XREF-TEXTCOPY"Editing (Generated) Source Files. When you regenerate a Smalltalk file, the code generator transfers the user-edited sections from the old file to the newly generated file. Note: The code generator preserves only the comment-delimited areas of the generated Smalltalk file. Changes you make to other areas of the generated file are lost when you regenerate the file.Editing the ObjectTeam modelIf you modify the ObjectTeam model, you typically regenerate the Smalltalk files. If, in the ObjectTeam model, you rename or delete an operation, the matching method in the generated Smalltalk file is no longer correct. ObjectTeam preserves the incorrect methods, but moves them to the category obsolete and issues the following warning:WARNING: method <methodName> is obsoleteRegeneration and VisualWorksIf you are editing the Smalltalk files in VisualWorks, to retain your changes, export the classes from VisualWorks back to ObjectTeam before regenerating the files. Then, after regenerating the files, (re)import the classes into VisualWorks. The following diagram provides an overview of the data and the processes involved:FILENAME="00840.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/st/stcodg.fm5.mif"How to regenerate codeΣ To regenerate code:1 In VisualWorks, file in the following script file:vwexport.stNote: This script file is generated by ObjectTeam during code generation and is stored in your user environment. When you file it in, it updates the appropriate files in the user environment of ObjectTeam.2 In ObjectTeam, move to the System level of the Implementation phase.3 Use Utilities | Generate Smalltalk, as described in REFID="39919" TYPE="XREF-TEXTCOPY"Generating Smalltalk Source Files, to regenerate the Smalltalk files.TERM1="Import From Previous Phase" TERM2="Selected"- To (re)generate code for specific files, select the files, then select Utilities | Generate Smalltalk| Selected.- To (re)generate all the files affected by the changes made in the ObjectTeam model, select Utilities | Generate Smalltalk | New.ObjectTeam opens a Monitor window for displaying log messages, then imports the files.4 In VisualWorks, file in the following script file:vwimport.stNote: This script file is generated by ObjectTeam during code generation and is stored in your user environment. When you file it in, it files in the classes from ObjectTeam to VisualWorks. For more information, see REFID="23542" TYPE="XREF-TEXTCOPY"Importing Classes in VisualWorks.TERM1="code regeneration" TERM2="regeneration markers"TERM1="regeneration markers"Regeneration markersTo achieve proper regeneration, the code generator inserts the following two regeneration markers in the Smalltalk files.Warning: Do not delete regeneration markers. Doing so can cause code regeneration to fail and user-defined code to be lost.n "Generated"This marker is inserted as the first comment in each generated method, except in the initialize and release methods. Changes you make in methods containing this marker are overwritten during regeneration. n "Start user added code"The code after this marker is part of the user code part. It is inserted in the following kinds of methods:- user-defined methods with generated code- initialize methods- release methodsAll the code you add after this marker is preserved during code regeneration, including temporary variables. However, code that you add before this marker may be overwritten during code regeneration by the value of the Free Text property.Exception: Regeneration preserves temporary variable declarations.Example of user-defined codeThe following piece of code shows a simple user-defined implementation of the method printAmount in the class Account:FILENAME="00841.unk" ORIGFILE="pics/cad_ex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stcodg.fm5.mif"...!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''misc'!printAmount Transcript show: 'The amount is: ', amountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'printString; cr! !...This code is retained during code regeneration, as shown below.Example of regenerationThe following example shows the regenerated code after the data attribute creditlimit has been added to the class Account in ObjectTeam. The code changes resulting from this edit are printed in bold; the preserved user edits (from the previous example) are printed in italics. FILENAME="00842.unk" ORIGFILE="pics/cad_ex2.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stcodg.fm5.mif""Generated from ObjectTeam Project: Smalltalk System: sys"Object subclass: #Account instanceVariableNames: 'amount creditLimit' classVariableNames: '' poolDictionaries: '' category: 'sys'!!Account class methodsFor: 'instance creation'!new "Generated" ^super new initialize! !!Account methodsFor: 'initialize-release'!release super release. "Start user added code"!initialize "Start user added code"! !!Account methodsFor: 'accessing'!amount "Generated" ^amount!creditLimit "Generated" ^creditLimit! !!Account methodsFor: 'misc'!printAmountTranscript show: 'The amount is: ', amountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'printString; cr! !!Account methodsFor: 'modifying'!amount: anAmount "Generated" amount := anAmount!creditLimit: acreditLimit "Generated" creditLimit := acreditLimit! !Chapter 3 TERM1="code generation"TERM1="Smalltalk" TERM2="code generation"ID="17827"Mapping Modeling Data to SmalltalkTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for SmalltalkIn this chapterThis chapter explains how particular parts of classes and class specifications result in particular parts of Smalltalk code. First we explain some principles of the code generation process. The core of this chapter is devoted to the relationship between class specifications and the generated code.This chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13241" TYPE="XREF-TEXTCOPY"Introduction 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16381" TYPE="XREF-TEXTCOPY"Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11934" TYPE="XREF-TEXTCOPY"Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39204" TYPE="XREF-TEXTCOPY"Operations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'20COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31904" TYPE="XREF-TEXTCOPY"Instance Creation (Constructors) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'34COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23063" TYPE="XREF-TEXTCOPY"Instance Removal 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'40COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23200" TYPE="XREF-TEXTCOPY"Generalizations (Inheritance) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'41COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13146" TYPE="XREF-TEXTCOPY"Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'43COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27736" TYPE="XREF-TEXTCOPY"Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'60COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34351" TYPE="XREF-TEXTCOPY"Link Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'78ID="13241"IntroductionWhat is code generationDuring design, you define a class more precisely by specifying its features and its associations, for example:FILENAME="00843.unk" ORIGFILE="pics/cad_ex3.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Code generation in ObjectTeam is the process of translating this model into program code. The ObjectTeam Shell (otsh) translates the CDs and their related CDMs into Smalltalk source files. Code generation involves the following steps:n The otsh itself translates the CDs and the CDMs that are stored in the repository into a Code Generation model.n This Code Generation model is translated into Smalltalk source code.This section focuses on how you can influence the code generator using properties and specific constructions in your model.NotationIn this chapter the following notation is used:COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"NotationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ExplanationCOLNAME="1" VALIGN="TOP" MOREROWS="0"nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"<name>COLNAME="2" VALIGN="TOP" MOREROWS="0"Smalltalk nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"<cap <name>>COLNAME="2" VALIGN="TOP" MOREROWS="0"<name> with a capital as first character COLNAME="1" VALIGN="TOP" MOREROWS="0"data type names only:COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"<map <name>>COLNAME="2" VALIGN="TOP" MOREROWS="0"<name> if name is not a standard typeif name is a standard type, the Smalltalk name to which name is mapped (see REFID="40763" TYPE="XREF-TEXTCOPY"set Method (write))COLNAME="1" VALIGN="TOP" MOREROWS="0"arguments only:COLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"<argName <name>>COLNAME="2" VALIGN="TOP" MOREROWS="0"a<cap <name>> if the first character of name is a consonantan<cap <name>> if the first character of name is a vowelID="16381"ClassesTERM1="class"TERM1="class" TERM2="syntax"SyntaxUse the following syntax when you specify the name of a class:FILENAME="00844.tif" ORIGSEQ="46" ORIGTYPE="I" ORIGDOC="../../sources/st/stnpers.fm5.mif"The name of a generated class is:<cap <className>>Derived TERM1="class" TERM2="derived"classFor the code generator, there is no difference between a "normal" class and a derived class; a leading forward slash in the class name will be ignored.Abstract TERM1="class" TERM2="abstract"classesIn ObjectTeam, a class is considered abstract when one of its operations is abstract. For an abstract class, different instance creation methods are generated (see REFID="10603" TYPE="XREF-TEXTCOPY"Classes with abstract operations). Enum TERM1="class" TERM2="enum"classesThe C++ generator of ObjectTeam supports Enum classes (see the ObjectTeam Code Generation Guide for C++). The Smalltalk generator, however, doesn't. If you try to construct an Enum class in ObjectTeam, the code generator issues the following error message during code generation:ERROR: enums not supported by Smalltalk, not generating for <className>No code is generated for the class.Typedef TERM1="class" TERM2="typedef"classesAnother special class that can be used in combination with the C++ generator of ObjectTeam, but not with the Smalltalk generator, are Typedef classes (see the ObjectTeam Code Generation Guide for C++).For classes that are constructed as Typedef classes, the Smalltalk generator generates code as if the class were a "normal" class, i.e. a class with just one instance variable is generated.ID="18403"ExampleA class symbol from a CD results in one Smalltalk file. In the following example, all the properties (class, attribute, and method) are default properties; they have not been changed to something else in the Object Design phase. For a description of the effect class properties have on generated code, see REFID="12964" TYPE="XREF-TEXTCOPY"Class Properties.FILENAME="00845.unk" ORIGFILE="pics/cad_ex1.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif""Generatedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'fromname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectTeamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Project:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Smalltalkname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'System:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sys"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Objectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'subclass:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''amount'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classVariableNames:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'''name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'poolDictionaries:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'''name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'category:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''sys'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''instancename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'creation'!newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^supername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'initialize!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''initialize-release'!releasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'supername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'release.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Startname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'addedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'code"!initializename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Startname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'addedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'code"!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'''accessing'!amountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^amount!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''misc'!printAmountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Notname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'yetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'implemented"!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!!Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodsFor:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''modifying'!amount:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'anAmountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'amountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'anAmount!name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'!ID="12964"Class TERM1="class properties"TERM1="properties" TERM2="class"PropertiesID="10976"How to specify propertiesYou can specify a number of properties that influence the code generation. Properties are specified in CDs.Σ To specify a property:1 Select one (or more) classes in a CD of the ObjectDesign phase.2 Select Item | Edit Properties.The Edit Properties dialog box appears.3 Select the object (class, data attribute, operation, data type, generalization, association) whose properties you want to edit.Make sure all the following requirements are met, then press the TERM1="Define Item"Define Item button to proceed:- There are no attributes or properties specified for the selected class.- If the scope of the class is Phase, the class does not exist anywhere else in the current phase.- If the scope of the class is System, the class does not exist anywhere else in the current system.4 Select the tab Text to edit the property Free Text or select the tab Misc to edit all the other available properties.FILENAME="00846.unk" ORIGFILE="pics/prpclas.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"5 Fill in the properties and save them by pressing the OK button.Which class properties can you specifyThe following class properties affect the code generation:n REFID="26618" TYPE="XREF-TEXTCOPY"Free Textn REFID="22494" TYPE="XREF-TEXTCOPY"External Class Sourcen REFID="35098" TYPE="XREF-TEXTCOPY"Inheritance Typen REFID="38554" TYPE="XREF-TEXTCOPY"Class CategoryThese properties are briefly discussed on the following pages.TERM1="free text" TERM2="class property"ID="26618"Free TextWhat you specify as free text appears as Class comments in the generated Smalltalk file. For example:FILENAME="00847.unk" ORIGFILE="pics/prptext.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...Account comment: 'This free text was entered for the Class Account in the Object Design phase'!...If the free text contains single quotes, the code generator removes these and issues the following warning:WARNING: Removed ' from comment for <className>TERM1="external class source" TERM2="class property"ID="22494"External Class SourceSometimes it is useful to model classes for which source files are already available. With the property External Class Source, you can specify the name and the path of the intended source file(s) files.During code generation, the contents of the specified file(s) are copied to the file <className>.st and no code is generated for the class.If the code generator fails to locate the specified file, it issues the following error message:ERROR: class <className>: external class source file <fileName> not foundTERM1="inheritance type" TERM2="class property"ID="35098"Inheritance TypeA Class can be derived from its super class in different ways, using different keywords in the class definition. With the property Inheritance Type you can specify the keyword that must be generated:COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Property ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"Generated KeywordCOLNAME="1" VALIGN="TOP" MOREROWS="0"regular (default)COLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="subclass"subclassCOLNAME="1" VALIGN="TOP" MOREROWS="0"variableCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="variableSubclass"variableSubclassCOLNAME="1" VALIGN="TOP" MOREROWS="0"variableByteCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="variableByteSubclass"variableByteSubclassCertain combinations of inheritance of this class and superclass may not be accepted by Smalltalk and result in either of the following messages:WARNING: Class <className> with <inheritanceType> inheritance and superclass <superClassName> with <superInheritanceType> inheritance may not be accepted by Smalltalk.orWARNING: Class <className> with variableByte inheritance and instance variables may not be accepted by Smalltalk.Example:FILENAME="00848.unk" ORIGFILE="pics/prpinht.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...Object variableSubclass: #Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'amount'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classVariableNames: ''name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'poolDictionaries: ''name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'category: 'sys'!...ID="38554"Class CategoryWith this property you can specify the name of the class category. This category will appear in the class definition. Example:FILENAME="00849.unk" ORIGFILE="pics/prpclcat.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...Object subclass: #Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'amount'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classVariableNames: ''name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'poolDictionaries: ''name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'category: 'myCategory'!...Tip: If the Class Category has not been specified, either of the following category names is used:n SystemName (default)n DiagramNameYou can set the default using the Implementation System property Default Smalltalk Class Category Name. See REFID="25358" TYPE="XREF-TEXTCOPY"Default Smalltalk Class Category Name for details.ID="11934"Data TERM1="data attribute"AttributesSyntaxUse the following syntax when you specify the TERM1="data attribute" TERM2="syntax"data attributes of a class:FILENAME="00850.tif" ORIGSEQ="23" ORIGTYPE="I" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generation of data attributesDuring Smalltalk code generation, data attributes are translated into the following Smalltalk variables:COLS="2"COLNAME="1" COLWIDTH="277p"COLNAME="2" COLWIDTH="171p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeam AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Smalltalk VariableCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class (Static) AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class variableCOLNAME="1" VALIGN="TOP" MOREROWS="0"Non-static AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Instance variableCOLNAME="1" VALIGN="TOP" MOREROWS="0"(Class) Attribute for which the property Pool Dictionary is switched on (see REFID="18372" TYPE="XREF-TEXTCOPY"Pool dictionary)COLNAME="2" VALIGN="TOP" MOREROWS="0"Pool dictionaryCOLNAME="1" VALIGN="TOP" MOREROWS="0"Key attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"mandatory attribute (see REFID="21889" TYPE="XREF-TEXTCOPY"Mandatory attributes)For all class variables and instance variables, the following methods are generated:n REFID="27429" TYPE="XREF-TEXTCOPY"get Method (read)Returns the value of the variable.n REFID="40763" TYPE="XREF-TEXTCOPY"set Method (write)Sets the variable to an argument.ID="27429"get Method (read)The Smalltalk generator generates a get method for every (class) attribute that is not a pool dictionary. By default, this method is placed in the category accessing. If you want the code generator to insert the get method in the category private, use the property Attribute Access (see REFID="21571" TYPE="XREF-TEXTCOPY"Attribute Access).The generated get method equals the name of the attribute in ObjectTeam. In the case of class variables, the first character of the attribute name is capitalized, if it is not already.Example of get methodsHere is an example of the generated get (read) methods for class (static) attributes and non-static attributes.FILENAME="00851.unk" ORIGFILE="pics/getmeth.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"... Object subclass: #ClassExamplename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'name'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classVariableNames: 'MaxAge'...!ClassExample class methodsFor: 'accessing'!MaxAge...!ClassExample methodsFor: 'accessing'!name...ID="40763"set Method (write)The Smalltalk generator also generates a set method for every (class) attribute that is not a pool dictionary. By default, this method is placed in the category modifying. If you want the code generator to insert the set method in the category private, use the property Attribute Access (see REFID="21571" TYPE="XREF-TEXTCOPY"Attribute Access).The generated set method equals the name of the attribute in ObjectTeam, followed by a colon and an argument:COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="2" VALIGN="TOP" MOREROWS="0"SmalltalkCOLNAME="1" VALIGN="TOP" MOREROWS="0"<attributeName>COLNAME="2" VALIGN="TOP" MOREROWS="0"<variableName>:<argument>How the argument is generated depends on the type you have specified for the attribute in ObjectTeam. The following table shows the various possibilities:COLS="2"COLNAME="1" COLWIDTH="138p"COLNAME="2" COLWIDTH="315p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="2" VALIGN="TOP" MOREROWS="0"SmalltalkCOLNAME="1" VALIGN="TOP" MOREROWS="0"<attributeName>(no type specified)COLNAME="2" VALIGN="TOP" MOREROWS="0"<variableName>:<argName <variableName>>COLNAME="1" VALIGN="TOP" MOREROWS="0"<attributeName>:<standardType>COLNAME="2" VALIGN="TOP" MOREROWS="0"<variableName>:<argName <map <type>>COLNAME="1" VALIGN="TOP" MOREROWS="0"<attributeName>:<non-standardType>COLNAME="2" VALIGN="TOP" MOREROWS="0"<variableName>:<argName <non-standardType>>Note that specifying attribute types is not required in Smalltalk; instance and class variables are mainly specified by their name. Therefore, ObjectTeam does not check on types during code generation or checking.If, however, you do want to specify a type, you can use standard types. A standard type is an ObjectTeam type that is mapped to a VisualWorks Smalltalk class. This mapping is defined in the following customization file:M4_home/etc/l_st/lang_typesFor details on this file, see REFID="24015" TYPE="XREF-TEXTCOPY"Customizing Data Types.Example of set methodsHere is an example of the generated set (write) methods for class (static) attributes and non-static attributes. For the class (static) attribute, a standard type is defined; for the first non-static attribute a non-standard type is defined and for the second non-static attribute no type is defined:FILENAME="00852.unk" ORIGFILE="pics/setmeth.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"... Object subclass: #ClassExamplename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'name gender'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'classVariableNames: 'MaxAge'...!ClassExample class methodsFor: 'modifying'!MaxAge: aSmallInteger...!ClassExample methodsFor: 'modifying'!name: aNameType...gender: aGender...Initial value for non-static TERM1="attribute" TERM2="initial value for non-static -"attributesIf you specify an initial value for a non-static data attribute, the code generator sets the instance variable to this initial value in the corresponding initialize method.However, if the corresponding initialize method is not generated (see REFID="31904" TYPE="XREF-TEXTCOPY"Instance Creation (Constructors)), the initial value is not used in the Smalltalk code.Example (initialize method is generated):FILENAME="00853.unk" ORIGFILE="pics/ininstat.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!DataAttribEx methodsFor: 'initialize-release'!...initializename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'age := 65.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"! !...Initial value for class (static) TERM1="attribute" TERM2="initial value for static -"attributesIf you specify an initial value for a class attribute, the code generator sets the corresponding class variable to this initial value when the class is filled in.Example:FILENAME="00854.unk" ORIGFILE="pics/inistat.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...DataAttribEx MaxAge: 65!However, if the property Attribute Access is set to None, the initial value is not used. In that case the code generator issues the following warning:WARNING: Cannot generate initial value expression for class variable <variableName>: no write access.ID="21889"Mandatory TERM1="key attribute" TERM2="argument for the initialize method"attributesA mandatory attribute is an attribute that is one of the following:n TERM1="key attribute" TERM2="initial value"key attributeA key attribute is an attribute with a leading asterisk (*)n TERM1="non-nullable attribute" TERM2="initial value"non-nullable attribute (see REFID="27928" TYPE="XREF-TEXTCOPY"Nullable)If an attribute (static or non-static) is mandatory and the initialize method is generated (see REFID="31904" TYPE="XREF-TEXTCOPY"Instance Creation (Constructors)), an argument is generated for the initialize method to specify its initial value. The attribute is set to the value supplied by this argument when the initialize method is executed, e.g. by explicit initialization. If the initialize method is not generated, mandatory attributes are not set. If a non-static attribute is mandatory and has an initial value, it is set to the initial value when the class is filled in. Each time the initialize method for an object of this class is called, the resulting class variable is set to the argument value supplied in the initialize method.If a class (non-static) attribute is mandatory and has an initial value, it is set to:n the value supplied by the argument to initialize (if the argument value is not nil)n the initial value (if the argument value is nil)Data Attribute PropertiesHow to specify data attribute propertiesSee REFID="10976" TYPE="XREF-TEXTCOPY"How to specify properties.Part of the Edit Properties dialog box for the class Product:FILENAME="00855.unk" ORIGFILE="pics/prpmisc.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Which data attribute properties can you specifyThe following data attribute properties affect non-persistent code generation:n REFID="26618" TYPE="XREF-TEXTCOPY"Free Textn REFID="27928" TYPE="XREF-TEXTCOPY"Nullablen REFID="18372" TYPE="XREF-TEXTCOPY"Pool dictionaryn REFID="21571" TYPE="XREF-TEXTCOPY"Attribute AccessThese properties are briefly discussed on the following pages.ID="40510"Free TERM1="free text" TERM2="attribute property"TextWhat you specify as free text appears as Class comments in the generated Smalltalk file. For example:Account comment: 'amount: This free text was entered for the attribute amount of the class Account'!If the free text contains single quotes, the code generator removes these and issues a warning.ID="27928"NullableThis property can have one of the following values:n yes (default)n noA TERM1="data attribute" TERM2="nullability"TERM1="nullability" TERM2="of data attribute"nullable attribute is an attribute that doesn't necessarily have a value.If an attribute must have a value, specify the value no. Then, the code generator generates a parameter to initialize the attribute in the initialize method.Below, samples of generated source files are displayed. The class from which this code is generated is the same as the one displayed in the section REFID="18403" TYPE="XREF-TEXTCOPY"Example, but the property Nullable of the attribute amount is set to no:FILENAME="00856.unk" ORIGFILE="pics/prpnull.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!Account class methodsFor: 'instance creation'!... amount: anAmountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^super new initializeAmount: anAmount! !...!Account methodsFor: 'initialize-release'!... initializeAmount: anAmountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'amount := anAmount.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"! !...ID="18372"Pool dictionaryPool dictionaries specify special instance variables that can be shared amongst all classes that use the same pool dictionary. You can specify whether or not a variable must be a pool dictionary by specifying this property for the corresponding data attribute. By default, an instance variables is not a pool dictionary. For pool dictionaries, the first character of the attribute name is capitalized, if it is not already.The name of the pool dictionary is included in the class definition; for example:FILENAME="00857.unk" ORIGFILE="pics/prppool.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...Object subclass: #Accountname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'poolDictionaries: 'Amount'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...No methods are generated for pool dictionaries. You have to define your own methods to work with pool dictionaries.Warning: Note that pool dictionaries must have been declared in VisualWorks before classes can be filled in.TERM1="attribute access" TERM2="property"TERM1="property" TERM2="attribute access"ID="21571"Attribute AccessIn Smalltalk, it is not possible to specify or influence the accessibility of methods and attributes. In ObjectTeam, however, you can specify that the methods to get (=read) and set (=write) an attribute be inserted in a category called private or protected.You can select the following values for Read Access as well as for Write access: Public, Private, None.n Public (default)The methods to get (Read) the attribute are generated in the category TERM1="accessing" TERM2="method category"TERM1="category" TERM2="accessing"accessing; the methods to set (Write) the attribute are generated in the category TERM1="modifying" TERM2="method category"TERM1="category" TERM2="modifying"modifying. In the following example, both Read and Write Access are set to Public:FILENAME="00858.unk" ORIGFILE="pics/prpacpub.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!Account methodsFor: 'accessing'!amount...!Account methodsFor: 'modifying'!amount:anAmount...n Private The methods to get (Read) or set (Write) the attribute are generated in the category TERM1="private" TERM2="method category"TERM1="category" TERM2="private"private. In the following example, Read Access is set to Private:FILENAME="00859.unk" ORIGFILE="pics/prpacpri.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!Account methodsFor: 'private'!amount...amount:anAmount...n None No method to get (Read) or set (Write) the attribute is generated.You can make any possible combination of Read and Write Access property values, i.e.:COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Read Access (Get)COLNAME="2" VALIGN="TOP" MOREROWS="0"Write Access (Set)COLNAME="1" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="1" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="1" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="1" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoneTERM1="operation"ID="39204"OperationsTERM1="operation" TERM2="syntax"SyntaxUse the following syntax when you specify the TERM1="operation" TERM2="syntax"TERM1="class" TERM2="operation"operations of a class:FILENAME="00860.tif" ORIGSEQ="7" ORIGTYPE="I" ORIGDOC="../../sources/st/stnpers.fm5.mif"How TERM1="misc" TERM2="method category"TERM1="category" TERM2="misc"operations are translatedClass (static) operations in ObjectTeam are translated into class methods. By default, these methods are inserted in the class method category misc. The code generator treats class operations used to define a constructor differently (see REFID="31904" TYPE="XREF-TEXTCOPY"Instance Creation (Constructors)).Non-static operations are translated into instance methods. By default, these methods are inserted in the method category misc. You can specify your own method category with the property Method Category (see REFID="27319" TYPE="XREF-TEXTCOPY"Method Category).Category headers specify the class and the name of the category. This header is followed by a list of method definitions that fall in the category. Each method definition consists of a message pattern and its implementation. The name of a Smalltalk method is not just one name as in most programming languages, but rather a message pattern, which may consist of several parts.RestrictionsIn combination with the Smalltalk code generator, you can specify argument types, result types and default values for parameters, but keep the following in mind:n result types are never used in the generated coden argument types, like attribute types, are used for naming purposes onlyn default values result in code that is not accepted by VisualWorksTERM1="parameter" TERM2="in operations"TERM1="operation" TERM2="parameter"ParameterThe first part of a Smalltalk message pattern is the message name. If the message has a parameter, the message name is followed by a colon and the parameter name. For example:FILENAME="00861.unk" ORIGFILE="pics/cl_parm.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!ExampleClass1 methodsFor: 'misc'!operationName: aParameterNamename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...If the message has more than one parameter, and the type of the parameter is not available, each subsequent parameter is specified by a new name followed by a colon and the parameter name.In other words, if the parameter is specified without a type, the code generator generates a pair parameter name - message selector from the parameter name.For example:FILENAME="00862.unk" ORIGFILE="pics/cl_parms.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!ExampleClass2 methodsFor: 'misc'!operationName: aParameterName1 parameterName2: aParameterName2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...These new names are part of the method as they are used to select the right method for a message.TERM1="parameter type" TERM2="in operations"TERM1="operation" TERM2="parameter type"Parameter typesIn ObjectTeam, you can define a parameter type for parameters. Parameters for which a type is specified are generated as follows:FILENAME="00863.unk" ORIGFILE="pics/cl_pmtyp.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!ExampleClass3 methodsFor: 'misc'!operationName: aParameter1Name parameter2Name: aParameterTypename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...TERM1="abstract operation"TERM1="operation" TERM2="abstract"Abstract operationBy adding the following text to an operation, you indicate that it must be considered an abstract operation:{abstract} The method that is generated for an abstract operation calls the Object method subClassResponsibility. This method raises an error when called:FILENAME="00864.unk" ORIGFILE="pics/cl_abstr.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!ExampleClass methodsFor: 'misc'!methodNamename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'self subClassResponsibility....TERM1="generate print methods"TERM1="print method" TERM2="default"TERM1="default print method"ID="22269"Default Print methodsDepending on the Smalltalk Code Generation properties (see REFID="33329" TYPE="XREF-TEXTCOPY"Changing Smalltalk Code Generation Properties), a default print method printOn is generated for every class.This print method prints the values of:n All the instance variables of the class.n All the instance variables of the objects associated to the class.An additional method printVars is generated to format output of the printOn method:Example:!Exampleclass methodsFor: 'printing'!printOn: aStreamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'super printOn: aStream.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'self printVars: aStream withIndent: 0!printVars: aStream withIndent: anIntegername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aStream cr; tab: anInteger; nextPutAll: 'att: ' displayString.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'att printOn: aStream! !These print methods provide very basic output, which may be useful while debugging code. After debugging, you may want to regenerate the code with the code generation property Generate Print Methods cleared.If you have modeled user-defined operations with the same names as the default print methods, the code generator does not generate the default print methods and issues the following warning:WARNING: Not generating printOn and printVars: already defined by userName TERM1="method" TERM2="name conflict"conflictsName conflicts occur when generated methods have the same name as user defined methods. For instance, the code generator ignores a user-defined constructor called $new() and issues a warning:FILENAME="00865.unk" ORIGFILE="pics/cl_clash.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...WARNING: Default constructor overrides user defined constructor...The code generator also ignores a user-defined constructor called $create() when a redefined new method (see REFID="37904" TYPE="XREF-TEXTCOPY"Redefined new method) is generated:FILENAME="00866.unk" ORIGFILE="pics/cl_ctor2.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"FILENAME="00867.unk" ORIGFILE="pics/prpnnull.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...WARNING: user defined constructor overridden by automatically generated new...Operation PropertiesHow to specify operation propertiesSee REFID="10976" TYPE="XREF-TEXTCOPY"How to specify properties.The Edit Properties dialog box for the class Product:FILENAME="00868.unk" ORIGFILE="pics/prpmeth.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Which operation properties can you specifyThe following operation properties affect non-persistent code generation:n REFID="18768" TYPE="XREF-TEXTCOPY"Free Textn REFID="31627" TYPE="XREF-TEXTCOPY"Tcl Method Implementation Proceduren REFID="23244" TYPE="XREF-TEXTCOPY"Accessn REFID="27319" TYPE="XREF-TEXTCOPY"Method CategoryID="18768"Free TERM1="free text" TERM2="operation property"TERM1="property" TERM2="free text"TextWhat you specify as free text appears in the generated Smalltalk file as comments between the method header and the implementation. For example:...methodNamename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"This free text was entered for the methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodName"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...If the free text contains single quotes, the code generator removes these and issues a warning.TERM1="Tcl method implementation procedure" TERM2="operation property"TERM1="property" TERM2="Tcl method implementation procedure"TERM1="Tcl method implementation procedure" TERM2="operation property"TERM1="property" TERM2="Tcl method implementation procedure"ID="31627"Tcl Method Implementation ProcedureUse the Tcl Method Implementation Procedure property to generate code for a method automatically. You do this by specifying a call to a method of a user-defined Object Tcl class. For more information on Object Tcl, refer to the ObjectTeam Repository Interface Guide.The syntax for this call is:[<ObjectTcl_className>::]<methodName>The user-defined Object Tcl class needs to be derived from the class STGOperationD. The definition of this class can be found in the file M4_home/tcl/l_st/TERM1="stgclasses.tcl"stgclasses.tcl.If you call your user-defined class STGCustom, you don't have to specify the ObjectTcl_className in the call; only the methodName will do.You define a user-defined Object Tcl class in a file. If you have specified a valid method call, the body of the method is automatically generated every time you (re)generate code for the class. If the code generator fails to find the generator method, it issues the following error message:ERROR: Tcl method defined but class <className> not found for operation <operationName>If the user-defined class is not (directly) derived from the class STGOperationD, the code generator issues the following error message:ERROR: Tcl generator class <className> must be derived from STGOperationDThe signature of the generator method must adhere to the ObjectTcl syntax (see the ObjectTeam Repository Interface Guide). Otherwise, an error message is issued:ERROR: when calling <methodName>: <Tcl error message>The signature of the generator method, for instance, must follow the syntax:method <className>::<methodName> {this methodImpl}Warning: In earlier versions of the Smalltalk code generator the user-defined class had to be derived from the class STGOperation, instead of from STGOperationD. If the code generator detects such a class, it issues the following error message:ERROR: Tcl generator class <className> must be upgraded so that it is derived from STGOperationD (instead of STGOperation)Example of Tcl Method Implementation ProcedureHere is an example of a user-defined class definition:Class STGExample : {STGOperationD} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generateSomething}method STGExample::generateSomething {this methodImpl} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'foreach attrib [[$this ooplClass] dataAttrSet] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$methodImpl addExpression "[$attrib getName] printOn: aStream"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}}The method generateSomething generates a method that calls printOn for every attribute of a class. In the user-defined class, the following methods are called:COLS="2"COLNAME="1" COLWIDTH="313p"COLNAME="2" COLWIDTH="136p"COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"ModelCOLNAME="1" VALIGN="TOP" MOREROWS="0"OPOperation::ooplClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"OOPL Model*COLNAME="1" VALIGN="TOP" MOREROWS="0"OPClass::dataAttrSetCOLNAME="2" VALIGN="TOP" MOREROWS="0"OOPL Model*COLNAME="1" VALIGN="TOP" MOREROWS="0"OPDataAttr::getNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"OOPL Model*COLNAME="1" VALIGN="TOP" MOREROWS="0"STMethodImplementation::addExpressionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Language Model*See: Object¡Team for OMT Code Generation Guide for C++.If we now define a class like the one depicted below, we can specify the method STGExample::generateSomething for the property Tcl Method Implementation Procedure. The generated code looks like this:FILENAME="00869.unk" ORIGFILE="pics/cl_tclim.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"FILENAME="00870.unk" ORIGFILE="pics/prptclim.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Code generated for the method printInstVars:...!Example methodsFor: 'misc'!printInstVars: aStreamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'a printOn:aStream! !...ID="23244"AccessIn Smalltalk, it is not possible to specify or influence the accessibility of methods and attributes. In ObjectTeam, however, you can specify that a method be inserted in a category called private or protected. You do that through the method property Access. The following values are available:n Public (default)n Protectedn PrivateID="31329"VisibilityYou can display the access specification of methods in your diagram by checking Options | Show Visibility in the Class Diagram Editor. Method names will then be displayed with the following leading characters indicating the method's access specification:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="318p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special characterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"+COLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"#COLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"-COLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateThese special characters can also be used to set the access specification of methods. Typing a hatch sign (#) before a method name will set the access specification of the method to Protected, for example. Warning: The special characters only work if the menu entry Options | Show Visibility in the Class Diagram Editor has been checked. Otherwise, the special characters will just be regarded as part of the method name.ID="27319"Method TERM1="method category" TERM2="operation property"TERM1="properties" TERM2="method category"CategoryBy default, the code generator inserts all user-defined methods in the method category misc. With this property you can specify another category name. Example:FILENAME="00871.unk" ORIGFILE="pics/prpmcat.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!Oprpry methodsFor: 'myCategory'!oprname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...Which TERM1="parameter" TERM2="properties"TERM1="properties" TERM2="parameter"parameter properties can you specifyThe following parameter properties affect Smalltalk code generation:n Default valueTERM1="default value" TERM2="parameter property"ID="33309"Default valueIf you define a default value for a parameter, the parameter is set to this value when the actual parameter value is nil. Example:FILENAME="00872.unk" ORIGFILE="pics/cl_pmval.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"FILENAME="00873.unk" ORIGFILE="pics/prppmval.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!ExampleClass methodsFor: 'misc'!opr: aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aParam isNil ifTrue: [aParam := 1968].name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !Warning: This code will not be accepted by VisualWorks.Examples: Operations and SmalltalkThe following table shows various operations you can specify in classes and the most significant part of the resulting Smalltalk code. FILENAME="00874.unk" ORIGFILE="pics/cadopers.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!Oper class methodsFor: 'misc'!Oper6name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...!Oper methodsFor: 'misc'!Oper1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!Oper2: anI j: aJname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!Oper3: anIntegername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!Oper4name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!Oper5: anIntegername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!Oper7name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'self subClassResponsibility.TERM1="binary selector"TERM1="operator"ID="19254"Binary SelectorsIntroductionYou can define or redefine binary selectors (Smalltalk operators) in the classes of CDs. In a number of cases you can use the binary selector's syntax straight away; in other cases you must use specific ObjectTeam operators' syntax. This ObjectTeam operators' syntax is translated into Smalltalk binary selectors during the code generation.Translation tableThe table below displays at the left hand side what you have to specify in ObjectTeam to get the Smalltalk binary selectors displayed at the right hand side.There are three special characters that ObjectTeam does not allow. For these special characters, a special indication must be used:COLS="2"COLNAME="1" COLWIDTH="165p"COLNAME="2" COLWIDTH="283p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special CharacterCOLNAME="2" VALIGN="TOP" MOREROWS="0"Indication In ObjectTeamCOLNAME="1" VALIGN="TOP" MOREROWS="0",COLNAME="2" VALIGN="TOP" MOREROWS="0"COMMACOLNAME="1" VALIGN="TOP" MOREROWS="0"/COLNAME="2" VALIGN="TOP" MOREROWS="0"DIVCOLNAME="1" VALIGN="TOP" MOREROWS="0"=COLNAME="2" VALIGN="TOP" MOREROWS="0"EQHere is the complete list of special characters in Smalltalk:COLS="2"COLNAME="1" COLWIDTH="246p"COLNAME="2" COLWIDTH="202p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Specify In Class Of CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Result In SmalltalkCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator-(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"- aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator+(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"+ aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorDIV(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"/ aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator\(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"\ aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator*(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"* aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator~(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"~ aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator>(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"> aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator<(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"< aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorEQ(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"= aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator@(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"@ aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator%(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"% aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator|(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"| aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator&(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"& aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator?(param)COLNAME="2" VALIGN="TOP" MOREROWS="0"? aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operator!(params)COLNAME="2" VALIGN="TOP" MOREROWS="0"! aParamCOLNAME="1" COLSEP="0" VALIGN="TOP" MOREROWS="0"operatorCOMMA(param)COLNAME="2" VALIGN="TOP" MOREROWS="0", aParamAll the special characters can be specified once or twice in ObjectTeam, except for the minus sign (-), which can only be specified once.The code generator checks the syntax of operator specifications. The special characters used must comply with the syntax for a binary selector.In the case of an incorrect operator specification, the code generator does not generate the method name and issues the following error message:ERROR: invalid syntax for special operator <operatorName>, special characters ignoredIf there is not exactly one parameter specified for the operator, the method name is not generated either and the following error message is issued:ERROR: special operator <operatorName> must have exactly one argument, special characters ignoredExampleBelow, an example of a class with some operator specifications is displayed, together with the generated code:FILENAME="00875.unk" ORIGFILE="pics/cl_opers.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!OperatorExamples methodsFor: 'misc'!- aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!\\ aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!+ aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!* aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!, aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!// aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!= aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...TERM1="constructor"TERM1="instance creation"ID="31904"Instance Creation (Constructors)ID="13870"Default TERM1="constructor" TERM2="default"constructorsSmalltalk does not support constructors or destructors that are called automatically. However, in ObjectTeam, you can define a default constructor, such as depicted here:FILENAME="00876.unk" ORIGFILE="pics/cl_ctor2.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"TERM1="$create"Note that you don't have to specify this default constructor in the CD. As long as the class has more than one attribute, the code generator assumes a default constructor if it is not specified.Note also that the code generator considers a constructor with brackets, but without parameters as a user-defined constructor, i.e., $create().Default constructors result in the generation of two methods:n Instance creation TERM1="method" TERM2="instance creation"TERM1="new method"method The default category for this class method is instance creation. Example:...!CtorEx2 class methodsFor: 'instance creation'!new name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^super new initialize! !...The method new calls the initialize method to do the initialization of the instance variables.n Initialize TERM1="method"TERM1="initialize"TERM1="initialize"method The default category for this instance method is initialize-release. Example:!CtorEx2 methodsFor: 'initialize-release'!...initialize name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"...If there are any mandatory attributes or associations involved, more functionality is added to the method initialize. See REFID="21889" TYPE="XREF-TEXTCOPY"Mandatory attributes for details. User-defined TERM1="constructor" TERM2="user-defined"constructorsBesides default constructors, you can define user-defined constructors by supplying the TERM1="$create()"$create method with brackets and/or parameters, e.g.:FILENAME="00877.unk" ORIGFILE="pics/cl_ctor3.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"The differences with default constructors are that:n No initialize method is generated.n No code is generated for the instance creation method. Example:...!CtorEx3 class methodsFor: 'instance creation'! param: aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...Classes with two TERM1="constructor" TERM2="classes with two -"constructorsThe following example shows a sub class and a super class. The super class has two user-defined constructors:FILENAME="00878.unk" ORIGFILE="pics/cl_ctor4.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"The first constructor determines inheritance:...!CtorEx4 class methodsFor: 'instance creation'!param1: aParam1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!param2: aParam2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"! !...!SubEx4 methodsFor: 'initialize-release'!... initializeParam1: aParam1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'super initializeParam1: aParam1.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"! !...In the following example, the user-defined constructor of the super class has a parameter param specified:FILENAME="00879.unk" ORIGFILE="pics/cl_ctor5.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"The default constructor determines inheritance:...!CtorEx5 class methodsFor: 'instance creation'!param: aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^super new initialize! !...!CtorEx5 methodsFor: 'initialize-release'!... initializename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"! !!SubEx5 methodsFor: 'initialize-release'!... initializename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'super initialize.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"! !...In the following example, the user-defined constructor of the super class has a parameter param specified:FILENAME="00880.unk" ORIGFILE="pics/cl_ctor6.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"The user-defined constructor determines inheritance:...!CtorEx6 class methodsFor: 'instance creation'!param: aParamname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Not yet implemented"!newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^super new initialize! !!CtorEx6 methodsFor: 'initialize-release'!... initializename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"! !...ID="10603"Classes with abstract TERM1="operation" TERM2="abstract"operationsThe class in the following example contains a default constructor and an abstract operation:FILENAME="00881.unk" ORIGFILE="pics/cl_ctor7.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"The initialize method that is generated raises an error when called:...!CtorEx7 class methodsFor: 'instance creation'!newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(self class = CtorEx7) ifTrue:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[^self error: 'Cannot instantiate abstract class']name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifFalse: [^super new initialize]! !ID="37904"Redefined TERM1="new method" TERM2="redefined"new methodThe instance creation method new, which is generated for default constructors (see REFID="13870" TYPE="XREF-TEXTCOPY"Default constructors) usually calls the initialize method of the super class.TERM1="mandatory attribute" TERM2="and instance creation"TERM1="instance creation" TERM2="and mandatory attributes"However, under certain circumstances, an error message like the following is generated for the method new:...newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'self error: 'Cannot use new, use <selector_of_the_other_instance_creation_method>:'!...The other_instance_creation_method can be:n An instance method that is generated for an attribute that is either non-nullable (see REFID="27928" TYPE="XREF-TEXTCOPY"Nullable) or a key attribute.n An instance method that is generated for a mandatory association (see REFID="21023" TYPE="XREF-TEXTCOPY"Association: one (optional) - one (mandatory)).Example of a non-nullable attribute:FILENAME="00882.unk" ORIGFILE="pics/cl_ctor2.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"FILENAME="00883.unk" ORIGFILE="pics/prpnnull.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!CtorEx2 class methodsFor: 'instance creation'!newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'self error: 'Cannot use new, use dum1:'!dum1: aDum1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^super new initializeAtt1: aDum1! !...Example of a mandatory association:FILENAME="00884.unk" ORIGFILE="pics/ass_mand.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"... Object subclass: #Ex05name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'att1 att2 roleATex06'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'...!Ex05 class methodsFor: 'instance creation'!newname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'self error: 'Cannot use new, use roleATex06:'!roleATex06: aRoleATex06name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Generated"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'^super new initializeRoleATex06: aRoleATex06! !...TERM1="instance removal"ID="23063"Instance RemovalIn every class a method release is generated in the method category initialize-release. This method calls the method release of its super class. TERM1="release method"The expression super release is included in any reimplementation of the method release in a sub class. After the release, the object can be garbage collected.Example:...!ExampleClass4 methodsFor: 'initialize-release'!releasename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'super release.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Start user added code"!...If there are any association attributes, release will also remove all associations from an object, if possible. Note that using an object after it is released (e.g. retrieving associated objects in a one - many association) may have undesirable effects.See REFID="13146" TYPE="XREF-TEXTCOPY"Associations for details on associations.TERM1="generalization"TERM1="inheritance"ID="23200"Generalizations (Inheritance)Super classes and Sub classesIn Smalltalk, a class is always derived from another class. If a class lacks a super class in ObjectTeam, the Smalltalk code generator considers the class as being derived from the class Object, the top of the Smalltalk class hierarchy. In that case, it issues the following warning:WARNING: <className> has no super class, defaulting to ObjectTERM1="inheritance" TERM2="multiple"Multiple InheritanceIf a class in ObjectTeam has more than one super class, the code generator also issues an error message:ERROR: Multiple inheritance not supported, ignoring additional super classesThe code generator considers the class to be derived from the first super class it can find. Bear in mind that this is not necessarily the same class every time the code is (re)generated.Types of inheritanceIn ObjectTeam you can specify two types of generalizations:COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DisjointCOLNAME="2" VALIGN="TOP" MOREROWS="0"OverlappingCOLNAME="1" VALIGN="TOP" MOREROWS="0"FILENAME="00885.tif" ORIGSEQ="42" ORIGTYPE="I" ORIGDOC="../../sources/st/stnpers.fm5.mif"COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00886.tif" ORIGSEQ="60" ORIGTYPE="I" ORIGDOC="../../sources/st/stnpers.fm5.mif"However, the Smalltalk code generator does not distinguish between these generalizations; for both the same code is generated.You can specify the type of inheritance in ObjectTeam. The following types are available:n subclass (default)n variableSubclassn variableByteSubclassYou can specify a type by editing the class property Inheritance Type (see REFID="35098" TYPE="XREF-TEXTCOPY"Inheritance Type).ExampleHere is an example of standard inheritance (one super class, one sub class), together with the most significant part of the resulting Smalltalk code:FILENAME="00887.unk" ORIGFILE="pics/cl_inh1.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...InhEx1 subclass: #SubInhEx1...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'category: 'newsys'!...TERM1="association"ID="13146"AssociationsIn this sectionIn this section, associations with the following multiplicity are discussed:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27231" TYPE="XREF-TEXTCOPY"Association: one (optional) - one (optional) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'47COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21023" TYPE="XREF-TEXTCOPY"Association: one (optional) - one (mandatory) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'49COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17627" TYPE="XREF-TEXTCOPY"Association: one (optional) - many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'51COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36022" TYPE="XREF-TEXTCOPY"Association: one (optional) - many (with constraint) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'53COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30837" TYPE="XREF-TEXTCOPY"Association: mandatory - many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'56COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27353" TYPE="XREF-TEXTCOPY"Association: many - many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'58This section also contains a discussion of association properties.IntroductionIf a class is associated with another object, the following methods are generated for the associated class:n get method (e.g.: TERM1="get"TERM1="association" TERM2="get"get<roleName>)This method returns information about the association and is inserted in the category association access by default.n set methods (e.g.: TERM1="set"TERM1="association" TERM2="set"set<roleName> and remove<roleName>)These methods modify the association and are inserted in the category association modification by default.n TERM1="association" TERM2="implementation methods"implementation methodsThe set methods access the instance variables of the associated object in an association. To implement the set method, the code generator generates the following implementation methods: - a method to set the instance variable for the association (e.g.: TERM1="setRef"TERM1="association" TERM2="setRef"set<roleName>Ref) - a method to remove the instance variable for the association (e.g.: TERM1="remove"TERM1="association" TERM2="remove"remove<roleName>Ref)These implementation methods are inserted in the private category. Since users are not supposed to edit these methods, they are ignored in the rest of this guide.TERM1="association" TERM2="properties"TERM1="properties" TERM2="association"ID="29923"Association PropertiesHow to specify association propertiesSee REFID="10976" TYPE="XREF-TEXTCOPY"How to specify properties.Which association properties can you specifyThe following association properties affect non-persistent code generation:n Association AccessThis property is briefly discussed on the following pages.TERM1="association access" TERM2="property"TERM1="property" TERM2="association access"ID="12313"Association AccessWith this property you specify:n Whether or not methods to get (=read) and set (=write) associations must be generated.n In which category they must be inserted.You can select the following values for this property:n Public (default)n Privaten NoneAssociation Access valuesYou can select the following values for Association Read Access as well as for Association Write access: Public, Private, None.n Public (default)The methods to get (Read) the association are generated in the category TERM1="association access" TERM2="method category"TERM1="category" TERM2="association access"association access; the methods to set (Write) the association in TERM1="association modification" TERM2="method category"TERM1="category" TERM2="association modification"association modification.In the following example, Read and Write Access are both set to Public for roleA:FILENAME="00888.unk" ORIGFILE="pics/assrwacc.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"FILENAME="00889.unk" ORIGFILE="pics/prpacpub.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!B methodsFor: 'association access'!getRoleA... !B methodsFor: 'association modification'!setRoleA: aRoleA...removeRoleA...n Private The methods to get (Read) and set (Write) the association are generated in the category TERM1="category" TERM2="private"TERM1="private" TERM2="category"private. In the following example, Read and Write Access are both set to Private for roleA:FILENAME="00890.unk" ORIGFILE="pics/prpacpri.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"...!B methodsFor: 'private'!...setRoleA: aRoleA...getRoleA... removeRoleA...n None No method to get or set the association is generated when the association read and write access is set to none.FILENAME="00891.unk" ORIGFILE="pics/prpacnon.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"However, under certain circumstances methods are generated in the category private even if their Read or Write Access property is set to None.Warning: The property value None for write access implies that the user cannot write the association from the side where this property value was specified. There are, however, two exceptions to this rule:- If the association is mandatory, the association can be modified during object construction- The association can be removed using the release methodNote that if the write access on the other side is Public, the user is still able to modify the association, albeit indirectly. You can make any possible combination of Association Read and Write Access property values, i.e.:COLS="2"COLNAME="1" COLWIDTH="223p"COLNAME="2" COLWIDTH="223p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Read Access (Get)COLNAME="2" VALIGN="TOP" MOREROWS="0"Write Access (Set)COLNAME="1" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="1" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="1" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="1" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"NoneID="27231"Association: TERM1="association" TERM2="one (optional) - one (optional)"one (optional) - one (optional)Example diagramFILENAME="00892.unk" ORIGFILE="pics/ass_oooo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"ID="12482"Generated get and set methods for Class Ainstance variable:...Object subclass: #A1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleB'...instance creation methods:!A1 class methodsFor: 'instance creation'!new...initialize methods:!A1 methodsFor: 'initialize-release'!...initialize...get methods:!A1 methodsFor: 'association access'!getRoleB...set methods:!A1 methodsFor: 'association modification'! setRoleB: aRoleB...removeRoleB...Generated get and set methods for Class Binstance variable:Object subclass: #B1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleA'...instance creation methods:!B1 class methodsFor: 'instance creation'!new...initialize methods:!B1 methodsFor: 'initialize-release'!...initialize...get methods:!B1 methodsFor: 'association access'!getRoleA...set methods:!B1 methodsFor: 'association modification'!setRoleA: aRoleA...removeRoleA...ID="21023"Association: TERM1="association" TERM2="one (optional) - one (mandatory)"one (optional) - one (mandatory)Example diagramFILENAME="00893.unk" ORIGFILE="pics/ass_ooom.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class Ainstance variable:Object subclass: #A2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleB'...instance creation:!A2 class methodsFor: 'instance creation'!new...roleB: aRoleB...initialize method:!A2 methodsFor: 'initialize-release'!...initializeRoleB: aRoleB...get methods:!A2 methodsFor: 'association access'!getRoleB...set methods:!A2 methodsFor: 'association modification'!setRoleB: aRoleB...Generated get and set methods for Class Binstance variable:Object subclass: #B2name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleA'...instance creation:!B2 class methodsFor: 'instance creation'!new...initialize method:!B2 methodsFor: 'initialize-release'!...initialize...get methods:!B2 methodsFor: 'association access'!getRoleA...set methods:!B2 methodsFor: 'association modification'!setRoleA: aRoleA...ID="17627"Association: TERM1="association" TERM2="one (optional) - many"one (optional) - manyExample diagramFILENAME="00894.unk" ORIGFILE="pics/ass_oomo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class Ainstance variable:Object subclass: #A3name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBSet'...instance creation:!A3 class methodsFor: 'instance creation'!new...initialize method:!A3 methodsFor: 'initialize-release'!...initialize...get methods:!A3 methodsFor: 'association access'!roleBSetDo: aBlock...set methods:!A3 methodsFor: 'association modification'!addRoleB: aRoleB...removeRoleB: aRoleB...Generated get and set methods for Class Binstance variable:Object subclass: #B3name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleA'...instance creation:!B3 class methodsFor: 'instance creation'!new...initialize method:!B3 methodsFor: 'initialize-release'!...initialize...get methods:!B3 methodsFor: 'association access'!getRoleA...set methods:!B3 methodsFor: 'association modification'!setRoleA: aRoleA...removeRoleA...WarningYou cannot use the enumeration method roleBSetDo to remove all elements from the association.ID="36022"Association: TERM1="association" TERM2="one (optional) - many (with constraint)"one (optional) - many (with constraint)Example diagramFILENAME="00895.unk" ORIGFILE="pics/ass_oomc.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"TERM1="constraint check"Constraint checkA constraint on the many side, results in a constraint check in the methods add<roleName> and remove<roleName>.This constraint check is carried out by checking the size of the set in the methods add<roleName> and remove<roleName>. It checks if the constraint is still effective after the update action.However, since the consistency of the association cannot be guaranteed, the code generator inserts a warning comment in the method initialize. Generated get and set methods for Class Ainstance variable:Object subclass: #A4name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBSet'...instance creation:!A4 class methodsFor: 'instance creation'!new...initialize method:!A4 methodsFor: 'initialize-release'!...initialize...get methods:!A4 methodsFor: 'association access'!roleBSetDo: aBlock...set methods:!A4 methodsFor: 'association modification'!addRoleB: aRoleB...removeRoleB: aRoleB...Generated get and set methods for Class Binstance variable:Object subclass: #B4name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleA'...instance creation:!B4 class methodsFor: 'instance creation'!new...initialize method:!B4 methodsFor: 'initialize-release'!...initialize...get methods:!B4 methodsFor: 'association access'!getRoleA...set methods:!B4 methodsFor: 'association modification'!setRoleA: aRoleA...removeRoleA...ID="30837"Association: TERM1="association" TERM2="mandatory - many"mandatory - many Example diagramFILENAME="00896.unk" ORIGFILE="pics/ass_ommo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class Ainstance variable:Object subclass: #A5name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBSet'...instance creation:!A5 class methodsFor: 'instance creation'!new...initialize method:!A5 methodsFor: 'initialize-release'!...initialize...get methods:!A5 methodsFor: 'association access'!roleBSetDo: aBlock...set methods:!A5 methodsFor: 'association modification'!addRoleB: aRoleB...Generated get and set methods for Class Binstance variable:Object subclass: #B5name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleA'...instance creation:!B5 class methodsFor: 'instance creation'!new...roleA: aRoleA...initialize method:!B5 methodsFor: 'initialize-release'!...initializeRoleA: aRoleA ...get methods:!B5 methodsFor: 'association access'!getRoleA...set methods:!B5 methodsFor: 'association modification'!setRoleA: aRoleA...ID="27353"Association: TERM1="association" TERM2="many - many"many - many Example diagramFILENAME="00897.unk" ORIGFILE="pics/ass_momo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class Ainstance variable:Object subclass: #A6name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBSet'...instance creation:!A6 class methodsFor: 'instance creation'!new...initialize method:!A6 methodsFor: 'initialize-release'!...initialize...get methods:!A6 methodsFor: 'association access'!roleBSetDo: aBlock...set methods:!A6 methodsFor: 'association modification'!addRoleB: aRoleB...Generated get and set methods for Class Binstance variable:Object subclass: #B6name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleASet'...instance creation:!B6 class methodsFor: 'instance creation'!new...initialize method:!B6 methodsFor: 'initialize-release'!...initialize...get methods:!B6 methodsFor: 'association access'!roleASetDo: aBlock...set methods:!B6 methodsFor: 'association modification'!addRoleA: aRoleA...removeRoleA: aRoleA...TERM1="qualified association"TERM1="association" TERM2="qualified"ID="27736"Qualified AssociationsIn this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29923" TYPE="XREF-TEXTCOPY"Association Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'44COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10288" TYPE="XREF-TEXTCOPY"Qualifier Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'63COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41259" TYPE="XREF-TEXTCOPY"Qualified Association: one (optional) - one (optional) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'64COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33825" TYPE="XREF-TEXTCOPY"Qualified Association: one (optional) - mandatory 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'67COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13198" TYPE="XREF-TEXTCOPY"Qualified Association: mandatory - one (optional) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'68COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19536" TYPE="XREF-TEXTCOPY"Qualified Association: one (optional) - many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'69COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33626" TYPE="XREF-TEXTCOPY"Qualified Association: mandatory - many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'71COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35429" TYPE="XREF-TEXTCOPY"Qualified Association: many - one (optional) 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'73COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25458" TYPE="XREF-TEXTCOPY"Qualified Association: many - mandatory 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'75COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31898" TYPE="XREF-TEXTCOPY"Qualified Association: many - many 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'76Qualified Association TERM1="qualified association" TERM2="properties"TERM1="properties" TERM2="qualified association"PropertiesHow to specify qualified association propertiesΣ To set qualified association properties:1 Select the qualified association in the drawing area.2 Select Item | Edit Properties.The Edit Properties dialog box appears.3 Select the name of the role at start.You can now edit the qualified association properties.FILENAME="00898.unk" ORIGFILE="pics/prpasq11.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Which association properties can you specifyThe following qualified association properties affect the code generation:n Association Access (see REFID="12313" TYPE="XREF-TEXTCOPY"Association Access)n REFID="36933" TYPE="XREF-TEXTCOPY"Name of qualifier in Opposite classThis last property is briefly discussed on the following pages.TERM1="Name of qualifier in Opposite class" TERM2="qualified association property"TERM1="property" TERM2="Name of qualifier in Opposite class"ID="36933"Name of qualifier in Opposite classWith this property, you can specify which attribute of the class at the other end of the qualified association must act as qualifier. This attribute must be a non-static attribute for which the property Pool dictionary is not set.Example:FILENAME="00899.unk" ORIGFILE="pics/asqualex.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"FILENAME="00900.unk" ORIGFILE="pics/prpassq2.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"The code generated for Class A is identical to the code that is generated when this property is not set.For Class B two extra methods are generated:get methods:...!B methodsFor: 'association access'!attB1... set methods:...!B methodsFor: 'association modification'!attB1: aQ... ID="10288"Qualifier PropertiesIntroductionBefore generating code for a qualified association, you must specify the data type of the qualifer by setting the Data Type property of the qualifier. You can also set the Nullable property of the qualifier, which is similar to the Nullable property of an attribute, as described in REFID="27928" TYPE="XREF-TEXTCOPY"Nullable.How to specify qualifier propertiesΣ To set qualifier properties:1 Select the qualified association in the drawing area.2 Select Item | Edit Properties.The Edit Properties dialog box appears.3 Select the name of the qualifier.You can now edit the qualifier properties.FILENAME="00901.unk" ORIGFILE="pics/prpqual.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"ID="41259"Qualified Association: TERM1="qualified association" TERM2="one (optional) - one (optional)"one (optional) - one (optional)TERM1="qualifier" TERM2="name"Qualifier NameIn the example diagram depicted below, an instance variable roleA is generated for class B. Besides this variable and class B's own instance variables, the code generator also generates a qualifier attribute as instance variable for class B.The qualifier attribute for class B equals <qualifierName> if the following conditions are met:n The property Name of qualifier in Opposite class (see REFID="36933" TYPE="XREF-TEXTCOPY"Name of qualifier in Opposite class) is not set for roleA.n There is no attribute called <qualifierName> specified as attribute for class B.The qualifier attribute for class B equals the value of the property Name of qualifier in Opposite class if:n The attribute specified as Name of qualifier in Opposite class for roleA is a non-static attribute in class B.n The property Pool Dictionary is not switched on for the attribute specified as Name of qualifier in Opposite class.If the specified attribute is a class attribute or a pool dictionary, the following error message is issued:ERROR: qualifier <qualifier> is defined in <classname>, but not as instance variableIf the specified attribute does not exist at all in class B, it is created by the code generator. It issues the following warning:WARNING: user defined qualifier <qualifierName> not defined in <className>, creating itExample diagramFILENAME="00902.unk" ORIGFILE="pics/asq_oooo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class Ainstance variable:Object subclass: #A1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBDict'...instance creation:!A1 class methodsFor: 'instance creation'!new...initialize methods:!A1 methodsFor: 'initialize-release'!...initialize...get methods:!A1 methodsFor: 'association access'!getRoleBAt: aQ...set methods:!A1 methodsFor: 'association modification'!setRoleB: aRoleB at: aQ...removeRoleBAt: aQ...Generated get and set methods for Class Binstance variable:Object subclass: #B1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleA q'...instance creation:!B1 class methodsFor: 'instance creation'!new...initialize methods:!B1 methodsFor: 'initialize-release'!...initialize...get methods:!B1 methodsFor: 'association access'!getRoleA...set methods:!B1 methodsFor: 'association modification'!setRoleA: aRoleA at: aQ...removeRoleA...ID="33825"Qualified Association: TERM1="qualified association" TERM2="one (optional) - mandatory"one (optional) - mandatoryExample diagramFILENAME="00903.unk" ORIGFILE="pics/asq_ooom.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class AThe generated code for Class A is identical to the code generated in a one - one association (see REFID="41259" TYPE="XREF-TEXTCOPY"Qualified Association: one (optional) - one (optional)), except for the following error, which is generated in the set method of class A.set methods:!A2 methodsFor: 'association modification'!setRoleB: aRoleB at: aQ...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aRoleB isNil ifTrue:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[self error: 'Parameter nil for mandatory association in setRoleB:at: in A2']....removeRoleBAt: aQ...Generated get and set methods for Class BThe generated code for Class B is identical to the code generated in a one - one qualified association (see REFID="41259" TYPE="XREF-TEXTCOPY"Qualified Association: one (optional) - one (optional)).ID="13198"Qualified Association: TERM1="qualified association" TERM2="mandatory - one (optional)"mandatory - one (optional)Example diagramFILENAME="00904.unk" ORIGFILE="pics/asq_omoo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"This type of qualified association is currently unsupported by ObjectTeam. The same get and set methods are generated as in the example in the section REFID="41259" TYPE="XREF-TEXTCOPY"Qualified Association: one (optional) - one (optional).ID="19536"Qualified Association: TERM1="qualified association" TERM2="one (optional) - many"one (optional) - manyExample diagramFILENAME="00905.unk" ORIGFILE="pics/asq_oomo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class Ainstance variable:Object subclass: #A4name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBSetDict'...instance creation:!A4 class methodsFor: 'instance creation'!new...initialize methods:!A4 methodsFor: 'initialize-release'!...initialize...get methods:!A4 methodsFor: 'association access'!roleBSetDo: aBlock at: aQ...qSetDo: aBlock...set methods:!A4 methodsFor: 'association modification'!addRoleB: aRoleB at: aQ...removeRoleB: aRoleB at: aQ...Generated get and set methods for Class Binstance variable:Object subclass: #B4name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleA q'...instance creation:!B4 class methodsFor: 'instance creation'!new...initialize methods:!B4 methodsFor: 'initialize-release'!...initialize...get methods:!B4 methodsFor: 'association access'!getRoleA...set methods:!B4 methodsFor: 'association modification'!setRoleA: aRoleA at: aQ...removeRoleA...ID="33626"Qualified Association: TERM1="qualified association" TERM2="mandatory - many"mandatory - manyExample diagramFILENAME="00906.unk" ORIGFILE="pics/asq_ommo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"This type of qualified association is currently unsupported by ObjectTeam. The same get and set methods are generated as in the example in the section REFID="19536" TYPE="XREF-TEXTCOPY"Qualified Association: one (optional) - many, except for the set method remove<roleName>, which is not generated.Generated get and set methods for Class Ainstance variable:Object subclass: #A5name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBSetDict'...instance creation:!A5 class methodsFor: 'instance creation'!new...initialize methods:!A5 methodsFor: 'initialize-release'!...initialize...get methods:!A5 methodsFor: 'association access'!roleBSetDo: aBlock at: aQ...set methods:!A5 methodsFor: 'association modification'!addRoleB: aRoleB at: aQ...Generated get and set methods for Class Binstance variable:Object subclass: #B5name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleA q'...instance creation:!B5 class methodsFor: 'instance creation'!new...roleA: aRoleA...initialize methods:!B5 methodsFor: 'initialize-release'!...initializeRoleA: aRoleA ...get methods:!B5 methodsFor: 'association access'!getRoleA...set methods:!B5 methodsFor: 'association modification'!setRoleA: aRoleA at: aQ...ID="35429"Qualified Association: TERM1="qualified association" TERM2="many - one (optional)"many - one (optional)Example diagramFILENAME="00907.unk" ORIGFILE="pics/asq_mooo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class Ainstance variable:Object subclass: #A6name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBDict'...instance creation!A6 class methodsFor: 'instance creation'!new...initialize methods:!A6 methodsFor: 'initialize-release'!...initialize...get methods:!A6 methodsFor: 'association access'!getRoleBAt: aQ...qSetDo: aBlock...set methods:!A6 methodsFor: 'association modification'!setRoleB: aRoleB at: aQ...removeRoleBAt: aQ...Generated get and set methods for Class Binstance variable:Object subclass: #B6name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleASetDict'...instance creation:!B6 class methodsFor: 'instance creation'!new...initialize methods:!B6 methodsFor: 'initialize-release'!...initialize...get methods:!B6 methodsFor: 'association access'!roleASetDo: aBlock at: aQ...qSetDo: aBlock...set methods:!B6 methodsFor: 'association modification'!addRoleA: aRoleA at: aQ...removeRoleA: aRoleA at: aQ...ID="25458"Qualified Association: TERM1="qualified association" TERM2="many - mandatory"many - mandatoryExample diagramFILENAME="00908.unk" ORIGFILE="pics/asq_moom.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class AThe generated code for Class A is identical to the code generated in a many - one association (see REFID="35429" TYPE="XREF-TEXTCOPY"Qualified Association: many - one (optional)), except for the following error, which is generated in the set method of class A.set methods:!A7 methodsFor: 'association modification'!setRoleB: aRoleB at: aQ...name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aRoleB isNil ifTrue:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[self error: 'Parameter nil for mandatory association in setRoleB:at: in A7'].name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'oldRoleB := roleBDict at: aQ ifAbsent: [nil].name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'oldRoleB isNil ifFalse: [oldRoleB removeRoleARef: self at: aQ].name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'aRoleB addRoleARef: self at: aQ.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'roleBDict at: aQ put: aRoleB!removeRoleBAt: aQ...Generated get and set methods for Class BThe generated code for Class B is identical to the code generated in a many - one association (see REFID="35429" TYPE="XREF-TEXTCOPY"Qualified Association: many - one (optional)).ID="31898"Qualified Association: TERM1="qualified association" TERM2="many - many"many - manyExample diagramFILENAME="00909.unk" ORIGFILE="pics/asq_momo.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Generated get and set methods for Class Ainstance variable:Object subclass: #A8name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleBSetDict'...instance creation:!A8 class methodsFor: 'instance creation'!new...initialize methods:!A8 methodsFor: 'initialize-release'!...initialize...get methods:!A8 methodsFor: 'association access'!roleBSetDo: aBlock at: aQ...qSetDo: aBlock...set methods:!A8 methodsFor: 'association modification'!addRoleB: aRoleB at: aQ...removeRoleB: aRoleB at: aQ...Generated get and set methods for Class Binstance variable:Object subclass: #B8name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'instanceVariableNames: 'roleASetDict'...instance creation:!B8 class methodsFor: 'instance creation'!new...initialize methods:!B8 methodsFor: 'initialize-release'!...initialize...get methods:!B8 methodsFor: 'association access'!roleASetDo: aBlock at: aQ...qSetDo: aBlock...set methods:!B8 methodsFor: 'association modification'!addRoleA: aRoleA at: aQ...removeRoleA: aRoleA at: aQ...ID="34351"Link TERM1="link association"TERM1="association" TERM2="link"AssociationsHow link associations are generated(Qualified) associations with a link attribute box are internally transformed in two associations. Thus, the generated code is the same as if two separate associations were drawn. The mechanisms for keeping mandatory associations consistent (see REFID="21889" TYPE="XREF-TEXTCOPY"Mandatory attributes) ensures that the link objects are also kept consistent.For a description of the code generated for various types of (non-qualified) associations, see REFID="13146" TYPE="XREF-TEXTCOPY"Associations.For a description of the code generated for various types of qualified associations, see REFID="27736" TYPE="XREF-TEXTCOPY"Qualified Associations.Example: TERM1="link attribute"TERM1="attribute" TERM2="link"link attribute in associationAssociations with an association class connector are internally transformed in two associations. For example:FILENAME="00910.unk" ORIGFILE="pics/ass_link.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Example: TERM1="qualified link attribute"TERM1="attribute" TERM2="qualified link"link attribute in qualified associationQualified associations with an association class connector also are transformed internally to two associations: one qualified and one non-qualified.For example:FILENAME="00911.unk" ORIGFILE="pics/asq_link.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/stnpers.fm5.mif"Chapter 4 ID="32714"Reverse EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for SmalltalkIntroductionTERM1="project" TERM2="using data from other sources"One of the benefits of an object-oriented design methodology is its support for the reuse of software components. Reverse engineering facilitates this by parsing Smalltalk source files and building CDs and CDMs that show the class hierarchy defined in the files.Purpose Smalltalk source files may come from other projects or from third-parties, such as class library vendors or public domain software sites. Use reverse engineering to capture and display the class hierarchy of a class library so that you can reuse the classes in the library. Reverse engineering does the following:n Makes class libraries available in ObjectTeam.n Helps you to understand the structure and functionality of class libraries.Not an import utilityReverse engineering is not designed to capture all the information in a Smalltalk source file. Therefore, do not use reverse engineering to import classes in order to maintain them in ObjectTeam. If you generate Smalltalk source files from the CDs and CDMs created by reverse engineering, they will not match the Smalltalk source files you used to create those CDs and CDMs.Class hierarchyA class hierarchy shows a base class and the subclasses derived from that base class. A class at or near the top of the hierarchy is more generalized. Classes at or near the bottom of the hierarchy are more specialized. The following illustration shows a class hierarchy for a graphical user interface subsystem.FILENAME="00912.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/st/steng.fm5.mif"Class libraryA TERM1="class library"class library is a collection of classes intended for use in many different situations. Generally, classes near the top of a class hierarchy are better candidates for a class library because they are more likely to be reused. Classes lower in the hierarchy have more restricted use and might not be useful in a class library.In the previous illustration, myFrame is not useful in a class library because it is an instance. The other classes might appear in a class library.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28809" TYPE="XREF-TEXTCOPY"What Happens During Reverse Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31024" TYPE="XREF-TEXTCOPY"Running Reverse Engineering 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6TERM1="reverse engineering" TERM2="class library"TERM1="translating" TERM2="c++ header files to Class Association Diagrams"ID="28809"What Happens During Reverse EngineeringIntroductionThis section describes how ObjectTeam reverse engineers Smalltalk source files.Steps in the translationReverse engineering uses the following steps to translate Smalltalk source files into CDs and CDMs that show the class hierarchy:1 Parses the Smalltalk source files.2 Maps the Smalltalk elements to ObjectTeam elements.3 Combines the elements into draft diagrams.4 Uses detailed positioning and editing to transform the draft diagrams into finished CDs of reasonable size.Parsing the source filesThe parser recognizes only class definitions. Code that uses classes, but is not within a class, is ignored.Mapping the elementsTERM1="C++" TERM2="reverse engineering"TERM1="mapping" TERM2="in reverse engineering"TERM1="reverse engineering" TERM2="mapping"After parsing the source file, reverse engineering maps the Smalltalk constructs to ObjectTeam elements, as shown in the following table:COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Smalltalk ElementCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam ElementCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with inheritanceType, classCategory, and FreeText propertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"instanceVariableNamesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Normal attributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"classVariableNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Static attributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"poolDictionariesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attributes with isPoolDict propertyCOLNAME="1" VALIGN="TOP" MOREROWS="0"Normal messageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Method with methodCategory property Note: The mapping of Smalltalk messages to ObjectTeam methods is described below.COLNAME="1" VALIGN="TOP" MOREROWS="0"Class messageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Static method with methodCategory Note: The mapping of Smalltalk messages to ObjectTeam methods is described below.COLNAME="1" VALIGN="TOP" MOREROWS="0"Binary selectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operator<operator>(parameter)Note: See REFID="19254" TYPE="XREF-TEXTCOPY"Binary Selectors for more information on how binary selectors are represented in ObjectTeam.COLNAME="1" VALIGN="TOP" MOREROWS="0"SuperclassCOLNAME="2" VALIGN="TOP" MOREROWS="0"(Disjoint) generalization symbolMapping of Smalltalk messages to ObjectTeam methodsDuring reverse engineering, Smalltalk message patterns are mapped to ObjectTeam methods. Message comments are ignored. The following table summarizes the mapping between messages and methods. For more information, see REFID="39204" TYPE="XREF-TEXTCOPY"Operations.COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Smalltalk MessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam MethodCOLNAME="1" VALIGN="TOP" MOREROWS="0"aCOLNAME="2" VALIGN="TOP" MOREROWS="0"a()COLNAME="1" VALIGN="TOP" MOREROWS="0"a: bCOLNAME="2" VALIGN="TOP" MOREROWS="0"a(b: b)COLNAME="1" VALIGN="TOP" MOREROWS="0"a: aBCOLNAME="2" VALIGN="TOP" MOREROWS="0"a(b: b)COLNAME="1" VALIGN="TOP" MOREROWS="0"a: aB c: aDCOLNAME="2" VALIGN="TOP" MOREROWS="0"a(b: b, c: d)COLNAME="1" VALIGN="TOP" MOREROWS="0"d: anECOLNAME="2" VALIGN="TOP" MOREROWS="0"d(e: e)Creating draft diagramsTERM1="diagrams" TERM2="draft, in reverse engineering"TERM1="reverse engineering" TERM2="draft diagrams"After mapping the Smalltalk constructs to ObjectTeam elements, reverse engineering creates draft CDs, as shown below, to hold the elements.FILENAME="00913.tif" ORIGSEQ="13" ORIGTYPE="I" ORIGDOC="../../sources/st/steng.fm5.mif"Finishing the diagramsTERM1="diagrams" TERM2="finished, in reverse engineering"TERM1="reverse engineering" TERM2="finished diagrams"Finally, reverse engineering uses the following guidelines to transform the draft CDs into finished CDs:n If classes are too large, reverse engineering folds them, as shown in the following illustration. Alternatively, if you specify the Create Reference Diagrams option in the Reverse Engineer Smalltalk dialog box, reverse engineering creates a separate reference diagram for the class.FILENAME="00914.tif" ORIGSEQ="6" ORIGTYPE="I" ORIGDOC="../../sources/st/steng.fm5.mif"n If generalizations are too large, reverse engineering transforms them into More Classes symbols.FILENAME="00915.tif" ORIGSEQ="17" ORIGTYPE="I" ORIGDOC="../../sources/st/steng.fm5.mif"ID="31024"Running Reverse EngineeringIntroductionThis section describes how to run reverse engineering.How to reverse engineerΣ To reverse engineer a class library from one or more source files:1 Move to System level in Object Design phase.Note: Typically, you reverse engineer into an empty system. This prevents name conflicts with existing classes.2 Select Utilities | Reverse Engineer Smalltalk.A Reverse Engineer Smalltalk dialog box appears (see REFID="29834" TYPE="XREF-TEXTCOPY"Files for reverse engineering), prompting you to select the files to be reverse engineered.3 Select the files that you want to reverse engineer, then select OK.A Reverse Engineer Smalltalk dialog box appears (see REFID="32449" TYPE="XREF-TEXTCOPY"Options for reverse engineering), prompting you to select the options that you want to use. 4 Select the options, then select OK.ObjectTeam reverse engineers the selected file, reporting the results in a Monitoring window.FILENAME="00916.unk" ORIGFILE="pics/rvngmoni.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/steng.fm5.mif"As shown in the following illustration, the generated CDs display the class hierarchy defined in the selected files. The display includes attributes and operations; associations between classes are not reverse engineered.FILENAME="00917.unk" ORIGFILE="pics/cadrvng.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/steng.fm5.mif"ID="29834"Files for reverse engineeringDuring reverse engineering, ObjectTeam prompts you to select the files that you want to reverse engineer. In most cases, you select Smalltalk source files. In Windows, use the File Name and File of Type fields to filter the list of files displayed. In Unix, as shown in the following figure, use the Filter field and Filter button.FILENAME="00918.unk" ORIGFILE="pics/rvngsel.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/steng.fm5.mif"ID="32449"Options for reverse engineeringDuring reverse engineering, ObjectTeam displays the following dialog box prompting you to select the options that you want to use:FILENAME="00919.unk" ORIGFILE="pics/rvngopts.gif" ORIGTYPE="X" ORIGDOC="../../sources/st/steng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box): COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the diagram to be generated. Multiple source files can be generated to a single diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only an inheritance structure is generated)n Only CDMs (only features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, separate CDs are generated for classes that exceed the maximum size. COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"This field is disabled. It is not used by the Smalltalk code generator.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"This field is disabled. It is not used by the Smalltalk code generator.Chapter 5 Customizing TERM1="code generation" TERM2="customizing"Code ID="36160"GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for SmalltalkIntroductionThis chapter contains an overview of the areas regarding code generation that can be customized and configured in ObjectTeam.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24015" TYPE="XREF-TEXTCOPY"Customizing Data Types 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14683" TYPE="XREF-TEXTCOPY"Using a Different Smalltalk Environment 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17ID="24015"Customizing Data TERM1="data type" TERM2="customizing"TERM1="types" TERM2="customizing"TERM1="standard types" TERM2="customizing"TypesStandard data typesIn the Object Design phase you can use standard types to define data types of data attributes and parameters. All the valid standard types are stored in the following file:M4_home/modules/smalltalk/etc/l_st/TERM1="stand_types"stand_types.stand_typesThis file also contains minimum and maximum values for the standard types.Whenever you generate code or check a diagram's contents, the data types used in the diagram are always checked against the data types in the standard types file. The standard types are then mapped to the appropriate language (i.e. Smalltalk) types.What does the stand_types file look like?Here is a sample of the default stand_types.stand_types file as provided by Cayenne. The columns Min 1, Max 1 and Min 2 and Max 2 can be used to specify constraints on array size or format values of the standard types....#--------------------------------------------------------------------------# StandardType | Min 1 | Max 1 | Min 2 | Max 2#--------------------------------------------------------------------------char |0 |32767 |0 |0uns_char |0 |32767 |0 |0dec |0 |32 |0 |32decimal |0 |32 |0 |32double_precision |0 |13 |0 |0float |0 |13 |0 |0double |0 |0 |0 |0int |0 |0 |0 |0integer |0 |0 |0 |0unsigned |0 |0 |0 |0short |0 |0 |0 |0...Language typesThe appropriate language types for the Smalltalk generation are VisualWorks classes. The mapping of the standard types to the appropriate VisualWorks classes is defined in the following file:M4_home/modules/smalltalk/etc/l_st/TERM1="stand_types"lang_types.lang_typesWhat does the lang_types file look like?Here is a sample of the default lang_types.lang_types file as provided by Cayenne:...#--------------------------------------------------------------------------# Standard type | Smalltalk VW class | range#--------------------------------------------------------------------------char | Character | []uns_char | Character | []date | Date | *dec | FixedPoint | []decimal | FixedPoint | []double_precision | Double | []float | Float | []double | Double | *short | SmallInteger | *uns_short | SmallInteger | *int | Integer | *integer | Integer | *unsigned | Integer | *long | LargeInteger | *...Customizing the default stand_types file You can create a customization file stand_types.stand_types and lang_types.lang_types if you want to extend or change the default stand_types.stand_types or lang_types.lang_types file. You can do that by selecting File | New on the Browser level of your choice with the pseudo object <customization files> as the current object. The name of the new customization file must be identical to the file you are customizing. After you have created the file, you can edit it and save it.The next time you generate code, the entries in the default customization file are extended with the entries in your user-defined customization file.Note: If you extend the default file, you only have to include the new entries, as these customization files are read incrementally by ObjectTeam.ID="14683"Using a Different TERM1="Smalltalk environment" TERM2="using various -"Smalltalk EnvironmentIntroductionThe Smalltalk code generated by ObjectTeam is fit to be used in combination with VisualWorks 2.5. However, with some minor modifications, you could use ObjectTeam in combination with other Smalltalk environments that uses the Smalltalk 80 syntax, such as TERM1="GNU Smalltalk"TERM1="Smalltalk" TERM2="GNU"GNU Smalltalk. This section points out a few modifications that you could make in order to use the code generator of ObjectTeam work in combination with the Smalltalk environment of your choice.The files you need to edit are ObjectTcl files. For more information on ObjectTcl, refer to ObjectTeam Repository Interface Guide.User-defined ObjectTeam moduleIt is recommended that you create a new ObjectTeam module if you want to use a different Smalltalk environment. You then copy all the files and directories from the default Smalltalk module directory to the new module directory. Edit the files discussed in this section in the new directory.For more informationSee ObjectTeam Customization Guide for details on user-defined modulesAdapting the Smalltalk environment start-upThe ObjectTcl code to start a Smalltalk environment is VisualWorks-specific. If you want to change this start-up, you need to rewrite the following ObjectTcl method:VWInterface::startSTYou can find the default implementation of this method in the following ObjectTcl file:M4_home/modules/smalltalk/tcl/vwinterfac.tclAdapting the import of classesThe ObjectTcl code to import classes from ObjectTeam to the Smalltalk environment is also VisualWorks-specific. If you want to change this, you need to rewrite the following ObjectTcl method:STGenerator::generateImportYou can find the default implementation of this method in the following ObjectTcl file:M4_home/modules/smalltalk/tcl/stgentor.tclFor example, for GNU Smalltalk you would make the following changes:n TERM1="class" TERM2="importing from ObjectTeam into VisualWorks"TERM1="VisualWorks" TERM2="importing classes from ObjectTeam"VisualWorks Smalltalk:$importSection append "(Filename named: '$pathName/$fileName') fileIn!\n"n TERM1="class" TERM2="importing from ObjectTeam into GNU Smalltalk"TERM1="GNU Smalltalk" TERM2="importing classes from ObjectTeam"GNU Smalltalk:$importSection append "FileStream fileIn: '$pathName/$fileName'!\n"Adapting the export of classesThe ObjectTcl code to export classes from ObjectTeam to the Smalltalk environment is VisualWorks-specific as well. If you want to change this, you need to rewrite the following ObjectTcl method:STGenerator::generateExportYou can find the default implementation of this method in the following ObjectTcl file:M4_home/modules/smalltalk/tcl/stgentor.tclFor example, for GNU Smalltalk you would make the following changes:n TERM1="class" TERM2="exporting from VisualWorkst to ObjectTeam"TERM1="VisualWorks" TERM2="exporting classes to ObjectTeam"VisualWorks Smalltalk:$exportSection append "(Filename named: '$pathName/$fileName') fileOutChangesFor: $className!\n"n TERM1="class" TERM2="exporting from Smalltalk environment to ObjectTeam"TERM1="GNU Smalltalk" TERM2="exporting classes to ObjectTeam"GNU Smalltalk:$exportSection append "$className fileOutOn: (FileStream open: '$pathName/$fileName' mode: 'w'!\n"Adapting the generation of TERM1="print method" TERM2="customizing the generation of default -"print methodsThe default print methods printOn and printVars that can be generated for every Smalltalk class (see REFID="22269" TYPE="XREF-TEXTCOPY"Default Print methods) is not accepted by all Smalltalk dialects. GNU Smalltalk for instance, does not accept the selector tab: for printOn:aStream.If you want to change the way these print methods are generated, you need to rewrite the following ObjectTcl methods:STGAssocOne::generatePrintCodeSTGAssocMany::generatePrintCodeSTGOneQual::generatePrintCodeSTGManyQual::generatePrintCodeYou can find the default implementation of these methods in the following ObjectTcl file:M4_home/modules/smalltalk/tcl/TERM1="stgclasses.tcl"stgclasses.tclAppendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for SmalltalkSmalltalk code generation propertiesThe following table lists the properties that effect Smalltalk code generation. These are available in the CD in the Object Design phase.COLS="4"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="99p"COLNAME="3" COLWIDTH="126p"COLNAME="4" COLWIDTH="153p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="12313" TYPE="XREF-TEXTCOPY"Association AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21571" TYPE="XREF-TEXTCOPY"Attribute AccessCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class CategoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="38554" TYPE="XREF-TEXTCOPY"Class CategoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="10288" TYPE="XREF-TEXTCOPY"Qualifier PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="33309" TYPE="XREF-TEXTCOPY"Default valueCOLNAME="1" VALIGN="TOP" MOREROWS="0"External Class SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="22494" TYPE="XREF-TEXTCOPY"External Class SourceCOLNAME="1" VALIGN="TOP" MOREROWS="0"Inheritance TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"RegularVariableVariableByteCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35098" TYPE="XREF-TEXTCOPY"Inheritance TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method CategoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="27319" TYPE="XREF-TEXTCOPY"Method CategoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"Name of Qualifier in Opposite ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="36933" TYPE="XREF-TEXTCOPY"Name of qualifier in Opposite classCOLNAME="1" VALIGN="TOP" MOREROWS="0"NullableCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"YesNoCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="27928" TYPE="XREF-TEXTCOPY"NullableCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="10288" TYPE="XREF-TEXTCOPY"Qualifier PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Pool DictionaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check BoxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="18372" TYPE="XREF-TEXTCOPY"Pool dictionaryCOLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl Generator MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="31627" TYPE="XREF-TEXTCOPY"Tcl Method Implementation ProcedureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Text COLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="26618" TYPE="XREF-TEXTCOPY"Free TextCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"--COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="40510" TYPE="XREF-TEXTCOPY"Free TextCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="18768" TYPE="XREF-TEXTCOPY"Free TextVisual Basic Code Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Visual BasicAbout this manualThe ObjectTeam Code Generation Guide for Visual Basic contains information specific to the Visual Basicname='trade' font=symbol charset=fontspecific code=228 descr='[trade]' programming language. This includes information for setting up, configuring, and specifying code generation details in CDs that you will use to generate Visual Basic code. PrerequisitesThis guide is intended for experienced users of ObjectTeam and the analysis and design method it supports. This guide gives you information on how to map ObjectTeam diagrams to Visual Basic code; it does not teach you how to use Visual Basic.To customize or extend the capabilities of the Visual Basic code generator, you must have a thorough understanding of the ObjectTeam Shell, the Object-Oriented Programming Language (OOPL) model structure, and the Tool Command Language (Tcl) commands.Chapter 1 Preparing ID="33386"Your ObjectTeam Model for Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Visual BasicIntroductionIn the Analysis and System Design phases, as described in the ObjectTeam Modeling Guide, you model the system without regard to the implementation environment.In the Object Design phase, you add language-specific elements to your model. In the Implementation phase, you generate code.Visual Basic module requiredThe ObjectTeam module Visual Basic Code Generation provides the menu items, the properties and the Tcl code required to use the Visual Basic Code Generator. Therefore, before moving to the Object Design phase, make sure this module is active.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.For more informationSee ObjectTeam Installation Guide for details on how to activate a module.Object Design and ImplementationThis chapter describes the tasks of the Object Design phase. REFID="38512" TYPE="XREF-TEXTCOPY"Chapter 2, Building a Visual Basic Application, describes the tasks of the Implementation phase. You work iteratively in these two phases to generate code and complete your application.Purpose of object designTERM1="Object Design" TERM2="activities in this phase"TERM1="Object Design" TERM2="development phase in ObjectTeam project"In ObjectTeam, the CDs (and the objects defined in the CDs) provide all the source data needed for code generation. The goal of object design is to add to the CDs all the data required for successful code generation. For example, you add properties (such as the Attribute Access property, which establishes read/write access to an attribute) and incorporate language-specific syntax (such as data type specifications for attributes and the arguments of operations).You might also add data to diagrams other than CDs. The code generator does not use oter diagrams, but they are useful for describing the behavior of classes, their attributes and operations.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20855" TYPE="XREF-TEXTCOPY"Refining the Class Diagrams 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13193" TYPE="XREF-TEXTCOPY"Hints and Tips for Effective Code Generation 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6ID="25958"ID="13501"ID="36358"ID="19276"ID="15756"ID="20855"ID="11800"ID="23233"ID="23234"ID="23235"Refining the Class DiagramsIntroductionTERM1="Class Association Diagram"The CDs and the objects defined in the CDs provide all the source data needed for code generation. TERM1="Class Association Model"These diagrams distinguish the classes in a system and describe their identities and their features. In the Object Design phase, you must add to the CDs sufficient detail for successful code generation.Using data from diagrams other than CDsDiagrams other than the CDs are not used as input for code generation. However, they contain valuable information that can help you to complete and verify the CDs. The following table summarizes how you can use these other diagrams to help you find important objects that are not yet in the CDs.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CD ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects In Other DiagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"classCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD object or initiatorSTD classUCD actorCOLNAME="1" VALIGN="TOP" MOREROWS="0"operationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD eventSTD event or event messageUCD communication associationCOLNAME="1" VALIGN="TOP" MOREROWS="0"attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD state names (enumerated list as an attribute value)STD condition on an eventClassesWhen you work on CDs, you focus on the implementation of classes. The CD must include all classes and the associations (and inheritance) between classes. In the Object Design phase, you may introduce new classes to ease implementation and improve performance.You must include all attributes and operations for each class. The attributes of a class map to the attributes of the class type. The operations of the class map to functions and procedures of the class type. External classesA class must have at least one attribute or one operation to generate code. Classes that have no attributes or operations are translated as external classes.AssociationsYou must define the associations between all classes, including any constraints.Role names must also be defined. Every association needs at least one role name. Every mandatory association must have a role name. Without a role name, you cannot use the association.Role names in Analysis and System DesignIn the Analysis and System Design phases, role names distinguish a class by showing the role the class is playing in a relationship with another class. Each role name defines the role of the class within the context of a single association. It also indicates the use and direction of the association toward the class that plays a role. For example, a manager can be both the boss of a coworker and an employee of a company.FILENAME="00920.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/vb/vbobjdes.fm5.mif"Role names in Object Design and ImplementationIn the Object Design and Implementation phases, the use of role names is extended. The code generator creates access methods for an association if the class at the far end has a role name for the association. In the previous example, the code generated for Coworker includes access methods for Manager; the code generated for Manager does not include access methods for Coworker.AttributesYou must specify each attribute completely, including its data type. The way to specify a data type for an attribute is to include the type in the class symbol, for example:memberNo : integerData typesData types of attributes and arguments can be standard ObjectTeam types, standard types for your target language, or class types and derived types. OperationsYou must specify each operation completely. This includes specifying such aspects as:n Whether the operation is a normal or class featuren The return type of the operation, if anyn Any parameters, as well as their data typesPropertiesTERM1="property" TERM2="using - to specify implementation details"In the Object Design phase, a variety of properties allow you to specify many implementation details. TERM1="property" TERM2="using - to specify implementation details"These details are incorporated in the final code.ExampleWhen you are using the Visual Basic code generator, each ObjectTeam system represents a Visual Basic project. Each Visual Basic project represents an application. One form in the Visual Basic project is selected as the startup object; this is the first form to execute when you run the application. To select the startup form in ObjectTeam, you set the Startup Object class property of the ObjectTeam class that represents the form.CheckingThe last activity in object design is to use Check | Global Model to check the CDs. The CDs must be error-free before they can be used for code generation. See the ObjectTeam Modeling Guide for more information about the Check utility.For more informationREFID="16205" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to Visual Basic Class Modules, and REFID="31555" TYPE="XREF-TEXTCOPY"Chapter 4, Modeling the GUI, describe how the ObjectTeam model is translated into code. You can use this information to help you complete the CDs in the Object Design phase.ID="36972"ID="35686"ID="15189"ID="40198"ID="24561"ID="13193"ID="11719"ID="11506"ID="11510"ID="11520"Hints and Tips for Effective Code GenerationIntroductionFollowing are a few tips for effective code generation. It may be helpful to be aware of these items as you prepare for code generation, and then again as you generate and regenerate your source files.Understanding the translationsBefore generating code, read through this guide. It contains detailed information about the data that you must include in your CDs for successful code generation. It also explains how the code generator translates the ObjectTeam model into source code files, what changes you can make to the source code files, and how to regenerate them without losing your changes.Naming conventionsAgree upon and follow a naming convention for projects, configurations, systems, classes, special characters, and so on. In addition, bear in mind that spaces between words (in class names, for instance) are deleted by ObjectTeam code generators.Customizing code generationThe code generators execute Tcl scripts that translate a model into source code. You can modify these scripts or create your own.. Always use caution when customizing or creating scripts; such scripts are not supported.Using multiple languages in a single applicationEach ObjectTeam code generator is designed to generate code for one language. You can create an application that uses multiple languages by using different code generators to generate code for different systems; however, the generated code is not integrated across systems. The ObjectTeam code generators are not designed to provide language integration. To build an application that uses multiple languages, you must do the following: 1 Create a separate ObjectTeam system for each language-specific subsystem.2 Generate code for each of the ObjectTeam systems.3 Complete the application by adding the code necessary to provide the language integration.Note: When you create a separate ObjectTeam system for each language-specific subsystem, be sure to define your classes in the appropriate system. When ObjectTeam generates code for the current system, it generates code for the classes that are defined in that system. It does not generate code for classes referenced, but not defined in, the current system; such classes are treated as external classes.Chapter 2 ID="38512"Building a Visual Basic ApplicationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Visual BasicIntroductionTERM1="code generation"Typically, the ultimate goal of modeling an application is to produce code that implements the application. In ObjectTeam, you can generate a significant portion of the code automatically, then complete the code by adding the details that are not specified in the model.ID="20512"Prerequisitesn The ObjectTeam module Visual Basic Code generation must be active from Object Design Phase and Implementation Phase level down. Note: See ObjectTeam Installation Guide for details on activating ObjectTeam modules.n Only the CDs (and the objects defined in the CDs) are used for code generation. Therefore, before code generation, it is critical that the CDs be fully defined, as described in REFID="33386" TYPE="XREF-TEXTCOPY"Chapter 1, Preparing Your ObjectTeam Model for Code Generation.Steps in code generationThe following table provides an overview of the code generation process. This chapter describes each step in greater detail.COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Configure the Visual Basic environment, copying required source files from the ObjectTeam installation directories to the appropriate user environment directories.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generate code for your systems in the Implementation phase. During this step, ObjectTeam runs the Tcl scripts that generate the Visual Basic files.Note: System level in the Implementation phase is fundamentally different than System level in other phases. The System files in the Implementation phase are source files, not diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Edit the source files in either ObjectTeam or Visual Basic. ObjectTeam generates a large portion of your application code, but not all of it. In this stage, you finish writing the application code.TERM1="code regeneration"TERM1="regeneration" TERM2="code"Changes you make to the source files are not lost. When you regenerate the source files, the code generator recognizes your changes and transfers them to the newly generated files. COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"In the Visual Basic environment, test the application.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"If necessary: correct the source files, the model, or both; regenerate the Visual Basic files; and return to step 3.Illustration of code generationThe following illustration shows how ObjectTeam generates code, including the names of the Tcl scripts that it uses.FILENAME="00921.tif" ORIGSEQ="3" ORIGTYPE="I" ORIGDOC="../../sources/vb/vbcodegn.fm5.mif"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22819" TYPE="XREF-TEXTCOPY"Components of Code Generation 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40239" TYPE="XREF-TEXTCOPY"Configuring Your Visual Basic Environment 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22287" TYPE="XREF-TEXTCOPY"Generating Visual Basic Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36285" TYPE="XREF-TEXTCOPY"Editing Generated Source Files 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35288" TYPE="XREF-TEXTCOPY"Editing the Visual Basic Project File 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38387" TYPE="XREF-TEXTCOPY"Regenerating Code 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17ID="22819"Components of Code GenerationTcl scripts for code generationThe Tcl script import.tcl activates, among other things, Tcl scripts in the directory modules\visualbasic\tcl under M4_home. These files , contain Tcl procedures to retrieve information from internal models, format it and write it to Visual Basic files.OOPL ModelWhen you generate code, ObjectTeam converts the CDs and CDMs of the Object Design phase into an intermediate model: the OOPL Model. The Visual Basic code generator then generates the Visual Basic source files based on the OOPL Model.For more informationThe ObjectTeam Programming Interface Guide provides a detailed description of the classes in the OOPL Model.Visual Basic filesYou use ObjectTeam to model classes and forms, as well as the associations among them. From that ObjectTeam model, you generate Visual Basic project, form, class module, and basic module files. In Visual Basic, you open the project, complete the application, and test it.For more information, see REFID="22287" TYPE="XREF-TEXTCOPY"Generating Visual Basic Source Files and REFID="36285" TYPE="XREF-TEXTCOPY"Editing Generated Source Files.Code TERM1="otsh" TERM2="code regeneration"regenerationCode generation is an automated process that generates Visual Basic files. ObjectTeam ensures that n You can regenerate the Visual Basic files when you change your ObjectTeam model.n Changes that you make to the generated files, even changes made in Visual Basic, are preserved when you regenerate them.For more information, see REFID="38387" TYPE="XREF-TEXTCOPY"Regenerating Code.ID="40239"Configuring Your Visual Basic EnvironmentIntroductionTERM1="Visual Basic" TERM2="configuring environment"In ObjectTeam, you configure your Visual Basic environment in the Object Design phase and the Implementation phase.What happens in the Object Design phaseWhen you configure your Visual Basic environment in the Object Design phase, ObjectTeam adds a new system to this phase of your project: the vb_library system. This system defines the standard Visual Basic GUI classes, such as Form, Frame, CheckBox, and ListBox. You use these classes to model Visual Basic forms in ObjectTeam. For more information, see REFID="31555" TYPE="XREF-TEXTCOPY"Chapter 4, Modeling the GUI.What happens in the Implementation phaseWhen you configure your Visual Basic environment in the Implementation phase, ObjectTeam copies the ClassSet.cls file to the user_environment\src directory, where user_environment is the file path for your generated files. (For more information about the user environment, see the ObjectTeam Project Management Guide.)This Visual Basic class is automatically included in all generated Visual Basic projects. It is referenced in the Visual Basic code generated for associations with a multiplicity of many. For more information about how the ClassSet class is used, see REFID="16716" TYPE="XREF-TEXTCOPY"Mapping Associations Based on Multiplicity.How to configure the environment in Object DesignΣ To configure the Visual Basic environment in the Object Design phase:1 Move to Object Design Phase level, or System level in the Object Design phase.2 Select Utilities | Configure Visual Basic Environment.ObjectTeam creates the GUI Class Library system in the Object Design phase.How to configure the environment in ImplementationΣ To configure the Visual Basic environment in the Implementation phase:1 Move to Implementation Phase level, or System level in the Implementation phase.2 Select Utilities | Configure Visual Basic Environment.ObjectTeam copies the ClassSet.cls file to the user_environment\src directory.Errors if you have not configured the Visual Basic environmentObject Design phaseIf you have not configured your Visual Basic environment in the Object Design phase, the ObjectTeam classes used for modeling Visual Basic forms and controls are not defined. When you generate Visual Basic source files, forms (.frm files) are not generated. Note: A form file is generated for each ObjectTeam class that is a subclass of the Window class. The Window class is defined in the GUI Class Library system. If the Window class is not defined, no forms are generated.Implementation phaseIf you have not configured your Visual Basic environment in the Implementation phase, when you open a generated Visual Basic project, Visual Basic displays an error message indicating that it cannot locate the ClassSet class.TERM1="Implementation" TERM2="importing systems"TERM1="importing" TERM2="in Implementation Phase"ID="22287"Generating Visual Basic Source FilesResult of generatingWhen you generate source files, the code generator uses the CDs and CDMs that are in the Object Design phase to create Visual Basic source files in the Implementation phase. At System level of the Implementation phase, you can then refine the source code and complete the application.Implementation Phase is differentThe System level of the Implementation phase is fundamentally different from System level of any other phase. In the Implementation phase, the System files are Visual Basic files. In other phases, the System files are ObjectTeam diagrams.Generate code on Phase or System levelYou can generate code on the Implementation Phase level or on the System level of the Implementation phase.n On the Implementation Phase level, you can generate code for one or more systems. This creates a matching system in the Implementation Phase that contains the generated source files. To regenerate code for an existing system, use System level.n On the System level of the Implementation phase, you can (re)generate code for the entire system, or regenerate selected source files.Typically, you use Implementation Phase level to generate code for a system initially and System level to regenerate code subsequently.How to generate code on Implementation Phase levelΣ To generate source files on the Implementation Phase level:1 In the Browser, move to the Implementation Phase level.2 Select Utilities | Generate Visual Basic.A cascading menu appears.3 Select New Systems or Specific Systems:- Select New Systems to generate code for all systems from the Object Design phase for which no code has been generated yet.- Select Specific Systems to generate code for one or more systems in the Object Design phase. You can select only systems that do not yet exist in the Implementation phase.ObjectTeam opens a Monitor window for displaying log messages, then generates source files for the systems.ID="10881"How to generate code on System levelΣ To generate (selected) source files for a system from System level of the Implementation phase:1 In the Browser, move to the System level of the Implementation phase.2 Select Utilities | Generate Visual Basic.A cascading menu appears.3 Select New, Selected, or All:- Select New to generate code for all classes that are defined in this system and that have not yet been generated into code.- Select Selected to regenerate the files that you have selected in the Information area of the browser.- Select All to (re)generate code for all classes that are defined in this system.ObjectTeam opens a Monitor window for displaying log messages, then generates code for the files. The following illustration shows the Monitor window after generating code for a system that contains only one class.FILENAME="00922.unk" ORIGFILE="pics/imp_vb.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbcodegn.fm5.mif"Location of the source filesThe Visual Basic files are stored in the repository as external files. They are also written to the user environment. (See the ObjectTeam Project Management Guide for more information about the user environment.) The following illustration shows how the source files appear in the Browser.FILENAME="00923.unk" ORIGFILE="pics/vbfiles.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbcodegn.fm5.mif"TERM1="user environment" TERM2="updating"TERM1="Update User Environment (Utilities menu)"Update user environmentUtilities | Update User Environment updates your user environment based on the repository. This can be particularly useful if you are working on two machines, and the user environment of each is set to a local drive. When you move between machines, you can use Utilities | Update User Environment to update the local drive of the current machine.Generated filesThe Visual Basic code generator generates the following files:TERM1="Visual Basic" TERM2="generating files"TERM1="generating Visual Basic files"TERM1=".bas file"TERM1=".frm file"TERM1=".vbp file"TERM1=".cls file"TERM1=".bas file"TERM1=""TERM1=".cls file"TERM1=""TERM1=".vbp file"TERM1=""TERM1=".frm file"COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"File TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"classname.cls COLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that represents a Visual Basic class module. Each file contains the code generated for the attributes, operations, and associations of the class.COLNAME="1" VALIGN="TOP" MOREROWS="0"classname.frm COLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that represents a Visual Basic form. Each file contains the code generated for the attributes, operations, and associations of the class. It also contains the definition of the form, its controls, and their events.COLNAME="1" VALIGN="TOP" MOREROWS="0"classnameExtras.bas COLNAME="2" VALIGN="TOP" MOREROWS="0"One for each ObjectTeam class that contains class features name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' attributes or operations prefixed with a dollar sign ($). Each file contains the code generated for the class features, which are global in scope.COLNAME="1" VALIGN="TOP" MOREROWS="0"systemname.vbpCOLNAME="2" VALIGN="TOP" MOREROWS="0"One per system. This file contains declarations for all the files in the system.When code is not generatedThe Visual Basic code generator generates code for all classes defined in the current system. It does not generate code in the following situations:n If a CD in the current system contains a class that is defined in another system, the code generator does not generate code for that class.n If a CD in the current system contains a class component (a graphical element) that does not have an associated item (a semantic element), the code generator does not generate code for that class.Note: For more information about components and items, see REFID="29698" TYPE="XREF-TEXTCOPY"Working With Items on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'30 in REFID="35957" TYPE="XREF-TEXTCOPY"Chapter 3, Working With Diagrams, of the ObjectTeam Modeling Guide.ID="36285"Editing Generated Source FilesIntroductionWhen code generation is successful, you can relate each of the generated class modules (.cls files), forms (.frm files), and basic modules (.bas files) to a specific class in the Object Design phase. This section describes how to edit these generated files so that your changes are preserved when you regenerate them.Visual Basic project fileThe Visual Basic code generator also generates a Visual Basic project (.vbp) file for each ObjectTeam system. REFID="35288" TYPE="XREF-TEXTCOPY"Editing the Visual Basic Project File describes how to edit the Visual Basic project file.ID="30200"Editing generated filesThe generated Visual Basic files serve as framework files. They contain the functions and code that reflect your model, but not all of the code necessary for the application. Comments in the generated code indicate where you should add code to complete the application:n TERM1="Visual Basic" TERM2="editing generated files"TERM1="editing generated files"TERM1="generated files" TERM2="editing"A function is generated for each operation defined in an ObjectTeam class; however, you must add the code that implements the function. The body of each generated function contains the following comment. Add code below the comment.' Implement this function!n A class_Constructor function is generated for each ObjectTeam class that represents a Visual Basic class module. (The constructor function is not generated for a Visual Basic form.) The body of each generated constructor function contains the following comment. Optionally, add code below the comment:' Implement this function!n Other generated functions, such as the Get, Set, and Let functions, contain generated code. The body of these functions include the following comments. Optionally, add code between the comments:' Start user section' End user sectionChanges are preservedChanges you make to generated Visual Basic files are preserved when you regenerate the files, provided that you adhere to the following guidelines:n TERM1="code regeneration" TERM2="regeneration markers"TERM1="regeneration markers"Do not delete generated comments. The Visual Basic code generator uses the comments to parse the generated source files.n Add code only where indicated by comments, as described above.n If you add variables or functions (public or private) to a generated form, class module, or basic module (.frm, .cls or .bas file), use round-trip engineering to add the appropriate attributes or operations to the ObjectTeam model before regenerating the files.n If you add controls to a generated form (.frm file), use round-trip engineering to add the appropriate classes to the ObjectTeam model before regenerating the files.For more informationSee REFID="39943" TYPE="XREF-TEXTCOPY"Round-Trip Engineering for more information.Two ways to edit generated filesYou can edit the generated Visual Basic files in ObjectTeam or in Visual Basic.How to edit generated files in ObjectTeamΣ To edit the generated files in ObjectTeam:1 Move to System level in the Implementation phase.2 In the Information area, double-click on the source file that you want to edit, or select the source file and then select File | Edit.ObjectTeam creates a temporary file containing the working version of the selected Visual Basic file and opens that file in your default text editor. After you have edited, saved and closed the text file, ObjectTeam stores the updated text file back in the repository and the user environment, then deletes the temporary file.How to edit generated files in Visual BasicΣ To edit the generated files in Visual Basic, open the generated Visual Basic project file.The generated class, form, and basic files are available within the project.ID="35288"Editing the Visual Basic Project FileSystem maps to projectEach ObjectTeam system maps to a Visual Basic project. When you generate Visual Basic code for a system, the code generator also generates a Visual Basic project file, systemName.vbp.Regenerating the project fileWhen you regenerate Visual Basic class modules (.cls files), forms (.frm files), or basic modules (.bas files), ObjectTeam preserves changes that you made to those files in Visual Basic.This is not true for project files. Project files are always based on the auto32ld.vbp customization file. To (re)generate a Visual Basic project file, the code generator copies auto32ld.vbp to systemName.vbp and then updates systemName.vbp.Generated project fileThe generated project file, systemName.vbp, contains the following:n The Startup Object property of the Visual Basic project. This property specifies the form or Sub/Main that executes first. The code generator sets this property to the name of the class whose Startup Form class property is set, as described in REFID="14886" TYPE="XREF-TEXTCOPY"Editing Class Properties.n Other project properties of the Visual Basic project, as specified in the auto32ld.vbp customization file.n The list of files in the project: the generated Visual Basic files plus any files specified in the auto32ld.vbp customization file.Do not edit the generated project fileDo not edit the generated Visual Basic project file. Because project files are always based on the auto32ld.vbp customization file, your changes will be lost when you regenerate the project file. Instead, to modify the generated Visual Basic project file, edit the auto32ld.vbp customization file.ID="10368"Reasons for editing auto32ld.vbpYou edit the auto32ld.vbp customization file when you want to modify the Visual Basic project (.vbp) file generated by ObjectTeam. Typically, there are two reasons for doing this:n You want to change the Visual Basic project properties, other than the Startup Object property.n You want to use ActiveX controls, as described in REFID="28506" TYPE="XREF-TEXTCOPY"Modeling ActiveX Controls.In Visual Basic, to use an ActiveX control in a project, you must first add the ActiveX control to the project. The ActiveX controls are stored in the .vbp file.How to modify the generated project fileΣ To modify the generated project file:1 Edit the auto32ld.vbp customization file, as described in REFID="13931" TYPE="XREF-TEXTCOPY"Editing the auto32ld.vbp Customization File.2 Regenerate the project file:a In the Browser, move to the System level of the Implementation phase.b Select the generated project file.c Select File | Generate Visual Basic | Selected.ID="13931"Editing the auto32ld.vbp Customization Fileauto32ld.vbp fileA default customization file auto32ld.vbp is supplied by Cayenne Software. This file is stored in the etc directory of the ObjectTeam module Visual Basic Code Generation. You can customize it by creating your own auto32ld.vbp file and store it as customization file in the repository or as user customization file in the user_home\icase directory.For more informationSee REFID="10368" TYPE="XREF-TEXTCOPY"Reasons for editing auto32ld.vbp for the file auto32ld.vbp. See REFID="20512" TYPE="XREF-TEXTCOPY"Prerequisites for ObjectTeam modules. For general information about customization files, see the ObjectTeam Customization GuideLevels of customizationFrom high to low, the levels for customization files are:n Corporaten Projectn Configurationn Implementation Phasen System in Implementation PhaseNote: The auto32ld.vbp customization file must be available when you generate the Visual Basic files. Therefore, creating this customization file in a phase other than Implementation has no effect.Which customization file is usedIf you have more than one auto32ld.vbp customization file, the code generator uses the lowest-level customization file. For example, a System-level customization file is used before a Phase-level customization file.How to create a new auto32ld.vbp fileIf you are editing the auto32ld.vbp customization file for the first time, you can create a new auto32ld.vbp customization file that contains the desired project information.Σ To create a new auto32ld.vbp customization file:1 In Visual Basic, create the project file that you want to use:a Create a new project of type Standard EXE.b Delete the form that is automatically added to the project.c Make the desired changes.Tip: Use Project | Project Properties to change project properties. Use Project | Components to add ActiveX controls (.ocx files) to the project.d Save the project.The project (.vbp) file created by Visual Basic is the project file that you want to use.2 In ObjectTeam, create an auto32ld.vbp customization file:a Move to the level on which you want to create the customization file. For example, to create a Project-level customization file, move to Project level.b Select View | Pseudo and open the <customization files> pseudo object.c Select File | New | Customization File Version.d In the entry field, type auto32ld.vbp.Note: You must type the name of this customization file in the entry field because the auto32ld.vbp customization file does not appear in the list of customization files.e Select Edit to create the customization file and open it for editing.3 Edit the auto32ld.vbp customization file:Tip: In the previous step, if you selected OK instead of Edit, double-click on the auto32ld customization file to open it.a Open the Visual Basic project (.vbp) file that you created in step 1.b Copy the contents of the project file into the auto32ld.vbp customization file.c Save the customization file.d Close both files.How to edit an auto32ld.vbp fileCustomization files, except those on Corporate level and in ObjectTeam modules, are in the Cayenne repository. They are not available as files in the file system. Therefore, if you have an auto32ld.vbp customization file and you want to modify it, use the following procedure.Σ To edit an existing auto32ld.vbp customization file:1 Open the auto32ld.vbp customization file and save it to a temporary project file; for example, tempproj.vbp.2 Close the auto32ld.vbp customization file without saving it.3 In Visual Basic:a Open the temporary project file.b Make the desired changes.Tip: Use Project | Project Properties to change project properties. Use Project | Components to add ActiveX controls (.ocx files) to the project.c Save the project.The modified project file is the project file that you want to use.4 Open the auto32ld.vbp customization file.5 Replace the contents of the auto32ld.vbp customization file with the contents of the temporary project file.6 Save and close the auto32ld.vbp customization file.7 Delete the temporary project file.ID="38387"Regenerating CodeDesign changes and code changesObjectTeam supports incremental development. You can generate code from your models, edit that code, and regenerate the code without losing your changes.You can work with models during design and with code during implementation, shifting your focus between the two as necessary. It is, however, important that you make changes where appropriate.n Change the code when you are adding code that is not generated by ObjectTeam (for example, adding method bodies) or when you are making local changes (for example, adding a missing variable, procedure, or control).Note: If you add variables, procedures, or controls to a generated file, use round-trip engineering to update the ObjectTeam model before regenerating the source files. See REFID="39943" TYPE="XREF-TEXTCOPY"Round-Trip Engineering for more information.n Change the model when you are changing the structure of the model (for example, if you are changing the class hierarchy or class associations), or when you are making global changes to the code (for example, if you are changing the name of a class, attribute, or operation).Editing generated filesThe generated Visual Basic files are framework files that you need to complete. Comments in the file indicate where you should add code.Always edit the generated files in accordance with the guidelines described in REFID="36285" TYPE="XREF-TEXTCOPY"Editing Generated Source Files. This ensures that your changes are preserved when you regenerate the Visual Basic files.Editing the ObjectTeam modelThe ObjectTeam model is always used as the source for generating the Visual Basic files. If you change the ObjectTeam model, you generally want to regenerate the Visual Basic files.ID="20849"Old filesIf the previously generated source file contains operations or form controls that are no longer in the ObjectTeam model, the code generator saves the originally generated file. This saved copy of the generated file is marked as an old file and appears highlighted in the Information area of the Browser. The newly generated source file does not contain the obsolete operations or form controls.You can compare the old and new copies of a generated file, copying sections of the old file to the new file as necessary. However, you must always delete the old files before regenerating the Visual Basic files.Preserving filesIf you want to save both the old files and the new files, you can always copy the old files to another directory before deleting them from the Browser. Alternatively, before changing the ObjectTeam model, you might want to freeze both the model and the generated Visual Basic files. This ensures that you have a stable version of the model and generated files to return to should your changes to the model not give the desired results.How to regenerate codeWarning: You must delete old files before you can regenerate code.Σ To regenerate a Visual Basic project:1 In the Implementation phase, move to the System that you want to regenerate.2 Select Utilities | Generate Visual Basic | All.ObjectTeam opens a Monitor window for displaying log messages, then generates all the files.Σ To regenerate one or more Visual Basic files:1 In the Implementation phase, move to the System that contains the files that you want to regenerate.2 Select the files that you want to regenerate.3 Select Utilities | Generate Visual Basic | Selected.ObjectTeam opens a Monitor window for displaying log messages, then imports the selected files.For more informationSee REFID="22287" TYPE="XREF-TEXTCOPY"Generating Visual Basic Source Files for more information about the Utilities | Generate Visual Basic menu item.Chapter 3 Mapping ID="16205"Modeling Data to Visual Basic Class ModulesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Visual BasicClass modules and formsThe only difference between a Visual Basic form and a Visual Basic class module is that a form contains a graphical user interface (GUI).Two chapters of informationThe following chapters describe how ObjectTeam classes map to Visual Basic code:n This chapter describes all the mappings that are common to class modules and forms. It provides examples of CDs and the results produced when you generate Visual Basic files.n Chapter 4, Modeling the GUI, describes how a class that represents a form is used to model the form's GUI.Summary of mappingsThe following table summarizes the default mappings described in this chapter:COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="2" VALIGN="TOP" MOREROWS="0"Visual BasicCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class module or formCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Private attribute declarationPublic property procedures (get, set, and let procedures for accessing the attribute)COLNAME="1" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Public procedureCOLNAME="1" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Private attribute declarationPublic property procedures (get, set, and let procedures for accessing the association attributes)ExamplesFor simplicity, the examples in this chapter generate class modules. The same code could be generated for forms.For example, this chapter describes the Visual Basic code generated for attributes. In the example, the ObjectTeam class that contains the attribute represents a class module; therefore, the code is generated in a .cls file. However, if you place a similar attribute in an ObjectTeam class that represents a form, the same code is generated in a .frm file.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19591" TYPE="XREF-TEXTCOPY"Mapping Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36032" TYPE="XREF-TEXTCOPY"Mapping Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13082" TYPE="XREF-TEXTCOPY"Mapping Operations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28724" TYPE="XREF-TEXTCOPY"Mapping Inheritance 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'24COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31110" TYPE="XREF-TEXTCOPY"Mapping Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26ID="19591"Mapping ClassesClassesAn ObjectTeam class can represent a Visual Basic form, form control, or class module.n Form. If an ObjectTeam class is a subclass of the Window class, it represents a form and the code generator creates a .frm file. The Window class is defined in the vb_library system.n Control. If an ObjectTeam class is a subclass of the NodeControl or LeafControl class, it represents a control. Controls are part of a form and are defined in the .frm file. The NodeControl and LeafControl classes are defined in the vb_library system.n Class module. If an ObjectTeam class is not a subclass of any class defined in the vb_library system, it represents a class module and the code generator creates a .cls file.vb_library systemThe vb_library system defines the classes that are used to model forms and form controls in ObjectTeam. This system is added to the Object Design phase of your project when you configure your Visual Basic environment, as described in REFID="40239" TYPE="XREF-TEXTCOPY"Configuring Your Visual Basic Environment.Attributes and methodsAn attribute in an ObjectTeam class maps to a variable declaration in a Visual Basic class module or form. An operation in an ObjectTeam class maps to a procedure declaration in a Visual Basic class module or form.Class featuresClass features name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' an attribute or operation prefixed with a dollar sign ($) name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' in an ObjectTeam class map to a variable declaration or procedure declaration in the Visual Basic basic module. If an ObjectTeam class contains class features, the code generator creates two files for the class: a basic module (classExtras.bas file) and either a form (.frm file) or class module (.cls file).ConstructorsIn Visual Basic, the class constructor is an intrinsic procedure named Initialize. The Initialize procedure does not accept arguments.To support a constructor that allows arguments, the Visual Basic code generator creates a class_Constructor procedure for each generated class module and form. REFID="25089" TYPE="XREF-TEXTCOPY"Generating Class Constructors describes how to create and use this generated constructor.Class propertiesYou use ObjectTeam's class properties to provide input to the code generator. REFID="14886" TYPE="XREF-TEXTCOPY"Editing Class Properties describes how to edit class properties, and the effect of each property.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33172" TYPE="XREF-TEXTCOPY"Mapping Special Classes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25089" TYPE="XREF-TEXTCOPY"Generating Class Constructors 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14886" TYPE="XREF-TEXTCOPY"Editing Class Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9ID="33172"Mapping Special ClassesIntroductionObjectTeam supports three special classes: n A typedef class is any ObjectTeam class that has exactly one attribute. It has no associations that generate code, no operations, and no superclasses.n A generic typedef class is any ObjectTeam class that has exactly one association that generates code. It has no data attributes, no operations, no superclasses, and no subclasses.n An enum class is any ObjectTeam class that has only class attributes whose data type is enum. It has no operations, no superclasses, no subclasses, and no associations that generate code.typedef and generic typedef classTERM1="constructor" TERM2="not generated"TERM1="typedef class"TERM1="generic typedef class"The typedef and generic typedef classes are designed for use with C++ code generation. The Visual Basic code generator maps these classes to Visual Basic class modules or forms; however, it does not automatically generate a class_Constructor procedure for them. To generate the class_Constructor procedure for a typedef or generic typedef class, add a $create operation to the class.Enum classTERM1="enum class"TERM1="Visual Basic" TERM2="enumerations"An enum class maps to an enumeration declared in a Visual Basic basic module (classExtras.bas).n Each attribute name is used to form a symbolic name: class_attribute.n If specified, the initial value of the class attribute must be an integer constant; if omitted, the symbolic names are assigned integer values, in order, beginning with 1.Tip: An attribute or parameter whose value will be an enumerator should be assigned a data type of integer.Example enumerationThe following code excerpt shows the classExtras.bas file created for the enum class CreditType.FILENAME="00924.unk" ORIGFILE="pics/enum.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Attribute VB_Name = "CreditTypeExtras"Option Explicit' User defined EnumsEnum CreditType high = 1 medium = 2 low = 3End EnumID="25089"Generating Class ConstructorsIntroductionIn Visual Basic, the class constructor is an intrinsic procedure named Initialize. The Initialize procedure does not accept arguments.class_Constructor procedureTo support a constructor with an argument list, the Visual Basic code generator creates a procedure named class_Constructor for each generated Visual Basic class module and form. If you choose to use the class_Constructor procedure, each time you create an instance of the class or form, invoke the constructor procedure:Dim cust As New customercustomer_Constructor ("John Smith")Parameter listTERM1="class" TERM2="constructor"TERM1="constructor" TERM2="generating"TERM1="method" TERM2="constructor"TERM1="$create() operation"TERM1="$create() operation"TERM1=""TERM1="Visual Basic" TERM2="class constructor"The parameter list of the class_Constructor procedure depends on the $create operation of the ObjectTeam class:n If the class has no $create operation, or has a $create operation without parentheses or parameters, the parameter list of the class_Constructor procedure includes the following:- All key attributes (attributes prefixed with *).- The association attribute of each association that has, at the far end, a multiplicity of exactly one and a role name.Note: If the association has a qualifier at the far end, and both ends of the association have role names, the qualifier is also included in the parameter list. See the examples.n If the class has a $create operation that includes a parameter list, even an empty parameter list, that parameter list is used for the class_Constructor procedure. ExampleThe following code excerpt shows the class_Constructor procedure created for the Customer class. FILENAME="00925.unk" ORIGFILE="pics/constr1.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Public Sub Customer_Constructor(i_name As String, a_acct As Account) name = i_name Set acct = a_acct ' Start user section ' End user sectionEnd SubExample2The following code excerpt shows the class_Constructor procedure created for the Customer class.FILENAME="00926.unk" ORIGFILE="pics/constr2.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Public Sub Customer_Constructor(i_name As String) name = i_name ' Start user section ' End user sectionEnd SubID="14886"Editing Class PropertiesIntroductionIn the Object Design phase, you can define properties of a class.n The Text property provides a description of the class, which is included as a comment in the generated code.n The GUI Library property is used for modeling form controls.n The Startup Form property identifies the first form the application executes.How to edit class propertiesTERM1="Edit Properties (Item menu)" TERM2="for class"TERM1=""TERM1="class property" TERM2="editing"Σ To edit properties of a class:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select the class name.The class properties appear on the right side of the dialog box.FILENAME="00927.unk" ORIGFILE="pics/clsprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"4 Select the desired properties:- Use the Text tab to enter a description of the class. This text does appear in the generated code as a coment.- Use the GUI Library field of the Misc tab to identify the library that contains the custom controls used on the form that is represented by this class.Note: For more information about how and when to use this property, see REFID="28506" TYPE="XREF-TEXTCOPY"Modeling ActiveX Controls.- Use the Startup Form field of the Misc tab to select the startup object for the Visual Basic project. Set this property for exactly one class that is a subclass of either the Form or MDIForm class, or do not set this property for any class.Note: For more information on how and when to use this property, see REFID="41821" TYPE="XREF-TEXTCOPY"Modeling Windows.5 Select OK.ID="36032"Mapping AttributesIntroductionTERM1="attribute" TERM2="mapping of"TERM1="mapping" TERM2="attribute"TERM1="Visual Basic" TERM2="variables"ObjectTeam data attributes map to Visual Basic attributes and property procedures.Attribute syntaxIn ObjectTeam, you use the following syntax to specify data attributes for a class:[ * | $ | / ] name : type [ = initial-value ]wheren * indicates a key attribute. A key attribute is mapped to a private variable. It is also included in the parameter list of the class_Constructor procedure. n $ indicates a class attribute.n / indicates a derived attribute. Visual Basic does not support derived attributes; therefore, this indicator is ignored by the code generator.TERM1="derived attribute"TERM1="/ (derived attribute)"n type is either a standard type or the name of another class, as described in REFID="38998" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types.n initial-value, if specified, is an initial value that gets assigned to the variable in the generated class_Constructor procedure.TERM1="attribute" TERM2="default value"TERM1="default value, for attribute"TERM1="initial value, for attribute"Attribute maps to variableTERM1="variable, in Visual Basic"By default, a data attribute maps to a private variable declaration and public property procedures. The following code example, shows the translation of the name attribute:FILENAME="00928.unk" ORIGFILE="pics/cust.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"' User defined attributesPrivate name_ As String...' Access methodsPublic Property Get name() As String name = name_End PropertyPublic Property Let name(x As String) name_ = xEnd PropertyClass attribute maps to global variableTERM1="attribute" TERM2="class attribute"TERM1="class variable"TERM1="$ (class attribute)"A class attribute maps to a Visual Basic global variable named class_attribute. The variable declaration appears in the basic module for the class (classExtras.bas). The public property procedures that provide access to the variable appear in the generated class module or form.Attribute propertiesYou use attribute properties to provide input to the code generator. REFID="30848" TYPE="XREF-TEXTCOPY"Editing Attribute Properties describes how to edit attribute properties, and the effect of each property.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38998" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30848" TYPE="XREF-TEXTCOPY"Editing Attribute Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35359" TYPE="XREF-TEXTCOPY"Specifying Access Functions for Data Attributes 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="38998"Specifying Attribute Data TypesIntroductionTERM1="data type" TERM2="for attribute"TERM1="attribute" TERM2="data type"Specify the data type of an attribute (or parameter) using either a standard data type or the name of another class. Standard data typesThe standard data types are defined by the TERM1="stand_types customization file"stand_types customization file. These are the data types that are valid in the Object Design phase.The translation between standard data types and Visual Basic data types is defined by the TERM1="lang_types customization file"lang_types customization file. These are the translations used by the Visual Basic code generator.Customizing the standard data typesYou can add additional data types to the list of standard types by editing the stand_types customization file. If you add additional standard types, you must also provide translations for those data types by editing the lang_types customization file.By default, the stand_types and lang_types customization files are stored in the directory M4_home\modules\visualbasic\etc. You can create and edit them at a lower level, such as Project level. (The customization files at the lower level override the customization files at the higher level.)For more informationThe ObjectTeam Customization Guide describes how to create and edit customization files. The stand_types and lang_types customization files are ASCII files that can be edited using any text editor.Arrays of variablesThe Visual Basic code generator does not support specification of arrays in ObjectTeam; that is, you cannot use the ObjectTeam notation attr-name:type[x]. However, Variant variables can hold arrays in Visual Basic. Therefore, to create a variable that can hold an array, use the Variant data type:attr-name : variantControl arraysControl arrays, which are used with forms, are supported. See REFID="16805" TYPE="XREF-TEXTCOPY"Modeling Control Arrays for more information.ID="30848"Editing Attribute PropertiesIntroductionIn the Object Design phase, you define properties of the data attributes.n The Text property allows you provide a description of the attribute, which is included as a comment in the generated code.n The Attribute Access Method property allows you to specify which property procedures (Get, Set, and Let procedures) are generated and whether they are public or private.How to edit attribute propertiesTERM1="Edit Properties (Item menu)" TERM2="for attribute"TERM1=""TERM1="attribute property" TERM2="editing"Σ To edit attribute properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an attribute name from the list in the left-hand pane of the dialog box.The attribute properties appear on the right side of the dialog box.FILENAME="00929.unk" ORIGFILE="pics/attrprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"4 Select the desired properties:- Use the Text tab to enter comment text. The comment appears before the attribute declaration.TERM1="comment" TERM2="for attribute"TERM1=""TERM1="attribute property" TERM2="for comment"TERM1=""TERM1="Visual Basic" TERM2="comment, for attribute"- Use the Attribute Access Methods field on the Access tab to specify the access methods for the data attribute, as described in REFID="35359" TYPE="XREF-TEXTCOPY"Specifying Access Functions for Data Attributes.5 Select OK.ID="35359"Specifying Access Functions for Data AttributesIntroductionTERM1="attribute" TERM2="access method"TERM1="attribute property" TERM2="access method"TERM1="access property" TERM2="for attribute access method"TERM1=""TERM1="Visual Basic" TERM2="attribute access method"TERM1="attribute access method"TERM1="method" TERM2="attribute access"An access method is a special type of procedure that gets (reads) and sets (writes) an attribute's value. Use the Attribute Access group box on the Misc tab of the Edit Properties dialog box to specify which access methods should be generated.Read and Write fieldsThe Attribute Access group box allows you to specify the access function for both read and write. The setting you specify in the Read field affects the Get attribute access function. The setting you specify in the Write field affects the Set or Let attribute access function.Access functionsThe following values are allowed for both Read and Write fields. You can enter the same or different values in the two fields.n Public (default). The generated function is accessible anywhere the class name is accessible.n Private. The generated function is only accessible in the body of the class in which the attribute is declared.n None. The function is not generated.ExampleThe code excerpt below shows the access methods generated for the Customer class, which has one attribute, name. In the Attribute Access group box, both the Read and Write fields are specified as Public (the default).' Access methodsPublic Property Get name() As String name = name_End PropertyPublic Property Let name(x As String) name_ = xEnd PropertyID="13082"Mapping OperationsOperation syntaxIn ObjectTeam, you use the following syntax to specify operations for a class:[ $ ] name ( [ parameter-list ] ) [ : return_type ] [ {abstract} ]wheren $ indicates a class operationn name is the operation nameTip: Visual Basic does not support overloaded methods; therefore, every operation in a class must have a unique name.TERM1="overloaded functions"n parameter-list is a comma-separated list of parameters, where each parameter is specified as follows:parameter_name : data_typeThe type of a parameter must be either a standard type or a class modeled in the CD. Specifying the data type of a parameter is similar to specifying the data type of an attribute (see in REFID="38998" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types).n return_type is either a standard type or a class modeled in the CD. Specifying the return type for a procedure is similar to specifying the data type of an attribute (see REFID="38998" TYPE="XREF-TEXTCOPY"Specifying Attribute Data Types).n {abstract} indicates an abstract operation. Visual Basic does not support abstract operations; therefore, this indicator is ignored by the code generator.Operation maps to procedure or eventTERM1="procedure" TERM2="mapping of"TERM1="mapping" TERM2="procedure"TERM1="Visual Basic" TERM2="procedures"Operations defined for an ObjectTeam class map to Visual Basic procedure declarations or event declarations.n Visual Basic class modules can have procedures, but not events. Therefore, in an ObjectTeam class that represents a class module, each operation must map to a procedure.n Visual Basic form controls can have events, but not procedures. Therefore, in an ObjectTeam class that represents a form control, each operation must map to an event. n Visual Basic forms can have both procedures and events. Therefore, in an ObjectTeam class that represents a form, each operation can map to either a procedure or an event.Class operation maps to global procedureA class operation maps to a Visual Basic global procedure named class_operation defined in the basic module associated with the class.PropertiesYou use properties on operations and their parameters to provide input to the code generator. For example, the operation property Is Event determines whether the operation maps to a procedure or an event. The following sections describe how to edit these properties, and the effect of each property.Special proceduresThe Visual Basic code generator also generates the following special procedures, which you do not have to specify as operations in an ObjectTeam class:n Class constructors, as described in REFID="25089" TYPE="XREF-TEXTCOPY"Generating Class Constructors. Class constructors can be specified as $create operations on an ObjectTeam class, but do not have to be.n Attribute access functions, as described in REFID="35359" TYPE="XREF-TEXTCOPY"Specifying Access Functions for Data Attributes. Access functions are never specified as operations on an ObjectTeam class.n Association access functions, as described in REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple Associations. Access functions are never specified as operations on an ObjectTeam class.ExampleThe following code excerpt shows the default translation of the two operations on the Customer class. The Customer class represents a class module so both operations are generated as procedures. The first operation has a return type, so it is generated as a function. The second operation has no return type, so it is generated as a subroutine.FILENAME="00930.unk" ORIGFILE="pics/cust2.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Public Function checkCredit() As Integer ' Implement this function! 'End FunctionPublic Sub customerPrint() ' Implement this function! 'End SubIn this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21657" TYPE="XREF-TEXTCOPY"Editing Operation Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12681" TYPE="XREF-TEXTCOPY"Editing Parameter Properties 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22ID="21657"Editing Operation PropertiesIntroductionIn the Object Design phase, you define properties of the operations. n The Text property inserts comments.n The Method Access property specifies whether the generated operation is public or private.n The Is Event property specifies whether the operation is generated as a procedure or an event.How to edit operation propertiesTERM1="Edit Properties (Item menu)" TERM2="for operation"TERM1=""TERM1="operation property" TERM2="editing"Σ To edit operation properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select an operation name from the list in the left-hand pane of the dialog box.The operation properties appear on the right side of the dialog box.FILENAME="00931.unk" ORIGFILE="pics/operprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"4 Select the desired properties:- Use the Text tab to enter comment text. The comment appears before the procedure declaration.TERM1="comment" TERM2="for operation"TERM1=""TERM1="operation property" TERM2="for comment"TERM1=""TERM1="Visual Basic" TERM2="comment, for procedures"- Use the Method Access field on the Misc tab to specify whether the generated procedure is Public (default) or Private. See REFID="10395" TYPE="XREF-TEXTCOPY"Specifying Method Access for details.- Use the Is Event field on the Misc tab to indicate whether the operation should be generated as a method or an event.See REFID="41324" TYPE="XREF-TEXTCOPY"Specifying an Event for details.5 Select OK.ID="10395"Specifying Method AccessThe following levels of method access can be selected with the operation property Method Access:n Public (default). A public method is accessible anywhere within the program.n Protected. Effectively, this is identical to public access.n Private. A private method can only be accessed by the other methods of its class.Note: The property Method Access is ignored for class operations name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' operations prefixed with a dollar sign ($). Class operations are declared in the basic module for the class (classExtras.bas file) and are always public procedures.Note: The VisualBasic method access type Friend is not supported by ObjectTeam.)TERM1="operation property" TERM2="access"TERM1="access property" TERM2="for operation"ID="31329"VisibilityYou can display the access level of methods in your diagram by checking Options | Show Visibility in the Class Diagram Editor. Method names will then be displayed with the following leading characters indicating the method's access level:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="318p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Special characterCOLNAME="2" VALIGN="TOP" MOREROWS="0"IndicatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"+COLNAME="2" VALIGN="TOP" MOREROWS="0"PublicCOLNAME="1" VALIGN="TOP" MOREROWS="0"#COLNAME="2" VALIGN="TOP" MOREROWS="0"ProtectedCOLNAME="1" VALIGN="TOP" MOREROWS="0"-COLNAME="2" VALIGN="TOP" MOREROWS="0"PrivateThese special characters can also be used to set the access level of methods. Typing a minus sign (-) before a method name will set the access level of the method to Private, for example. Warning: The special characters only work if the menu entry Options | Show Visibility in the Class Diagram Editor has been checked. Otherwise, the special characters will just be regarded as part of the method name.ID="41324"Specifying an EventYou can specify that an operation be generated as an event rather than a procedure using the operation property Is Event. The following values are available:n Auto Detect (Default)If an operation of the same name exists on the superclass of the current class, ObjectTeam copies the parameters and return type from the operation on the superclass to the operation on the current class. If the Is Event property is set to Yes on the operation on the superclass, ObjectTeam generates the current operation as an event; if the Is Event property is set to No on the operation on the superclass, ObjectTeam generates the current operation as a procedure.If an operation of the same name does not exist on the superclass of the current class, ObjectTeam generates the current operation as a procedure.n YesGenerates the operation as an event.n NoGenerates the operation as a method.ExampleIn the following example, the Method Access property for the checkCredit operation is set to public (the default) and the Method Access property for the customerPrint operation is set to private.The Customer class represents a class module so both operations are generated as procedures. The first operation has a return type, so it is generated as a function. The second operation has no return type, so it is generated as a subroutine.FILENAME="00932.unk" ORIGFILE="pics/cust2.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Public Function checkCredit() As Integer ' Implement this function! 'End FunctionPrivate Sub customerPrint() ' Implement this function! 'End SubID="12681"Editing Parameter PropertiesIntroductionIn the Object Design phase, you define properties of operation parameters.How to edit parameter propertiesTERM1="Edit Properties (Item menu)" TERM2="for parameter"TERM1=""TERM1="parameter property" TERM2="editing"Σ To edit parameter properties:1 Select a class symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a parameter name from the list in the left-hand pane of the dialog box.The operation properties appear on the right side of the dialog box.FILENAME="00933.unk" ORIGFILE="pics/parmprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"4 Select the desired properties: - Use the Text tab to enter a description of the parameter. This text does not appear in the generated code.- Use the Pass By field on the Misc tab to specify how the parameter should be passed to the procedure: by reference (default) or by value.- Use the Optional check box on the Misc tab to specify whether the parameter is optional.Note: In Visual Basic, optional parameters must be of type Variant and all subsequent parameters must also be optional.- Use the Default Value field on the Misc tab to specify a default value for an optional parameter.5 Select OK.Example 1In the following example, the parameter properties of the creditLimit parameter are set to Pass By Reference and not Optional (the default values):Public Function checkCredit(creditLimit As Integer) As Integer ' Implement this function! 'End FunctionExample 2The following example is the same, except that the parameter properties have been changed to Pass By Value, Optional, and a Default Value of 5000:Public Function checkCredit(Optional ByVal creditLimit As Integer = 5000) As Integer ' Implement this function! 'End FunctionID="28724"Mapping InheritanceInheritance among formsThe Visual Basic code generator does not support inheritance among ObjectTeam classes that represent forms. The code generator ignores any subclass of a class that represents a form.Inheritance among class modulesThe Visual Basic code generator provides limited support for inheritance among ObjectTeam classes that represent class modules. TERM1="mapping" TERM2="class inheritance"TERM1="inheritance" TERM2="class"TERM1="class" TERM2="inheritance"The code generated for each subclass of a class that represents a class module includes:n A variable declaration that creates a new instance of the super class; the variable is public (default) or private, depending on the Inheritance Access propertyn In the class_Constructor procedure, a call to the class_Constructor procedure of the super classDisjoint and overlapping inheritanceTERM1="disjoint inheritance"TERM1="overlapping inheritance"In ObjectTeam, you can specify either disjoint or overlapping inheritance. The Visual Basic code generator does not distinguish between the two types of inheritance.COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="360p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DisjointCOLNAME="2" VALIGN="TOP" MOREROWS="0"OverlappingCOLNAME="1" VALIGN="TOP" MOREROWS="0"FILENAME="00934.unk" ORIGFILE="pics/hierdisj.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"COLNAME="2" VALIGN="TOP" MOREROWS="0"FILENAME="00935.unk" ORIGFILE="pics/hierover.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"How to edit the Inheritance Access propertyTERM1="Edit Properties (Item menu)" TERM2="for generalization"TERM1=""TERM1="inheritance access property" TERM2="editing"Σ To edit the Inheritance Access property:1 Select the inheritance symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select Generalization from the list in the left-hand pane of the dialog box.The association properties appear on the right side of the dialog box.FILENAME="00936.unk" ORIGFILE="pics/inhprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"4 TERM1="inheritance access property" TERM2="access"TERM1="access property" TERM2="for inheritance attribute"Select the desired value for the Inheritance Access property.5 Select OK.ExampleThe following code excerpts show how the code generated for the Rectangle subclass references the Shape superclass.FILENAME="00937.unk" ORIGFILE="pics/inher.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"PublicIn the following example, the Inheritance Access property is set to Public (the default):' Inheritance attributesPublic GeometricShape As New GeometricShape...' User defined methodsPublic Sub Rectangle_Constructor() GeometricShape.GeometricShape_Constructor ' Start user section ' End user sectionEnd SubPrivateIf the Inheritance Access property is set to Private, the inheritance attribute is private:' Inheritance attributesPrivate GeometricShape As New GeometricShapeMultiple inheritanceThe code generated for multiple inheritance is similar to that generated for single inheritance. In the subclass, a public variable is defined for each superclass and the generated class_Constructor invokes the class_Constructor for each superclass.ID="31110"Mapping AssociationsIntroductionTERM1="mapping" TERM2="association"TERM1="association" TERM2="mapping of"ObjectTeam and the Visual Basic code generator support the following:n Binary association (associations between two classes)n Qualified associations (associations that include a qualifier)n Link attributes (attributes used to define an association)n Association as class (class used to define an association)TERM1="n-ary association"TERM1="association" TERM2="n-ary"N-ary associationsN-ary associations are ignored by the Visual Basic code generator. Code is generated for the classes involved, but no code is generated for the n-ary association.AggregationsTERM1="aggregation"The Visual Basic code generator translates aggregations like associations, unless the aggregrations are being used to model forms. See Chapter 4, Modeling the GUI, for more information about modeling Visual Basic forms.Ordered associationsAll associations generated by the Visual Basic code generator are ordered associations: new elements are always added to the front of the list. Therefore, the {ordered} indicator on an association is unnecessary and is ignored by the Visual Basic code generator.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16716" TYPE="XREF-TEXTCOPY"Mapping Associations Based on Multiplicity 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'31COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16268" TYPE="XREF-TEXTCOPY"Mapping Qualified Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'35COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31915" TYPE="XREF-TEXTCOPY"Mapping Classes as Associations 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39ID="30084"Mapping Simple AssociationsIntroductionThis section describes how the Visual Basic code generator implements the following simple associations between the Customer class and the Book class.Unidirectional associationFILENAME="00938.unk" ORIGFILE="pics/asscuni.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Bidirectional associationFILENAME="00939.unk" ORIGFILE="pics/asscbi.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Unidirectional and bidirectionalTERM1="association" TERM2="unidirectional"TERM1="unidirectional association"TERM1="association" TERM2="bidirectional"TERM1="bidirectional association"TERM1="one-to-one association"TERM1="association" TERM2="one-to-one"The direction of an association is defined by the role names on the association. A role name at the far end of the association indicates an association from the class at the near end to the class at the far end.If an association has a role name at only one end, it is a unidirectional association (implemented in one direction). If an association has role names at both ends, it is a bidirectional association (implemented in both directions).Mapping a unidirectional associationTERM1="Visual Basic" TERM2="association attribute"TERM1="Visual Basic" TERM2="association attribute access method"The Visual Basic code generator implements a unidirectional association by adding an association attribute and a set of association methods to the code generated for the class at the near end of the association. This allows the class at the near of the association (Customer) to access the class at the far end (Book); the class at the far end of the association cannot access the class at the near end.Mapping a bidirectional associationThe Visual Basic code generator implements a bidirectional association by adding an association attribute and a set of association methods to the code generated for both classes. This allows each class to access the other. To ensure integrity of a bidirectional association, the update method for a bidirectional association always maintains the association in both directions.Example of a unidirectional associationFollowing is an excerpt from the code generated for the Customer class in the unidirectional association. Because this is a unidirectional association, the Book class does not contain any code related to the association.VERSION 1.0 CLASS...Attribute VB_Name = "Customer...' Association attributesPrivate book_ As Book...' Association methodsPublic Property Get book() As Book Set book = book_End PropertyPublic Property Set book(x As Book) Set book_ = xEnd PropertyPublic Sub RemoveBook() Set book_ = NothingEnd SubExample of a bidirectional associationFollowing is an excerpt from the code generated for the Customer class in the bidirectional association. Because this is a bidirectional association, the Book class would contain similar code to implement the association in the other direction.VERSION 1.0 CLASS...Attribute VB_Name = "Customer"...' Association attributesPrivate book_ As Book...' Association methodsPublic Property Get book() As Book Set book = book_End PropertyPublic Property Set book(x As Book) If Not(x Is Nothing) Then If Not(x Is book_) Then If Not(book_ Is Nothing) Then book_.RemoveCust End If Set book_ = x Set x.cust = Me End If Else RemoveBook End IfEnd PropertyPublic Sub RemoveBook() If Not(book_ Is Nothing) Then Dim temp As Book Set temp = book_ Set book_ = Nothing temp.RemoveCust End IfEnd SubAssociation attributesTERM1="association attribute"TERM1="attribute" TERM2="association attribute"TERM1="association attribute access method"TERM1="method" TERM2="association attribute access"The ObjectTeam documentation and generated Visual Basic code use the term association attributes to refer to data attributes generated to support ObjectTeam associations (as opposed to data attributes generated from ObjectTeam attributes). In Visual Basic, an association attribute is simply another data attribute. The association methods use the association attributes to implement and maintain the associations between the classes.How to edit association attribute propertiesTERM1="Edit Properties (Item menu)" TERM2="for association"TERM1=""TERM1="association attribute property" TERM2="editing"Association attributes and accessors, like data attributes and accessors, have associated ObjectTeam properties. In ObjectTeam, you edit these properties by editing the properties of the association.Σ To edit association properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a role name from the list in the left-hand pane of the dialog box.The association properties appear on the right side of the dialog box.FILENAME="00940.unk" ORIGFILE="pics/asscprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"4 Select the desired properties:- TERM1="comment" TERM2="for association"TERM1=""TERM1="association attribute property" TERM2="for comment"TERM1=""TERM1="Visual Basic" TERM2="comment, for association"Use the Text tab to describe the association. This text does not appear in the generated code.- TERM1="association attribute property" TERM2="access"TERM1="access property" TERM2="for association attribute"Use the Association Access field on the Misc tab to specify which association methods are generated for the association attribute, as described in REFID="35359" TYPE="XREF-TEXTCOPY"Specifying Access Functions for Data Attributes.5 Select OK.ID="16716"Mapping Associations Based on MultiplicityIntroductionThe code generated for an association depends on the multiplicity of the association. This section shows an example of the code generated for each type of association. For simplicity, all of the associations shown in this section are unidirectional associations.PrerequisiteThis section assumes that you are familiar with the information in the previous section, REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.ID="12738"Exactly oneIn the following example, each Customer must have exactly one Book:FILENAME="00941.unk" ORIGFILE="pics/asscone.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Following is an excerpt from the code generated for the Customer class. Notice the following:n Because the association is mandatory, the class constructor creates the association. To do so requires the association attribute, therefore, that attribute is included in the parameter list.n The Remove association method is not created because a mandatory association should never be removed.VERSION 1.0 CLASS...Attribute VB_Name = "Customer"...' Association attributesPublic book_ As Book...Public Sub Customer_Constructor(a_book As Book) Set book = a_book ' Start user section ' End user sectionEnd Sub...' Association methodsPublic Property Get book() As Book Set book = book_End PropertyPublic Property Set book(x As Book) If Not(x Is Nothing) Then Set book_ = x End IfEnd PropertyZero or oneIn the following example, each Customer can have zero or one Books:FILENAME="00942.unk" ORIGFILE="pics/assczero.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Following is an excerpt from the code generated for this Customer class. Because the Customer can have zero Books:n The class constructor no longer creates the association.n The Remove association method is created.VERSION 1.0 CLASS...Attribute VB_Name = "Customer"...' Association attributesPrivate book_ As Book...Public Sub Customer_Constructor() ' Start user section ' End user sectionEnd Sub...' Association methodsPublic Property Get book() As Book Set book = book_End PropertyPublic Property Set book(x As Book) Set book_ = xEnd PropertyPublic Sub RemoveBook() Set book_ = NothingEnd SubManyIn the following example, each Customer can have zero or more Books:FILENAME="00943.unk" ORIGFILE="pics/asscmany.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Following is an excerpt from the code generated for this Customer class. Now that the Customer can have more than one book:n The type of the association attribute is ClassSet. The ClassSet class, which is supplied with the Visual Basic code generator, includes special methods for handling sets of associations. Note: You copied the ClassSet class to your user environment when you configured your Implementation environment, as described in REFID="40239" TYPE="XREF-TEXTCOPY"Configuring Your Visual Basic Environment.n The association methods use the methods of the ClassSet class to get, add, and remove associations.VERSION 1.0 CLASS...Attribute VB_Name = "Customer"...' Association attributesPrivate book_ As New ClassSet...Public Sub Customer_Constructor() ' Start user section ' End user sectionEnd Sub...' Association methodsPublic Property Get book() As ClassSet Set book = book_End PropertyPublic Sub AddBook(x As Book) If Not(book_.Contains(x)) Then book_.Add x End IfEnd SubPublic Sub RemoveBook(x As Book) book_.Remove xEnd SubMany, numerically specifiedIn the following example, each Customer can have one or more Books:FILENAME="00944.unk" ORIGFILE="pics/asscnum.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"The Visual Basic code generator ignores the numeric specifier. The code generated for this type of association is identical to that generated for a Many association.Association propertiesYou can, of course, affect the code generated for any of these associations by editing the association properties, as described in REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.ID="16268"Mapping Qualified AssociationsPrerequisiteThis section assumes that you are familiar with the information in the previous section, REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.Qualified associationThis section describes how the Visual Basic code generator implements the following associations between the Customer class and the Book class. FILENAME="00945.unk" ORIGFILE="pics/asscqual.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"How to edit qualifier propertiesTERM1="Edit Properties (Item menu)" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="editing properties"You must specify the data type of the qualifier by editing the association properties.Σ To edit qualifier properties:1 Select an association symbol in the CD.2 Select Item | Edit Properties.The Edit Properties dialog appears.3 Select a qualifier from the list in the left-hand pane of the dialog box.The qualifier properties appear on the right side of the dialog box.4 Select the desired properties:- TERM1="comment" TERM2="for qualifier"TERM1=""TERM1="qualifier" TERM2="comment for"TERM1="Visual Basic" TERM2="comment, for qualifier"Use the Text tab to describe the qualifier. This text does not appear in the generated code.- Use the Misc tab to specify a data type for the qualifier.5 Select OK.Mapping the Customer-to-Book associationTERM1="association" TERM2="qualified"TERM1="qualified association"TERM1="mapping" TERM2="qualified association"The mapping of a qualified association, is similar to that of an association with multiplicity of many. For a qualified association, however, the qualifier (bookID, in the CD above) is used to identify each association in the set of associations.Example: Customer codeFollowing is an excerpt from the code generated for the Customer class shown above.VERSION 1.0 CLASS...Attribute VB_Name = "Customer"...' Association attributesPublic book_ As New ClassSet...' User defined methodsPublic Sub Customer_Constructor(i_name As String) name = i_name ' Start user section ' End user sectionEnd SubPrivate Sub Class_Terminate() ' Start user section ' End user sectionEnd Sub...' Association methodsPublic Property Get book(bookID As Integer) As ClassSet If book_.ContainsKey(CStr(bookID)) Then Set book = book_.Item(CStr(bookID)) Else Set book = Nothing End IfEnd PropertyPublic Sub AddBook(x As Book, bookID As Integer, Optional old_bookID As Integer) Dim tempSet As ClassSet If IsMissing(old_bookID) Then If Not (x.cust_ Is Nothing) Then Set tempSet = x.cust_.book_.Item(CStr(bookID)) End If Else If Not (x.cust_ Is Nothing) Then Set tempSet = x.cust_.book_.Item(CStr(old_bookID)) End If End If tempSet.Remove x Set x.cust_ = Me If book_.ContainsKey(CStr(bookID)) Then Set tempSet = book_.Item(CStr(bookID)) Else Set tempSet = New ClassSet book_.Add tempSet, CStr(bookID) End If tempSet.Add xEnd SubMapping the Book-to-Customer associationThe Visual Basic code generator provides partial support for the association opposite a qualified association. It generates the association attribute and the method for getting the association, however, it does not generate the methods for setting or removing the association.Note: The code generator displays a message warning you that the set and remove association methods have not been generated.Example: Book codeFollowing is an excerpt from the code generated for the Book class shown above. Notice the following:n Because this is a mandatory association, the Book_Constructor procedure creates the association. To do so requires both the association attribute and the qualifier, therefore, both values are included in the parameter list.n The only association method generated is the Get method.VERSION 1.0 CLASS...Attribute VB_Name = "Book"...' Association attributesPublic cust_ As Customer...' User defined methodsPublic Sub Book_Constructor(a_cust As Customer) ' Start user section ' End user sectionEnd SubPrivate Sub Class_Terminate() ' Start user section ' End user sectionEnd Sub...' Association methodsPublic Property Get cust() As Customer Set cust = cust_End PropertyAssociation propertiesYou can effect the code generated for any association by editing the association properties, as described in REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.ID="31915"Mapping Classes as AssociationsPrerequisiteThis section assumes that you are familiar with the mapping of various types of associations, as described in the previous sections.Classes on associationsObjectTeam allows you to specify information about an association by linking a class to the association. The following diagram shows a class as association symbol.FILENAME="00946.unk" ORIGFILE="pics/assclnk.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Association mapped as two associationsAn association that includes a class is transformed before code generation. The class becomes a separate class, with appropriate associations to the original classes. The generated code is then based on the transformed association.ExampleThe code generated for the CD shown above is actually based on the following CD:FILENAME="00947.unk" ORIGFILE="pics/assccnv.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgen.fm5.mif"Name used for the third classTERM1="association" TERM2="and link attribute"TERM1=""TERM1="link attribute"TERM1="mapping" TERM2="link attribute"If an attribute is linked to the association, the new class is assigned the name of the association. Therefore, an association that has a link attribute must have an association name.TERM1="association" TERM2="and class"TERM1=""TERM1="class" TERM2="as association"TERM1=""TERM1="mapping" TERM2="class, as association"If a class is linked to the association, that class is used as the third class. Therefore, an association that is described by a class does not need an association name.Role names are requiredAs with all associations, role names are required. If a role name is omitted, the association attributes and methods that would map to that role name are not generated.ExampleFollowing is the code generated for link attribute shown above:Generated code for the purchase classVERSION 1.0 CLASS...Attribute VB_Name = "purchase"...' Association attributesPublic cust_ As CustomerPublic book_ As Book' User defined attributesPrivate date_ As String' User defined methodsPublic Sub purchase_Constructor(a_cust As Customer, a_book As Book) Set cust = a_cust Set book = a_book ' Start user section ' End user sectionEnd SubPrivate Sub Class_Terminate() ' Start user section ' End user section If Not (cust_ Is Nothing) Then cust_.purchaseofbook_.Remove Me End If If Not (book_ Is Nothing) Then Set book_.purchaseofcust_ = Nothing End IfEnd Sub' Access methodsPublic Property Get date() As String date = date_End PropertyPublic Property Let date(x As String) date_ = xEnd Property' Association methodsPublic Property Get cust() As Customer Set cust = cust_End PropertyPublic Property Set cust(x As Customer) If Not (x Is Nothing) Then If Not (x Is cust_) Then If Not (cust_ Is Nothing) Then cust_.purchaseofbook_.Remove Me End If Set cust_ = x x.AddPurchaseofbook Me End If End IfEnd PropertyPublic Property Get book() As Book Set book = book_End PropertyPublic Property Set book(x As Book) If Not (x Is Nothing) Then If x.purchaseofcust Is Nothing Then If Not (book_ Is Nothing) Then Set book_.purchaseofcust_ = Nothing End If Set book_ = x Set x.purchaseofcust_ = Me End If End IfEnd PropertyGenerated code for the Customer classVERSION 1.0 CLASS...Attribute VB_Name = "Customer"...' Association attributesPublic purchaseofbook_ As New ClassSet' User defined attributesPrivate name_ As String' User defined methodsPublic Sub Customer_Constructor(i_name As String) name = i_name ' Start user section ' End user sectionEnd SubPrivate Sub Class_Terminate() ' Start user section ' End user sectionEnd Sub' Access methodsPublic Property Get name() As String name = name_End PropertyPublic Property Let name(x As String) name_ = xEnd Property' Association methodsPublic Property Get purchaseofbook() As ClassSet Set purchaseofbook = purchaseofbook_End PropertyPublic Sub AddPurchaseofbook(x As purchase) If Not(purchaseofbook_.Contains(x)) Then purchaseofbook_.Add x Set x.cust = Me End IfEnd SubGenerated code for the Book classVERSION 1.0 CLASS...Attribute VB_Name = "Book"...' Association attributesPublic purchaseofcust_ As purchase' User defined attributesPrivate title_ As String' User defined methodsPublic Sub Book_Constructor() ' Start user section ' End user sectionEnd SubPrivate Sub Class_Terminate() ' Start user section ' End user sectionEnd Sub' Access methodsPublic Property Get title() As String title = title_End PropertyPublic Property Let title(x As String) title_ = xEnd Property' Association methodsPublic Property Get purchaseofcust() As purchase Set purchaseofcust = purchaseofcust_End PropertyAssociation propertiesYou can effect the code generated for any association by editing the association properties, as described in REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple Associations.Chapter 4 Modeling ID="31555"the GUITYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Visual BasicClass modules and formsThe only difference between a Visual Basic form and a Visual Basic class module is that a form contains a GUI (graphical user interface).Two chapters of informationThe following chapters describe how ObjectTeam classes map to Visual Basic code:n This chapter describes how to model the Visual Basic GUI for a form. It provides examples of CDs and the results produced when you generate Visual Basic files.n REFID="16205" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to Visual Basic Class Modules, describes the mapping of ObjectTeam elements that are common to both Visual Basic forms and forms.PrerequisiteBefore you can model Visual Basic forms in ObjectTeam, you must add the vb_library system to the Object Design phase of your project (see REFID="40239" TYPE="XREF-TEXTCOPY"Configuring Your Visual Basic Environment). This system defines the standard Visual Basic GUI classes that are used to model Visual Basic forms in ObjectTeam.Tip: For a quick look at the classes defined in this system, open the system in ObjectTeam and examine the list of CDMs. For more detailed information, including a list of the events available for each control, use Utilities | Reports | On Classes to generate a report of the classes in the system.ExamplesFor simplicity, in the examples in this chapter, classes that represent forms have no attributes, operations, or associations (except those that are used to model the form).Typically, classes that represent forms would have attributes, operations, and associations. The code generated for these features is described in REFID="16205" TYPE="XREF-TEXTCOPY"Chapter 3, Mapping Modeling Data to Visual Basic Class Modules.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13513" TYPE="XREF-TEXTCOPY"Basic Modeling Technique 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41821" TYPE="XREF-TEXTCOPY"Modeling Windows 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39295" TYPE="XREF-TEXTCOPY"Modeling Menus 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13487" TYPE="XREF-TEXTCOPY"Modeling Frames 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10945" TYPE="XREF-TEXTCOPY"Modeling Picture Box Controls (Such As Toolbars) 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27998" TYPE="XREF-TEXTCOPY"Modeling Leaf Controls 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16805" TYPE="XREF-TEXTCOPY"Modeling Control Arrays 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="28506" TYPE="XREF-TEXTCOPY"Modeling ActiveX Controls 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26ID="13513"Basic Modeling TechniqueIntroductionThis section describes the basic technique for modeling Visual Basic forms in ObjectTeam.Sample formThe following form, a TV console, is modeled as an example:FILENAME="00948.unk" ORIGFILE="pics/vbfrmend.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"Sample CDThe following CD models the TV console form:FILENAME="00949.unk" ORIGFILE="pics/tvfrmcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22029" TYPE="XREF-TEXTCOPY"Modeling the Form 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16427" TYPE="XREF-TEXTCOPY"Adding Events 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37144" TYPE="XREF-TEXTCOPY"Completing the Form 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23395" TYPE="XREF-TEXTCOPY"Alternative Technique 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="22029"Modeling the FormIntroductionThis section describes the construction of the CD shown at the beginning of this section (see REFID="13513" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3).vb_library classesTERM1="vb_gui_lib system"The folded classes in the CD (PictureBox, Frame, Form, CommandButton, and Label) are defined in the vb_library system. Notice that every class used to model the form is a subclass of a class defined in the vb_library system.You create a class to represent each form element that you want to create. You specify the type of element that you want to create by making your class a subclass of the appropriate vb_library class. For example:n The Console class represents a Visual Basic form, therefore, it is a subclass of the Form class.n The TVScreen class represents a Visual Basic picture box control, therefore, it is a subclass of the PictureBox class.n The TVControls class represents a Visual Basic frame, therefore, it is a subclass of the Frame class.Steps for modeling the formTERM1="Visual Basic" TERM2="forms, modeling"TERM1="form" TERM2="basic modeling"The following table summarizes the steps used to create the CD:COLS="2"COLNAME="1" COLWIDTH="36p"COLNAME="2" COLWIDTH="414p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the Console class to represent the form. Also, add the Form class and make Console a subclass of Form.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Add attributes and operations to the Console class. For simplicity, in this example, only a $create operation is added.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the TVControls class to represent the frame that contains the TV controls (the TV screen and channel buttons). Also, add the Frame class and make TVControls a subclass of Frame.COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the TVScreen class to represent the picture box control. Add the PictureBox class and make TVScreen a subclass of PictureBox.COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the UpBtn and DownBtn classes to represent the command button controls. Add the CommandButton class and make UpBtn and DownBtn subclasses of CommandButton.COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Create the Channel, Brand, and Time classes to represent the label controls. Add the Label class and make Channel, Brand, and Time subclasses of Label.COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"The TVControls frame contains four controls: TVScreen, Channel, UpBtn, and DownBtn. It is an aggregation of these controls. Create the four relationships that define the aggregation. Each relationship must have a role name. The role name will be the control name in Visual Basic; for example, in Visual Basic, ChannelLbl will be the name of the channel label.COLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"The Console form is an aggregation of three controls: the TVControls frame and the Brand and Time labels. Create the three relationships that define the aggregation.COLNAME="1" VALIGN="TOP" MOREROWS="0"9COLNAME="2" VALIGN="TOP" MOREROWS="0"Add Click events to the UpBtn class and DownBtn class. See REFID="16427" TYPE="XREF-TEXTCOPY"Adding Events for more information.COLNAME="1" VALIGN="TOP" MOREROWS="0"10COLNAME="2" VALIGN="TOP" MOREROWS="0"For each class that is not defined in the system, select Item | Edit properties. If the Define item button is available, select it to define the class item. See REFID="33555" TYPE="XREF-TEXTCOPY"All classes must be defined items for more information.FormsTERM1="form" TERM2="representing in ObjectTeam"A class that represents a form is similar to a class that represents a class module. It can contain the following features:n Attributes, as described in REFID="36032" TYPE="XREF-TEXTCOPY"Mapping Attributesn Operations, as described in REFID="13082" TYPE="XREF-TEXTCOPY"Mapping Operations and REFID="16427" TYPE="XREF-TEXTCOPY"Adding Eventsn Associations to other classes that represent either forms or class modules, as described in REFID="31110" TYPE="XREF-TEXTCOPY"Mapping AssociationsForm controlsTERM1="controls" TERM2="representing in ObjectTeam"A class that represents a form control is a special type of class.n It must not have attributes.n It should not have associations, other than the aggregations used to model the form. If specified, they will be ignored by the Visual Basic code generator (or cause errors).n Each of its operations must represent an event, as described in REFID="13082" TYPE="XREF-TEXTCOPY"Mapping Operations and REFID="16427" TYPE="XREF-TEXTCOPY"Adding Events.Do not nest GUI classesThe parent class of every class used to model a form should be a class defined in the vb_library system.n If you create a class hierarchy of classes that represent forms, the child form classes are ignored by the Visual Basic code generator.n If you create a class hierarchy of classes that represent form controls, the child control classes generally cause errors in Visual Basic.ID="33555"All classes must be defined itemsObjectTeam generates code for class items. It does not generate code for graphical elements that do not have associated class items.When you create a class, ObjectTeam creates a graphical element. When you perform one of the following actions, ObjectTeam creates a class item:n Add an attribute, operation, or association to the classn Set a property on the classn Open the Edit Properties dialog box for the class and select the Define item button.ID="16427"Adding EventsEvents in vb_libraryIn Visual Basic, you use form and form control objects to create a form. Visual Basic defines a number of events for each of these objects.Classes in the vb_library system represent these Visual Basic form and form control objects. The operations on the vb_library classes represent the valid events for the object type.How to model the formAs described in REFID="22029" TYPE="XREF-TEXTCOPY"Modeling the Form, you model a form in ObjectTeam by creating a class to represent each form and form element that you want to create. You specify the type of element that you want to create by making your class a subclass of the appropriate vb_library class.How to model eventsYou model events for a form or form control by adding operations to the ObjectTeam class that represents the form or form control. If you want to use the events defined in Visual Basic, use the operations defined in the vb_library system.Is Event fieldIn ObjectTeam, the Is Event property of an operation determines whether the operation represents an event or procedure. Typically, you use the default value, Auto Detect, for this property.n Auto Detect. ObjectTeam searches for the operation on the superclass. If the operation exists and its Is Event property is set to Yes, ObjectTeam generates the operation as an event using the parameters (if any) defined on the operation of the superclass.Thus, to use the Visual Basic events for a form or form control, you only need to specify the name of the operation as it appears in the vb_library system. ObjectTeam automatically adds the parameters based on the definition in the vb_library system.n Yes. ObjectTeam generates the operation as an event using its own parameters (if any).n No. ObjectTeam generates the operation as a procedure using its own parameters (if any).ID="37144"Completing the FormIntroductionIn ObjectTeam, you model the form content, not the form layout. Thus, when ObjectTeam generates a form for the first time, the .frm file contains control declarations, but not control properties.Editing the generated formTERM1="form" TERM2="layout information"When you open the generated project in Visual Basic, the form has no layout information. It appears as shown below, with all the controls are stacked in the upper left corner. You add the layout information (reposition the fields, add captions, modify display attributes, and so on) to make it look like the sample form shown at the beginning of this section (see REFID="13513" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3).FILENAME="00950.unk" ORIGFILE="pics/vbfrmini.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"Regenerating the formTERM1="form" TERM2="regenerating"Once you add the layout information, ObjectTeam preserves that information when you regenerate the form. ID="27628"What you can change in Visual BasicREFID="36285" TYPE="XREF-TEXTCOPY"Editing Generated Source Files provides guidelines for editing generated Visual Basic files. When editing forms in Visual Basic, adhere to those general guidelines and to the following form-specific guidelines:n You can change the position and size of a form or form control.n You can change the properties of a form or form control.Note: The Name property defines the name of the form or form control. This information is also stored in ObjectTeam; therefore, it is recommended that you not change the Name property.n You can add controls to a form; however, you must then use round-trip engineering to add the controls to the ObjectTeam model before regenerating the Visual Basic files.Note: If you delete controls from a form, you must manually update the ObjectTeam module. Round-trip engineering does not delete the controls for you.n You can move a control into or out of a container (such as a frame or a picture box); however, this is the same as deleting the old control and adding a new one. In this case, you can use round-trip engineering to add the new control to the ObjectTeam model, but you must manually update the ObjectTeam model to delete the old control. Tip: After regenerating the .frm file, you might want to move the properties and events of the old control to the new one.n You can add code to a generated event. The body of each generated event contains the following comment:' Implement this function!n You can add new control events; however, you must then use round-trip engineering to add those events to the ObjectTeam model before regenerating the PowerBuilder files.For more informationSee REFID="39943" TYPE="XREF-TEXTCOPY"Round-Trip Engineering for more information.ID="23395"Alternative TechniqueTwo ways to model formsObjectTeam provides two ways to model forms:n Model the form and form controlsn Model the form onlyModel the form and form controlsAs described in the previous sections, you can use ObjectTeam to model forms and form controls, then use Visual Basic to complete the generated form. The benefit of this approach is that, while modeling the application, you remain focused on the functions of the application rather than becoming distracted by the details of the GUI.Model the form onlyAlternatively, you can use the following approach:1 In ObjectTeam, model only the form.2 Generate the form.3 In Visual Basic, add the form controls and events.4 In ObjectTeam, use round-trip engineering to add the form controls and events to the ObjectTeam model.ID="41821"Modeling WindowsIntroductionEvery window in a Visual Basic application is either a form or an MDI form.Form classTo model a form in ObjectTeam, create a class that represents the form and make it a subclass of the Form class. Most windows in a Visual Basic application are forms.MDIForm classIf you are modeling an MDI (multiple-document interface) application, the main window of the application is an MDI form. To model an MDI form in ObjectTeam, create a class and make it a subclass of the MDIForm class.RestrictionsVisual Basic places the following restrictions on MDI forms:n A project can contain only one MDI form.n An MDI form can contain only menus, picture boxes, and custom controls that have an Align property.Warning: These restrictions are not enforced by ObjectTeam.Startup objectA Visual Basic project defines an application. To run that application in Visual Basic, you must select a startup object name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' the first form or Sub/Main procedure to be executed.Specify one form as the startup objectIn Visual Basic projects that are generated by ObjectTeam, the startup object is always a form. To indicate which form should be used as the startup object, set the class property Startup Form of the class that represents that form. (REFID="14886" TYPE="XREF-TEXTCOPY"Editing Class Properties describes how to set class properties.)n If you set this property for exactly one class that is a subclass of either Form or MDIForm, that form is the startup object in the generated project (.vbp) file.n If you do not set this property for any class, no startup object is selected in the generated project (.vbp) file.n If you set this property for more than one class, or for a class that does not represent a form, the code generator displays an error message and does not generate a project (.vbp) file.ExampleSee REFID="13513" TYPE="XREF-TEXTCOPY"Basic Modeling Technique for an example of how to model a form.ID="39295"Modeling MenusMenu classTERM1="Menu class"To model menus in ObjectTeam, create a class for each menu item. All classes that represent menu items are subclasses of the Menu class, which is defined in the vb_library system.Menu structureTo define the menu structure, use aggregations:n A menu bar item is part of a form.n Each submenu item is part of its parent menu.Note: The role names become the Visual Basic control names.Sample menuFollowing is a sample menu that might be used with the TV form:FILENAME="00951.unk" ORIGFILE="pics/tvmenu.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"Sample CDThe following CD models the menu shown above:FILENAME="00952.unk" ORIGFILE="pics/tvmnucad.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"Generated .frm fileWhen ObjectTeam generates the menu for the first time, the .frm file contains menu declarations, but no menu properties. The following excerpt from the .frm file shows the menu declarations generated for the CD shown above:Begin VB.Menu ViewMnu Begin VB.Menu ChannelMnu End Begin VB.Menu ModeMnu Begin VB.Menu BlackWhiteMnu End Begin VB.Menu ColorMnu End End EndEditing the generated fileWhen you open the generated project in Visual Basic, you might not see the menu controls because they have no Caption properties.In Visual Basic, edit the Caption property of each menu control to specify the text of the menu item. You can modify other properties, if desired. ObjectTeam preserves these properties when you regenerate the form.Separate CD for menusFor clarity, the CD shown above defines only the menu items for the form; it does not define all the other controls. Modeling your menus in a separate CD, as shown here, helps keep your CDs readable and makes your model easier to maintain.Console classThe CD shown here assumes that the Console class is defined in another CD (the CD shown in REFID="13513" TYPE="XREF-TEXTCOPY"Basic Modeling Technique). The Form superclass is not shown in this CD because the other CD defines the Console class as a subclass of Form.Reusing MenusReuseMenus modeled for one form can be reused on other forms. For example, once you have modeled a Help menu, you can include it on any number of forms. Tip: You might want to create an ObjectTeam system that defines commonly used menus, such as File, Edit, and Help. Adding such a system to the Object Design phase of a project allows you to reuse the menus on any form in that project.Example of reuseThe following CD adds a Help menu to the TV form. The HelpMnu class is already defined in another CD. The CD shown here adds one more item, Diagnostics, to the Help menu.FILENAME="00953.unk" ORIGFILE="pics/tvhlpcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"ID="13487"Modeling FramesIntroductionTERM1="frame, modeling"TERM1="form" TERM2="frames"Frames allow you to group controls on a form. The TV form shown in REFID="13513" TYPE="XREF-TEXTCOPY"Basic Modeling Technique, for example, uses the TVControls frame to group the TV screen and channel buttons.Frame classTERM1="Frame class"To model a frame in ObjectTeam, create a class to represent the frame and make it a subclass of the Frame class, which is defined in the vb_library system.Adding controls to a frameA frame is an aggregation of controls. Therefore, you use aggregations to define which controls are part of the frame.ExampleSee REFID="13513" TYPE="XREF-TEXTCOPY"Basic Modeling Technique for an example of how to model a frame. Editing frames in Visual BasicRemember, moving a control into or out of a picture box is the same as deleting the old control and adding a new one. If you move a control, you must make the same change to the controls in ObjectTeam. See REFID="27628" TYPE="XREF-TEXTCOPY"What you can change in Visual Basic for additional guidelines for editing generated files in Visual Basic.Reusing framesFrames modeled for one form can be reused on other forms. Optionally, you can extend the frame that you are reusing.Tip: You might want to create an ObjectTeam system that defines commonly used frames; for example, one commonly used frame might hold the set of controls used to select a file. Adding such a system to the Object Design phase of a project allows you to reuse the frames on any form in that project.Example of reuseIf the TVControls frame is defined in a shared system, the CD used to define the TV form can simply reuse that frame. Compare the following CD with the CD shown in REFID="13513" TYPE="XREF-TEXTCOPY"Basic Modeling Technique.FILENAME="00954.unk" ORIGFILE="pics/frmreuse.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"ID="10945"Modeling Picture Box Controls (Such As Toolbars)IntroductionTERM1="picture box, modeling"TERM1="toolbar, modeling"TERM1="form" TERM2="toolbar"TERM1="form" TERM2="picture box"The primary purpose of a picture box control is to display a picture to the user. Like a frame, a picture box control can contain other controls. PictureBox classTERM1="PictureBox class"To model a picture box in ObjectTeam, create a class to represent the picture box and make it a subclass of the PictureBox class, which is defined in the vb_library system.Adding controls to a picture boxA picture box, like a frame, is an aggregation of controls. Therefore, you use aggregations to define which controls are part of the picture box.ToolbarsOne common use of a picture box control is to create a toolbar name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' a picture box control that contains a number of image controls.Note: In ObjectTeam, image controls are modeled as subclasses of the Image class. You place a picture in the image control by setting its Picture property in Visual Basic after generating the form. See REFID="27998" TYPE="XREF-TEXTCOPY"Modeling Leaf Controls for more information.Example of a toolbarThe following CD models a toolbar that contains image controls used to invoke the menu items defined in REFID="39295" TYPE="XREF-TEXTCOPY"Modeling Menus.FILENAME="00955.unk" ORIGFILE="pics/toolbcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"Console classThe CD shown here assumes that the Console class is defined in another CD (the CD shown in REFID="13513" TYPE="XREF-TEXTCOPY"Basic Modeling Technique). The Form superclass is not shown in this CD because the other CD defines the Console class as a subclass of Form.Editing picture box controls in Visual BasicRemember, moving a control into or out of a picture box is the same as deleting the old control and adding a new one. If you move a control, you must make the same change to the controls in ObjectTeam. See REFID="27628" TYPE="XREF-TEXTCOPY"What you can change in Visual Basic for additional guidelines for editing generated files in Visual Basic.Reusing picture box controlsPicture box controls modeled for one form can be reused on other forms. Optionally, you can extend the picture box control that you are reusing.Tip: You might want to create an ObjectTeam system that defines commonly used toolbars, such as a toolbar with controls that invoke the menu items on the File, Edit, and Help menu. Adding such a system to the Object Design phase of a project allows you to reuse the toolbars on any form in that project.ExampleReusing picture box controls is similar to reusing menus or frames. See REFID="39295" TYPE="XREF-TEXTCOPY"Modeling Menus or REFID="13487" TYPE="XREF-TEXTCOPY"Modeling Frames for an example.ID="27998"Modeling Leaf ControlsNode controlsTERM1="node controls, modeling"TERM1="form" TERM2="node controls"In ObjectTeam, the term node controls is sometimes used to refer to Visual Basic controls that can contain other controls. The vb_library system contains three node controls: Menu, Frame, and PictureBox.They are discussed in the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39295" TYPE="XREF-TEXTCOPY"Modeling Menus 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13487" TYPE="XREF-TEXTCOPY"Modeling Frames 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10945" TYPE="XREF-TEXTCOPY"Modeling Picture Box Controls (Such As Toolbars) 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19Leaf controlsTERM1="leaf controls, modeling"TERM1="form" TERM2="leaf controls"In ObjectTeam, the term leaf controls refers to Visual Basic form controls that cannot contain other controls. For example, command buttons, text boxes, list boxes, and so on. This section describes how to use leaf controls.Following is a complete list of the leaf control classes defined in the vb_library system. All of these classes are subclasses of the LeafControl class.COLS="3"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="144p"COLNAME="3" COLWIDTH="162p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="CheckBox class"CheckBoxCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="ComboBox class"ComboBoxCOLNAME="3" VALIGN="TOP" MOREROWS="0"TERM1="CommandButton class"CommandButtonCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Data class"DataCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="DirListBox class"DirListBoxCOLNAME="3" VALIGN="TOP" MOREROWS="0"TERM1="DriveListBox class"DriveListBoxCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="FileListBox class"FileListBoxCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="HScrollBar class"HScrollBarCOLNAME="3" VALIGN="TOP" MOREROWS="0"TERM1="Image class"ImageCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Label class"LabelCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="Line class"LineCOLNAME="3" VALIGN="TOP" MOREROWS="0"TERM1="ListBox class"ListBoxCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="OLE class"OLECOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="OptionButton class"OptionButtonCOLNAME="3" VALIGN="TOP" MOREROWS="0"TERM1="Shape class"ShapeCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="TextBox class"TextBoxCOLNAME="2" VALIGN="TOP" MOREROWS="0"TERM1="Timer class"TimerCOLNAME="3" VALIGN="TOP" MOREROWS="0"TERM1="VScrollBar class"VScrollBarModeling leaf controlsTo model a leaf control, you create a class that represents the control and make it a subclass of the appropriate vb_library class. For example, to model an image control, create a class that is a subclass of the Image class.All leaf controls must be part of a formEvery leaf control should be part of a form (or other container, such as a frame or picture box); if a leaf control is not part of a container object, no code is generated for that control. The role name of the aggregation that connects the leaf control to the form (or other container) is used as the control name in Visual Basic.Warning: Role names must obey the Visual Basic rules for control names; for example, they cannot contain hyphens. However, ObjectTeam does not enforce these rules.ID="16805"Modeling Control ArraysIntroductionTERM1="control array, modeling"TERM1="form" TERM2="control array"A control array is a set of controls that share the same name, type, and events. Each control in the array appears as a separate control on the form. All controls in the array share the same events.Constraints on aggregationIn ObjectTeam, you model a control array by using an aggregation with a multiplicity of many instead of one. The numeric constraint on the aggregation indicates the size of the control array.Sample CDThe following CD models a calculator:n The number keys are a 10-element control arrayn The operator keys are a 4-element control array (+ - * /)n The Cancel and Clear Entry buttons are separate controlsFILENAME="00956.unk" ORIGFILE="pics/calccad.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"Generated codeFollowing is the Visual Basic code generated for the Calculator form:VERSION 5.00Begin VB.Form Calculator Begin VB.CommandButton operatorBtn Index = 0 End Begin VB.CommandButton operatorBtn Index = 1 End Begin VB.CommandButton operatorBtn Index = 2 End Begin VB.CommandButton operatorBtn Index = 3 End Begin VB.CommandButton numberBtn Index = 0 End Begin VB.CommandButton numberBtn Index = 1 End Begin VB.CommandButton numberBtn Index = 2 End Begin VB.CommandButton numberBtn Index = 3 End Begin VB.CommandButton numberBtn Index = 4 End Begin VB.CommandButton numberBtn Index = 5 End Begin VB.CommandButton numberBtn Index = 6 End Begin VB.CommandButton numberBtn Index = 7 End Begin VB.CommandButton numberBtn Index = 8 End Begin VB.CommandButton numberBtn Index = 9 End Begin VB.CommandButton cancelBtn End Begin VB.CommandButton clearBtn EndEndAttribute VB_Name = "Calculator"...' EventsPublic Sub operatorBtn_click(Index As Integer) ' Implement this function! 'End SubPublic Sub numberBtn_click(Index As Integer) ' Implement this function! 'End SubPublic Sub cancelBtn_click() ' Implement this function! 'End SubPublic Sub clearBtn_click() ' Implement this function! 'End Sub...Editing the generated fileNotice that the index of the control array is generated automatically and passed as a parameter to the control array events (in this example, operatorBtn_click and numberBtn_click). At run-time, the value of this parameter indicates which control was selected.This parameter is almost always used in the body of the event procedure for a control array. For example, to implement the operatorBtn_click event, you might specify the Index parameter as the test expression in a Visual Basic Select Case statement:SELECT CASE IndexCASE 0 '+ selected 'code for additionCASE 1 '- selected 'code for subtractionCASE 2 '* selected 'code for multiplicationCASE 3 '/ selected 'code for divisionEND SELECTAlternative modeling techniqueObjectTeam also generates a control array if a CD contains two or more role names that are the same. Often this is a modeling error, however, it can occasionally be useful.ExampleIf you are modeling a form with two Apply buttons, for example, it might be useful to implement the Apply buttons using a control array.FILENAME="00957.unk" ORIGFILE="pics/twoapply.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"ID="28506"Modeling ActiveX ControlsIntroductionTERM1="ActiveX control, modeling"TERM1="form" TERM2="ActiveX control"Some editions of Visual Basic allow you to extend the Visual Basic Toolbox by adding ActiveXTM controls (formerly called OLE controls). You use ActiveX controls just like standard controls.This section describes how to make the ActiveX controls available in ObjectTeam so that you can use them when modeling forms. Once an ActiveX control is available in ObjectTeam, you can use it as you would any other leaf control (see REFID="27998" TYPE="XREF-TEXTCOPY"Modeling Leaf Controls).ExampleThis section uses the ActiveX control Crystal.CrystalReport, which comes with Visual Basic, as an example.PrerequisitesBefore you can add an ActiveX control to the vb_library system, you must have the following:n The ActiveX control, which has a file extension of .ocx. For example, Crystl32.ocx contains the ActiveX control Crystal.CrystalReport.n The full name of the ActiveX control; for example, Crystal.CrystalReport. - The first part of the name, Crystal, is the library name.- The second part of the name, CrystalReport, is the control name.How to locate ActiveX control informationThe following procedures are provided to help you locate the required information for an ActiveX control. For more information, refer to the Visual Basic documentation.Σ To find the file name of an ActiveX control:1 Open a Visual Basic project.2 Select Project | Components.A dialog appears. The Controls tab of that dialog lists the available ActiveX controls.3 Select an ActiveX control.The name of the .ocx file appears at bottom of the dialog.Σ To find the full name of an ActiveX control:1 Open a Visual Basic project and add the ActiveX control to a form.2 Save the project.3 Open the form (.frm) file in a text editor.4 Find the declaration of the ActiveX control, which contains the full name of the control. Following is the ActiveX declaration for a Crystal.CrystalReport control:Begin VB.Form ReportFrm Begin Crystal.CrystalReport report EndEndTwo-step processAdding an ActiveX control to ObjectTeam is a two-step process: COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Add the ActiveX controls to the auto32ld.vbp customization file, as described in REFID="23746" TYPE="XREF-TEXTCOPY"Adding ActiveX Controls to auto32ld.vbp.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Add the ActiveX controls to the vb_library system, as described in REFID="19181" TYPE="XREF-TEXTCOPY"Adding ActiveX Controls to vb_library.ID="23746"Adding ActiveX Controls to auto32ld.vbpIntroductionIn Visual Basic, before an ActiveX control can be used on a form, it must be added to the Visual Basic project. The list of available ActiveX controls is stored in the project (.vbp) file.Add controls to auto32ld.vbpYou can edit generated project files; however, your changes to the generated project file are not preserved when you regenerate the file. Each time you (re)generate Visual Basic files, the code generator creates a new Visual Basic project (.vbp) file based on the auto32ld.vbp customization file. Therefore, you must add your ActiveX controls to the TERM1="auto32ld.vbp customization file"TERM1="customization file" TERM2="auto32ld.vbp"auto32ld.vbp customization file.Editing the customization fileREFID="13931" TYPE="XREF-TEXTCOPY"Editing the auto32ld.vbp Customization File describes how to create and edit the auto32ld.vbp customization file.ExampleAfter you edit the auto32ld.vbp customization file to include the ActiveX control Crystl32.ocx (Crystal.CrystalReport), the customization file includes a line similar to the following:Object={00025600-0000-0000-C000-000000000046}#4.6#0; CRYSTL32.OCXID="19181"Adding ActiveX Controls to vb_libraryIntroductionIn ObjectTeam, you model forms using the controls defined in the vb_library system; therefore, each ActiveX control must be defined as a class in that system.New CDWhen you open the vb_library system, you will notice that it contains a number of different CDs. You might want to create a new CD for your ActiveX controls. If you are adding a large number of ActiveX controls, you might want to create more than one CD.How to add ActiveX controls to the vb_library systemΣ To add an ActiveX control to the vb_library system:1 Open the vb_library system.2 Open a CD (new or existing).3 Add a class to represent the ActiveX control. Make the class a subclass of the LeafControl class. The class name is the name of the ActiveX control; in this example, Crystal.CrystalReport.FILENAME="00958.unk" ORIGFILE="pics/actxcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"4 Edit the properties of the class. Set the GUI Library property to the name of the Visual Basic library that contains the ActiveX control; in this example, Crystal.CrystalReport.FILENAME="00959.unk" ORIGFILE="pics/actxprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbgui.fm5.mif"5 Save the CD.The ActiveX control is now part of the vb_library system. You can use this control just as you would any other leaf control (see REFID="27998" TYPE="XREF-TEXTCOPY"Modeling Leaf Controls).Chapter 5 Reverse ID="32714"and Round-Trip EngineeringTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Visual BasicIntroductionThis chapter describes how to use reverse engineering and round-trip engineering with the Visual Basic code generator.Reverse engineeringReverse engineering Visual Basic code makes the structures and functions of the code visible in ObjectTeam. This facilitates your understanding of the existing code, thus giving you more opportunity for reusing the code.Round-trip engineeringRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated Visual Basic source files (.frm, .cls, and .bas). Use round-trip engineering to update the ObjectTeam model before you regenerate the source files. If you add an attribute, operation, or form control to the generated source file, but do not add it to the ObjectTeam model, that attribute, operation, or form control is lost when you regenerate the source files.ExplanationThe code generator generates code based on the ObjectTeam model. When you regenerate the source file, only the attributes, operations, and form controls defined in the model appear in the generated source file.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36425" TYPE="XREF-TEXTCOPY"Reverse Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39943" TYPE="XREF-TEXTCOPY"Round-Trip Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11ID="36425"Reverse EngineeringIntroductionTERM1="project" TERM2="using data from other sources"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="reverse engineering"TERM1="class library, reverse engineering"Reverse engineering parses Visual Basic files (.frm, .cls, and .bas) and builds CDs and CDMs that show the forms and classes defined in those files. It can be particularly useful if you have access to a class library and want to better understand its contents.Purpose Use reverse engineering to capture and display the classes defined in your Visual Basic files. This serves two primary purposes:n Makes the forms and classes available in ObjectTeam as external classes.n Helps you to understand the structure and functionality of the forms and classes.Not an import utilityReverse engineering is not designed to capture all the information in a Visual Basic file. Therefore, do not use reverse engineering to import forms or classes in order to maintain them in ObjectTeam. If you generate Visual Basic files from the CDs and CDMs created by reverse engineering, they will not match the files you used to create those CDs and CDMs.ID="35207"What happens during reverse engineeringReverse engineering uses the following steps to translate Visual Basic files into CDs and CDMs:1 Parses the Visual Basic files (.frm, .cls, and .bas), then maps the Visual Basic elements to ObjectTeam elements.2 Creates CDs and CDMs that define the ObjectTeam elements.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34343" TYPE="XREF-TEXTCOPY"Parsing the Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19906" TYPE="XREF-TEXTCOPY"Creating the Diagrams 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23682" TYPE="XREF-TEXTCOPY"Running Reverse Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10ID="34343"Parsing the FilesParsing the Visual Basic filesThe parser recognizes the following elements in the Visual Basic files:n Class, variable, constant, sub, and function declarationsn Form, control, and event declarationsMapping the elementsTERM1="Visual Basic" TERM2="reverse engineering"TERM1="mapping" TERM2="in reverse engineering"TERM1="reverse engineering" TERM2="mapping"After parsing the Visual Basic file, reverse engineering maps the Visual Basic constructs to ObjectTeam elements, as shown in the following table:COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Visual Basic ConstructionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam ElementCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with default class properties.COLNAME="1" VALIGN="TOP" MOREROWS="0"Basic moduleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with default class properties.COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute and data type. Default attribute properties are set.Property set x, get x, and let x functions appear as SetX, GetX, and LetX operations in the class.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConstantCOLNAME="2" VALIGN="TOP" MOREROWS="0"As for Variable. The default value of the attribute is set to the value of the constant.COLNAME="1" VALIGN="TOP" MOREROWS="0"EnumCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with default class properties. Each enum is defined as a class attribute.COLNAME="1" VALIGN="TOP" MOREROWS="0"User-defined typeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class with default class properties.COLNAME="1" VALIGN="TOP" MOREROWS="0"Function or sub procedureCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and parameters. Default operation properties are set. Parameter properties are set appropriately.COLNAME="1" VALIGN="TOP" MOREROWS="0"FormCOLNAME="2" VALIGN="TOP" MOREROWS="0"Subclass of Form. Default class properties are set.COLNAME="1" VALIGN="TOP" MOREROWS="0"MDI formCOLNAME="2" VALIGN="TOP" MOREROWS="0"Subclass of MDIForm. Default class properties are set.COLNAME="1" VALIGN="TOP" MOREROWS="0"ControlCOLNAME="2" VALIGN="TOP" MOREROWS="0"Subclass of the appropriate NodeControl or LeafControl class. Default class properties are set. An aggregation association from the control to the class that represents the owner form is created. The class name of the control and the role name of the aggregation association are the same: the name of the Visual Basic control.COLNAME="1" VALIGN="TOP" MOREROWS="0"Control arrayCOLNAME="2" VALIGN="TOP" MOREROWS="0"As for Control. A constraint label on the aggregation association indicates the number of elements in the array.COLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operation and parameters. The Event operation property is set. Parameter properties are set appropriately.Customizing reverse engineeringThe customization file tcl\rev_assoc.tcl file in the visualbasic module defines the reverse engineering rules used to detect associations and attribute accessors. You can modify reverse engineering by editing this customization file, as described in the ObjectTeam Customization Guide.Warning: This customization file is not used unless you select the Reverse Engineer Associations option during reverse engineering.ID="19906"Creating the DiagramsCreating diagramsTERM1="diagrams" TERM2="draft, in reverse engineering"TERM1="reverse engineering" TERM2="draft diagrams"After mapping the Visual Basic constructs to ObjectTeam elements, reverse engineering creates the CDs and CDMs that define the ObjectTeam elements. It creates the following CDs:n One or more CDs to show the class hierarchyn One or more CDs to show the associations among the classesNaming conventions for CDsReverse engineering uses the following conventions for naming the generated CDs:COLS="2"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="306p"COLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"frmFormNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"CD for a formCOLNAME="1" VALIGN="TOP" MOREROWS="0"clsClassNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"CD for a class or associated classesCOLNAME="1" VALIGN="TOP" MOREROWS="0"ModuleNameModuleCOLNAME="2" VALIGN="TOP" MOREROWS="0"CD for a basic moduleCOLNAME="1" VALIGN="TOP" MOREROWS="0"SuperClassTreeCOLNAME="2" VALIGN="TOP" MOREROWS="0"CD for a class hierarchyHow many diagrams are createdThe number and complexity of the CDs created by reverse engineering depend largely on the following:n The files that you select for reverse engineering, particularly the number and complexity of classes defined in the files.n The reverse engineering options that you select, particularly whether you choose to reverse engineer associations.ID="35667"Options for reverse engineeringDuring reverse engineering, ObjectTeam displays the following dialog box prompting you to select the options that you want to use:FILENAME="00960.unk" ORIGFILE="pics/reoption.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbeng.fm5.mif"TERM1="reverse engineering" TERM2="configuring options"The following table describes each option (default values are as shown in the dialog box):COLS="2"COLNAME="1" COLWIDTH="126p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Prefix used to name each generated CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"GenerateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies whether to generate CDs, CDMs, or both:n CDs and CDMsn Only CDs (only class structure is generated)n Only CDMs (only class features are generated)COLNAME="1" VALIGN="TOP" MOREROWS="0"Overwrite Existing DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, existing CDs are replaced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Create Reference DiagramsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering creates a separate reference CD for each class that exceeds the maximum size. The class is folded in all diagrams other than the reference diagram.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Class Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class. When a class exceeds this size, it is folded.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Tree Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a class tree. When a class hierarchy exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Max Screen Width & HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the maximum size of a diagram. When a diagram exceeds this size, it is split.COLNAME="1" VALIGN="TOP" MOREROWS="0"Placement AlgorithmCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Reverse Engineering Associations is selected, specifies the algorithm reverse engineering uses to create the CDs that show the associations:n Simple. Creates a CD for each class that has associations.n Grid. Creates a CD for each n unfolded classes, where n is the number specified in the Number of Classes per CD field.COLNAME="1" VALIGN="TOP" MOREROWS="0"Number of Classes per CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"If Placement Algorithm is Grid, specifies the number of unfolded classes per CD.COLNAME="1" VALIGN="TOP" MOREROWS="0"Reverse Engineer AssociationsCOLNAME="2" VALIGN="TOP" MOREROWS="0"If selected, reverse engineering examines the attributes and accessor methods defined on each class to determine the associations among classes. It then creates CDs that show those associations.GUI aggregationsReverse engineering always creates CDs that show the aggregations that define the GUI, even if you have not selected the Reverse Engineer Associations option. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box.CDs that show the class hierarchyFollowing are the guidelines used to draw the CDs that show the class hierarchy:n Reverse engineering creates a CD for each top-level parent class. The CD contains the parent class and all subclasses.n If a class has multiple parent classes, reverse engineering creates a CD for each parent. The CD for the first parent class contains the parent class, the child class, and all subclasses of the child class. The CD for each of the other parent classes contains only the parent class and the child class; in these diagrams, the child class is folded.FILENAME="00961.tif" ORIGSEQ="6" ORIGTYPE="I" ORIGDOC="../../sources/vb/vbeng.fm5.mif"CDs that show associationsIf you select the Reverse Engineer Associations option in the Reverse Engineer dialog box, reverse engineering creates CDs that show the associations. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box. Both algorithms are described below.If you do not select the Reverse Engineer Associations option, reverse engineering shows associations only as attributes and accessor methods in the appropriate classes.Note: Bidirectional associations are reverse engineered as two unidirectional associations.GUI aggregationsReverse engineering always creates CDs that show the aggregations that define the GUI, even if you have not selected the Reverse Engineer Associations option. How it creates these CDs depends on which Placement Algorithm option you selected in the Reverse Engineer dialog box.Simple algorithmIf you select Simple in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Creates a CD for each class that has one or more associations. 2 Unfolds the main class in each CD and folds all associated classes.ExampleReverse engineering a simple VCR form (.frm file) generates a number of CDs and CDMs. Following are the two CDs, created using the simple algorithm, that show the form GUI.FILENAME="00962.unk" ORIGFILE="pics/resimp2.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbeng.fm5.mif"Grid algorithmIf you select Grid in the Placement Algorithm field of the Reverse Engineer dialog box, reverse engineering draws the CDs as follows:1 Divides all classes into groups of n, where n is the number specified by the Number of Classes per CD field of the Reverse Engineer dialog box. The algorithm attempts to group associated classes.Tip: To create a diagram that contains all classes, specify n as the number of classes being reverse engineered (or greater).2 For each group of classes, creates a CD and adds the classes (unfolded) to the CD. To position the classes, reverse engineering uses a uniform grid whose squares are the size of the largest class in the group and its longest association.3 For each class in each CD, draws all associations from the class to all associated classes. If an associated class is not in the CD, reverse engineering adds it (folded) to the CD.ExampleReverse engineering a simple VCR form (.frm file) generates a number of CDs and CDMs. The following CD, created using the grid algorithm, shows the form GUI. (The classes in the following illustration have been rearranged slightly to fit more easily on the page.)FILENAME="00963.unk" ORIGFILE="pics/regrid.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbeng.fm5.mif"ID="23682"Running Reverse EngineeringIntroductionThis section describes how to run reverse engineering.How to reverse engineerΣ To reverse engineer Visual Basic files:1 Move to System level in Object Design phase.Note: Typically, you reverse engineer into an empty system. However, name conflicts can still occur since classes are created with scope Phase.2 Select Utilities | Reverse Engineer Visual Basic.The Reverse Engineer Visual Basic dialog box appears, prompting you to select the files to be reverse engineered.FILENAME="00964.unk" ORIGFILE="pics/refiles.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbeng.fm5.mif"Tip: Reverse engineering creates CDs and CDMs based on the files that you select. Therefore, you generally want to reverse engineer all related files at the same time.3 Select the files that you want to reverse engineer, then select Open.A second Reverse Engineer Visual Basic dialog box appears (see REFID="35667" TYPE="XREF-TEXTCOPY"Options for reverse engineering), prompting you to select the options that you want to use. 4 Select the options, then select OK.ObjectTeam reverse engineers the selected file, reporting the results in a Monitoring window.ID="39943"Round-Trip EngineeringIntroductionRound-trip engineering updates the ObjectTeam model based on the changes you have made to the generated Visual Basic source files. Use round-trip engineering to update the ObjectTeam model before you regenerate the source files.PurposeThe code generator generates code based on the ObjectTeam model. If you do not update the ObjectTeam model before regenerating the source files, the new source files do not include your changes. ExampleYou generate Visual Basic files. You then edit the generated source file, adding a new event to a control on a form. If you do not update the ObjectTeam model, the model does not contain the operation that corresponds to the event. When you regenerate the source file, the code generator assumes that you deleted the operation from ObjectTeam and, therefore, does not include the obsolete event in the newly generated source file.Changes captured by round-trip engineeringIf you have made the following types of changes to the generated Visual Basic source, round-trip engineering updates the ObjectTeam model based on those changes:n Added or deleted attributes, or edited attribute declarationsn Added or deleted functions or events, or edited function or event declarationsn Added controls to a formNote: The access method, Friend, for functions and events is not supported by ObjectTeam. Round-trip engineering changes the Friend access method to Public.Changes not captured by round-trip engineeringRound-trip engineering ignores the following types of changes that you might have made to the generated source files. If you have made these types of changes, you must update the ObjectTeam model manually:n Deleted controls from a formWhat happens during round-trip engineeringThe following table shows the steps that occur during round-trip engineering:COLS="2"COLNAME="1" COLWIDTH="54p"COLNAME="2" COLWIDTH="396p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StepCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"You select the generated (edited) source files that you are interested in and start round-trip engineering.COLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam parses the selected files and compares the information in the files with the information in the ObjectTeam model.COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"For each difference it finds, ObjectTeam proposes an action and prompts you for confirmation. For example:In class "Account": delete attribute "Address"?COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Based on your answers, ObjectTeam updates the ObjectTeam model.In this sectionThis section contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Topic PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15830" TYPE="XREF-TEXTCOPY"Parsing the Generated (Edited) Source Files 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33338" TYPE="XREF-TEXTCOPY"Running Round-Trip Engineering 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'15ID="15830"Parsing the Generated (Edited) Source FilesIntroductionThis section describes which changes to the generated source files are captured by round-trip engineering. ID="27501"Changes to attributesYou can add, delete, and modify attribute declaration statements in a generated class (.cls) or form (.frm) file. However, all attribute declaration statements must be specified beneath the following comment in the generated source file:' User defined attributesAttribute declarations not in this section of the generated source file are ignored by round-trip engineering.Attribute Access propertyRound-trip engineering determines the value of an attribute's Attribute Access property based on the methods specified beneath the following comment in the generated source file:' Access methodsFor example, if you add an attribute declaration to the source file but do not add attribute access methods, round-trip engineerings sets the Read and Write values of the attribute's Attribute Access property to None.class_Constructor procedureThe parameter list of the class_Constructor procedure includes key attributes. In the CD, a key attribute is prefixed with an asterisk (*).If you remove an attribute from the parameter list of the class_Constructor, round-trip engineering removes the asterisk (*) from the attribute name in the CD. If you add an attribute to the parameter list of the class_Constructor, round-trip engineering adds an asterisk (*) to the attribute name in the CD.ID="34671"Changes to functionsYou can add, delete, and modify function declaration statements in a generated class (.cls) or form (.frm) file. However, all such declaration statements must be specified beneath the following comment in the generated source file:' User defined methodsFunction declarations not in this section of the generated source file are ignored by round-trip engineering.You can change the code in the body of any function. Such changes are ignored by round-trip engineering, but are preserved by the code generator when you regenerate the source files.Changes to class featuresYou can add, delete, and modify the attribute and function declarations in a generated basic module (.bas file).Changes to eventsYou can add, delete, and modify event declaration statements in a generated form (.frm file).You can change the code in the body of any event. Such changes are ignored by round-trip engineering, but are preserved by the code generator when you regenerate the source files.Changes to controlsYou can add controls to a generated form (.frm file). However, if you delete a control, you must edit the ObjectTeam model manually. Round-trip engineering does not delete controls from the ObjectTeam model.If you add a control to a generated form, round-trip engineering updates the ObjectTeam model. Round-trip engineering does not modify existing CDs. It creates the following CDs to hold the classes that represent the new controls:n A CD for each type of control; these CDs show the superclass of each new control classn A CD for each modified form; these CDs show the associations between the new controls and their formsID="33338"Running Round-Trip EngineeringCustomizing round-trip engineeringThe customization file roundtrip.roundtrip in the M4_home/etc directory controls what actions round-trip engineering proposes, as well as the default answers it supplies. To examine or modify the current behavior of round-trip engineering, examine or modify the customization file.Select all related filesIf a class or form includes class features, always select both the basic module (.bas file) and the class (.cls) or form (.frm) file. To perform correctly, round-trip engineering requires all information about the class or form. If you select only the basic module (.bas file) or only the the class (.cls) or form (.frm) file, round-trip engineering assumes that the selected file contains the complete class or form definition.How to run round-trip engineeringΣ To run round-trip engineering:1 Move to the System level of the Implementation phase.2 Select the Visual Basic files on which you want to run round-trip engineering.3 Select Utilities | Round Trip Selected.The following dialog box appears.FILENAME="00965.unk" ORIGFILE="pics/rndtrip1.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbeng.fm5.mif"4 Optionally, enter a prefix to be used in naming any CDs created by round-trip engineering, then select OK. If you do not enter a prefix, round-trip engineering uses the prefix NewRT.ObjectTeam opens the Roundtrip Selected Files dialog box, compares the classes in the Visual Basic files to the classes in the Object Design phase, and then begins proposing actions and prompting you for confirmation.FILENAME="00966.unk" ORIGFILE="pics/rndtrip2.gif" ORIGTYPE="X" ORIGDOC="../../sources/vb/vbeng.fm5.mif"5 Use the buttons to respond to the proposed actions:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="324p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ButtonCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"YesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Make the proposed change.COLNAME="1" VALIGN="TOP" MOREROWS="0"NoCOLNAME="2" VALIGN="TOP" MOREROWS="0"Do not make the proposed change.Note: When you regenerate the Visual Basic file, the change to the Visual Basic file will be lost.COLNAME="1" VALIGN="TOP" MOREROWS="0"Default to AllCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use the default response for all remaining questions.COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"Cancel all changesObjectTeam updates the model based on your responses.Chapter 6 Customizing ID="22956"Visual Basic Code GenerationTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Visual BasicIntroductionExpert users can extend the Visual Basic code generator by modifying the Tcl scripts that are supplied in the M4_home\tcl\l_vb directory. Editing these Tcl scripts, or writing new Tcl scripts that add functionality to the code generator, requires a thorough knowledge of the OOPL model structure, Tcl commands, and the Object Team Shell.Modifying Tcl proceduresYou can adapt existing methods of Object Tcl classes that are used in the code generation by redefining them in a user-defined Tcl file.Warning: Modifying Tcl procedures in the existing scripts is not encouraged. Therefore, the scripts and their structures are not documented. If you choose to modify any Tcl scripts or procedures, you must have a thorough knowledge of the script's structures to avoid introducing errors. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22291" TYPE="XREF-TEXTCOPY"How Tcl is Used in the Code Generation 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15580" TYPE="XREF-TEXTCOPY"Customizing Tcl Scripts Used for Code Generation 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21ID="22291"How Tcl is Used in the TERM1="Tcl" TERM2="in ObjectTeam environment"Code GenerationSEE="Tcl" TERM1="Tool Command Language"IntroductionThis chapter provides information on the use of Tcl (Tool command language) in ObjectTeam. It does not provide an introduction to Tcl itself. If you want to familiarize yourself with Tcl, we recommend the following introductory book on Tcl:Ousterhout, John K. Tcl and the Tk Toolkit. (Reading, Massachusetts: Addison---Wesley Publishing Company, 1994).What is Tcl?Tcl (Tool Command Language) is an interpretive command language that resembles C. By default all arguments are passed as strings. These strings are C-compatible. Tcl consists of:n A library of C proceduresn An interpretern The Tcl coreThe Tcl core is a simple language that can be completely programmed. It provides a collection of commonly used features such as:n Variablesn Conditional and looping commandsn Proceduresn Associative arraysn Listsn Expressionsn File manipulationHow is Tcl used in the code generation?When the ObjectTeam shell executes a Tcl script file, it translates information from the repository, internal models, and TERM1="code generation model" TERM2="and Tcl"TERM1="model" TERM2="code generation"Code Generation models into source code. The following picture shows this process schematically:FILENAME="00967.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/vb/vbtcl.fm5.mif"Types of Tcl usedThe methods in the default Tcl script files used for code generation use different levels of Tcl:COLS="2"COLNAME="1" COLWIDTH="168p"COLNAME="2" COLWIDTH="280p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"descriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Standard TclCOLNAME="2" VALIGN="TOP" MOREROWS="0"Refer to general Tcl documentation for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to Tcl proceduresCOLNAME="2" VALIGN="TOP" MOREROWS="0"These procedures are stored in Tcl files. They become available when the file in which the procedure is defined is sourced.COLNAME="1" VALIGN="TOP" MOREROWS="0"Calls to methods of classesin the ObjectTeam modelsCOLNAME="2" VALIGN="TOP" MOREROWS="0"The classes of the ObjectTeam models (including the OOPL model and SQL model) are documented in ObjectTeam Repository Interface Guide. COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in ClassesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Besides methods of classes belonging to the ObjectTeam models, methods belonging to other built-in classes can also be called. Refer to the ObjectTeam Repository Interface Guide for details.COLNAME="1" VALIGN="TOP" MOREROWS="0"Built-in ObjectTeam commandsCOLNAME="2" VALIGN="TOP" MOREROWS="0"These commands are built-in in otsh and otk. You can use these commands, but you cannot edit or view them like Tcl procedures. Refer to the ObjectTeam Repository Interface Guide for details. ID="35220"Which Tcl files are used?Tcl procedures used for code generation are stored in Object Tcl script files. During code generation, these scripts are interpreted and executed by the ObjectTeam Shell (otsh). When you select Utilities | Import From Previous Phase in the browser on Implementation System level, otsh interprets the Object Tcl code in the Tcl file tcl\import.tcl. In the implementation of these methods, Tcl methods from other classes are called.Most of the Tcl script files used by the Visual Basic code generator are located under the M4_home directory in tcl\l_vb\*.tcl. The Tcl script files fstorage.tcl and caynutil.tcl in the tcl directory contain utility procedures that are also used.ID="15580"Customizing Tcl Scripts Used for TERM1="code generation" TERM2="adapting"Code GenerationUser-defined Tcl filesBecause of the open character of Tcl, you are free to redefine the existing Object Tcl methods of the Tcl scripts, if you feel like adapting the code generation to your specific needs and circumstances. You can include your own properties, control flow keywords and section keywords in the code generation this way. You can even build your own code generator by creating your own Tcl scripts. Warning: Note that existing Object Tcl classes cannot be redefined. However, you can add new, user-defined, Object Tcl classes.ID="37212"Where to Store User-defined Tcl ProceduresThe Tcl script files used for the default code generation are stored in the file system. They can be found in the following directory:M4_home\tcl If you want to adapt the default code generation, you can edit the Tcl files in this directory, but it is better to leave the original files untouched. There are several ways available to make otsh use user-defined files. These ways are briefly discussed in this section. You can overrule existing Tcl files or you can extend them by creating new Tcl files with new user-defined Tcl procedures and methods, or redefinitions of existing methods. The ways to do that are also covered in this section.Storing Tcl files in the same System as where the code is generatedOne of the available file types on Implementation system level is Tcl. You can create new files of this type and redefine methods of existing Object Tcl classes in such a file. During code generation, otsh sources all files of the type Tcl in the current system, regardless of their name.Σ To create such a Tcl file:1 Open the Implementation System.2 Select File | New | External File Version.A dialog box of file types appears.3 Select Tcl as the file type, enter a name for the Tcl file (without the extension .tcl), and select OK.You can enter the name of an existing Tcl file used for code generation or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.4 Edit and save the new Tcl file.The next time you generate code (by using Utilities | Import From Previous Phase...) the new Tcl file is sourced by otsh.Storing Tcl Files in a System TclIf you do not want to store user-defined Tcl files in the same system in which your code is generated, you can decide to create a system called Tcl and store your user-defined Tcl files in there. Any Tcl file that is defined in such a system is sourced during code generation. So you can use this mechanism for user-defined Tcl files or for user-defined Tcl files that are meant to replace existing ones.1 Make sure the Browser is on Implementation level.2 Select File | New | System Version.3 Enter Tcl as the system name, being sure to use a capital T.4 Open the system Tcl.5 Select File | New | External File Version.A dialog box of file types appears.6 Select Tcl as the file type, enter a name for the Tcl file (without the extension .tcl), and select OK.You can enter the name of an existing Tcl file used for code generation or any other name. If you enter an existing name, the original Tcl file is replaced by this new file during code generation.7 Edit and save the new Tcl file.The next time you generate code, the new Tcl file is sourced by otsh.TERM1="Tcl" TERM2="script files, testing"Testing Tcl filesIf you want to test a customized Tcl file before you add it to a system in ObjectTeam, you can decide to create the Tcl file in your file system and feed it to otsh outside the ObjectTeam environment. See the ObjectTeam Customization Guide for details on how to start otsh from the command line.When the Tcl file has reached its final state, you can decide to add it to a system in ObjectTeam, as described above. Appendix A PropertiesTYPE="MIFmarker"TYPE="number"0TYPE="text"Code Generation Guide for Visual BasicVisual Basic code generation propertiesThe following table lists the properties that effect Visual Basic code generation. These are available in the CD in the Object Design phase.COLS="4"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="99p"COLNAME="3" COLWIDTH="117p"COLNAME="4" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PropertyValueCOLNAME="4" VALIGN="TOP" MOREROWS="0"For More InformationCOLNAME="1" VALIGN="TOP" MOREROWS="0"Association AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateNoneCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Attribute AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"as aboveCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="35359" TYPE="XREF-TEXTCOPY"Specifying Access Functions for Data AttributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Data TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualifier for qualified associationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="16268" TYPE="XREF-TEXTCOPY"Mapping Qualified AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"GUI LibraryCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="14886" TYPE="XREF-TEXTCOPY"Editing Class PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Inheritance AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"GeneralizationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="28724" TYPE="XREF-TEXTCOPY"Mapping InheritanceCOLNAME="1" VALIGN="TOP" MOREROWS="0"IsEventCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Auto DetectYesNoCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21657" TYPE="XREF-TEXTCOPY"Editing Operation PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Method AccessCOLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"PublicPrivateCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21657" TYPE="XREF-TEXTCOPY"Editing Operation PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"OptionalCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"Check boxCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="12681" TYPE="XREF-TEXTCOPY"Editing Parameter PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Pass ByCOLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"ByValByRefCOLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="12681" TYPE="XREF-TEXTCOPY"Editing Parameter PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"Startup FormCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="14886" TYPE="XREF-TEXTCOPY"Editing Class Properties and REFID="41821" TYPE="XREF-TEXTCOPY"Modeling WindowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Text COLNAME="2" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="14886" TYPE="XREF-TEXTCOPY"Editing Class PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="30084" TYPE="XREF-TEXTCOPY"Mapping Simple AssociationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="30848" TYPE="XREF-TEXTCOPY"Editing Attribute PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"OperationCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="21657" TYPE="XREF-TEXTCOPY"Editing Operation PropertiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"ParameterCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"REFID="12681" TYPE="XREF-TEXTCOPY"Editing Parameter PropertiesDocument Generation SetDocument Generation GuideAbout This ManualTYPE="MIFmarker"TYPE="number"0TYPE="text"Document Generation GuideAbout this manualObjectTeam provides document generation tools that enable you to generate complete, formatted project documentation for all phases of your project. Pre-designed document templates for the major desktop publishing packages are supplied. Default documents can be generated using these templates. Creating documents this way involves little more than pushing a few buttons. However, you can also customize the structure of your document, its contents, the default templates or even create your own integration to support a different package. This manual explains the following things:n How the default generation works.n The features of the supplied document templates.n How to customize document generation.n How to integrate a user-defined DTP or word processor.PrerequisitesThis book assumes a basic knowledge of ObjectTeam, including how to draw diagrams, specify item properties and create project hierarchies. For more details on these topics, see the ObjectTeam Modeling Guide, or refer to the ObjectTeam on-line help.For a good understanding of the chapter on creating user-defined integrations, you should be familiar with Tcl and the object-oriented extensions to Tcl supplied with ObjectTeam. For details on Object Tcl, refer to the ObjectTeam Customization Guide.Chapter 1 Documenting ID="10755"Your ProjectTYPE="MIFmarker"TYPE="number"0TYPE="text"Document Generation GuideIntroductionObjectTeam offers a set of tools for producing technical documentation. You access these tools in the Browser on a level that is specially equipped for creating technical documentation: the Document level.The document generation tools let you document your projects in a highly customizable way. You can produce documents in which text and illustrations describing a software system are logically integrated.ID="14189"In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15981" TYPE="XREF-TEXTCOPY"Activating a Docwriter Module 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27085" TYPE="XREF-TEXTCOPY"The Document Generation Process 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26513" TYPE="XREF-TEXTCOPY"Creating a New Document in the Browser 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="42465" TYPE="XREF-TEXTCOPY"Generating Documents Using Document Structure Files 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41821" TYPE="XREF-TEXTCOPY"Generating Documents Manually 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="41024" TYPE="XREF-TEXTCOPY"Customizing the Document Structure File 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'36ID="15981"Activating a Docwriter ModuleModules of type DocwriterObjectTeam modules of type Docwriter provide the menu items and Tcl code required to use the ObjectTeam Docwriter with a particular DTP package. Therefore, a module of this type must be activate on the Browser level where it is going to be used.You can check if a module is active on a particular Browser level by selecting Utilities | Show Active Modules on that level.Docwriter modules for UML and OMT notationSeparate Docwriter modules are supplied for systems that follow the UML notation and those that follow the OMT notation.UMLIf you are using ObjectTeam with UML notation, the following Docwriter modules are available:COLS="2"COLNAME="1" COLWIDTH="240p"COLNAME="2" COLWIDTH="208p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ModuleCOLNAME="2" VALIGN="TOP" MOREROWS="0"PlatformCOLNAME="1" VALIGN="TOP" MOREROWS="0"FrameMaker 5.0COLNAME="2" VALIGN="TOP" MOREROWS="0"UNIXCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="2" VALIGN="TOP" MOREROWS="0"UNIXCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Word 97COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"WindowsCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"WordCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"WindowsOMTIf you are using ObjectTeam with OMT notation, the following Docwriter modules are available:COLS="2"COLNAME="1" COLWIDTH="240p"COLNAME="2" COLWIDTH="208p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ModuleCOLNAME="2" VALIGN="TOP" MOREROWS="0"PlatformCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"OMT FrameMaker 5.0COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"UNIXCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"OMT InterleafCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"UNIXCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"OMT WordCOLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"WindowsCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"OMT Word 97COLNAME="2" ROWSEP="0" VALIGN="TOP" MOREROWS="0"WindowsIf the Docwriter module of your choice is not active on the Browser level you want to use it on, you must activate it.For more informationSee ObjectTeam Installation Guide for details on activating modules.Required modulesA Docwriter module requires other modules. Required modules are automatically added to your set of active modules when you select a Docwriter module.The Docwriter modules FrameMaker 5.0 and OMT FrameMaker 5.0 also require a module of type DocWriterPaperSize, which configures the paper size to letter or A4 format. After you select the DocWriter module FrameMaker 5.0 or OMT FrameMaker 5.0, a dialog box appears in which you select the DocWriterPaperSize module of your choice: n FrameMaker A4 Paper Size if you work with the A4 paper formatn FrameMaker Letter Paper Size if you work with the U.S. letter page format.UMLDocwriter modules for the UML notation require at least one other module:FILENAME="00968.tif" ORIGSEQ="52" ORIGTYPE="I" ORIGDOC="../../sources/dgg/docw.fm5.mif"OMTDocwriter modules for the OMT notation require at least two other modules:FILENAME="00969.tif" ORIGSEQ="59" ORIGTYPE="I" ORIGDOC="../../sources/dgg/docw.fm5.mif"The names in these pictures refer to the following modules:COLS="3"COLNAME="1" COLWIDTH="105p"COLNAME="2" COLWIDTH="204p"COLNAME="3" COLWIDTH="139p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Module NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Long NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"docwriterCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocWriterCOLNAME="3" VALIGN="TOP" MOREROWS="0"DocWriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"frameCOLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMakerCOLNAME="3" VALIGN="TOP" MOREROWS="0"DocWriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"frame50COLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker 5.0COLNAME="3" VALIGN="TOP" MOREROWS="0"DocWriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"frame50a4COLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker A4 Paper SizeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DocWriterPaperSizeCOLNAME="1" VALIGN="TOP" MOREROWS="0"frame50letterCOLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker Letter Paper SizeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DocWriterPaperSizeCOLNAME="1" VALIGN="TOP" MOREROWS="0"interleafCOLNAME="2" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="3" VALIGN="TOP" MOREROWS="0"DocWriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"omtCOLNAME="2" VALIGN="TOP" MOREROWS="0"OMTCOLNAME="3" VALIGN="TOP" MOREROWS="0"OMTCompatibilityCOLNAME="1" VALIGN="TOP" MOREROWS="0"omtframe50COLNAME="2" VALIGN="TOP" MOREROWS="0"OMT FrameMaker 5.0COLNAME="3" VALIGN="TOP" MOREROWS="0"OMTDocWriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"omtinterleafCOLNAME="2" VALIGN="TOP" MOREROWS="0"OMT InterleafCOLNAME="3" VALIGN="TOP" MOREROWS="0"OMTDocwriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"omtwordCOLNAME="2" VALIGN="TOP" MOREROWS="0"OMT WordCOLNAME="3" VALIGN="TOP" MOREROWS="0"OMTDocwriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"omtword97COLNAME="2" VALIGN="TOP" MOREROWS="0"OMT Word 97COLNAME="3" VALIGN="TOP" MOREROWS="0"OMTDocwriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"wordCOLNAME="2" VALIGN="TOP" MOREROWS="0"WordCOLNAME="3" VALIGN="TOP" MOREROWS="0"DocWriterCOLNAME="1" VALIGN="TOP" MOREROWS="0"word97COLNAME="2" VALIGN="TOP" MOREROWS="0"Word 97COLNAME="3" VALIGN="TOP" MOREROWS="0"DocWriterID="27085"The Document Generation ProcessIntroductionWhen you work on a project in ObjectTeam, you use the facilities of the Browser and Diagram Editors to create various kinds of files, store them in the repository and maintain them in a hierarchical structure. You can retrieve this information from the repository and automatically turn it into technical documentation using ObjectTeam's document generator.TERM1="generating" TERM2="overview of document generation"TERM1="document generation" TERM2="overview"Steps involved in creating a documentΣ Creating a technical document from your data model involves the following steps:1 Create an empty document object in the Browser.2 Define a structure for your document.3 Generate the document in the file system using the document generator. 4 Format your generated document, if desired.FILENAME="00970.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/dgg/docw.fm5.mif"The document structure A document structure typically contains:n A Title Pagen A Table of Contentsn Multiple body files containing links to the files in the repositoryYou can define this structure manually in the Browser or by using ready-made templates called TERM1="document structure file"Document Structure files. Note: If you use a Document Structure file, you do not need to carry out Step 2 above. Your document structure is created automatically when you generate your document.Result of the generation processThe document generator extracts the information specified in your structure from the repository, such as diagrams, text files and item descriptions. It then arranges this information according to your structure and writes it to one or more files in the native file format of your word-processor or DTP package. The end product, the final technical document, thus consists of word-processor files, into which other kinds of files, such as diagrams and text files, are integrated.Target Word-Processing packagesThe set of scripts that generate a document for a particular word-processor is called an TERM1="integration" TERM2="of word processors in ObjectTeam"integration. The following integrations are available:COLS="3"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="135p"COLNAME="3" COLWIDTH="135p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Word-Processor/DTP PackageCOLNAME="2" VALIGN="TOP" MOREROWS="0"UNIXCOLNAME="3" VALIGN="TOP" MOREROWS="0"Windows NT/ W95COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="FrameMaker"FrameMakerCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version 4.0 and 5.0COLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Interleaf"Interleaf COLNAME="2" VALIGN="TOP" MOREROWS="0"Version 6.0COLNAME="3" VALIGN="TOP" MOREROWS="0"-COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Microsoft Word for Windows"TERM1="Word for Windows"Microsoft WordCOLNAME="2" VALIGN="TOP" MOREROWS="0"-COLNAME="3" VALIGN="TOP" MOREROWS="0"Version 7.0TERM1="document generation" TERM2="necessary environment variables"TERM1="environment variables" TERM2="needed for document generation"Before you startThe document generator uses your word-processor or DTP package to generate documents. So before you start generation, make sure you have the DTP software correctly installed on your system. If you are working on a Unix-based system, make sure the necessary environment variables are set, as follows:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PackageCOLNAME="2" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="1" VALIGN="TOP" MOREROWS="0"FrameMakerCOLNAME="2" VALIGN="TOP" MOREROWS="0"FMHOME must be setCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="2" VALIGN="TOP" MOREROWS="0"ILHOME need not be set but $ILHOME/bin must be in your path.ID="26513"Creating a New Document in the BrowserTERM1="document" TERM2="creating in the Browser"PrerequisiteYou can only create new documents if you have access rights to create new objects of type DocumentVersion. For more information on how to specify access rights, see the ObjectTeam Project Management Guide.How to create a new documentΣ To create a new document:1 Make sure the Browser is on Phase level.2 Select File | New | Document Version.The New Document Version dialog box appears:FILENAME="00971.unk" ORIGFILE="pics/db_nwdoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"3 In the New Document Version dialog box:a Enter the name of the new document.b Select the name of the system it documents. c Select the word processor the document is generated for:COLS="2"COLNAME="1" COLWIDTH="121p"COLNAME="2" COLWIDTH="291p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"SpecifiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Fm40"Fm40COLNAME="2" VALIGN="TOP" MOREROWS="0" FrameMaker version 4.0 (Unix only)COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Fm50"Fm50COLNAME="2" VALIGN="TOP" MOREROWS="0" FrameMaker version 5.0 (Unix only)COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Il60"Il60COLNAME="2" VALIGN="TOP" MOREROWS="0" Interleaf version 6.0 (Unix only)COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Word"WordCOLNAME="2" VALIGN="TOP" MOREROWS="0" Microsoft Word version 7.0 (PC only)4 Click on OK to confirm the information.A new Document version is created on Phase level and a directory with the same name as your document is created in your user environment.ID="29834"User environmentThe TERM1="user environment"user environment is a directory tree whose top level is by default a directory in your home directory. The names of the directories in this tree follow (from top to bottom) the names of your Project, Configuration, Phase, and Document. When you create a document, as described above, a directory with the name of your document is automatically created in this tree. For details on how to change your default user environment, refer to the ObjectTeam Project Management Guide.Update Document Directory Utilities | Update Document Directory synchronizes your document directory in the file system with the repository. This can be particularly useful if you are working on two machines, and the document directory of each is set to a local drive. When you move between machines, you can use Utilities | Update Document Directory to update the local drive of the current machine.Scope of a documentThe maximum TERM1="scope" TERM2="of document"scope of a document is a single system, i.e., one document documents one system. If you want to document an entire phase, you have to create a document for every system. You can create as many documents as you like for a system.Working on Document LevelEntering Document levelΣ To enter TERM1="document level" TERM2="in Browser"Document level, in the Browser on Phase level, double-click on a Document version in the Information area.The Document version is opened in the Information area. The Browser is now on Document level.If you open a newly created Document version, nothing appears in the Information area. You first have to create a document structure.Document-specific menu optionsWhen you open a Document version in the Browser, menu options specific to this level, such as those for editing the structure of the document, become available. For details of all menu options, see the ObjectTeam Modeling Guide.Objects on Document levelDocument versions can contain the following types of objects: COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="270p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document structure matrix"Document Structure MatrixCOLNAME="2" VALIGN="TOP" MOREROWS="0"Every document contains exactly one Document Structure Matrix. This matrix contains the names of file sections, property sections and local sections, and the hierarchy of these sections.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="file section"File SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0" File Sections are references to diagram or text files in the modeling environment. They point to one particular version of a file.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="property section"Property SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Property Sections are references to values of file or item properties. For example, you can use a Property Section to include free text in your document.Note: The default Document Structure files do not contain property sections.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="local section"Local SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Local Sections are references to files within the word-processor environment, such as title pages, tables of contents, etc.Defining a document structureAs outlined in the above table, on Document level, you create a document structure by establishing links to the files in both the modeling environment (File Sections and Property Sections) and the word-processing environment (Local Sections). If you use one of the predefined Document Structure files, this structure is created automatically when you generate your document. However, you can also create your own document structure by hand using the Document Structure Matrix Editor. For details of generating your documents using Document Structure files, see REFID="42465" TYPE="XREF-TEXTCOPY"Generating Documents Using Document Structure Files.For details of creating a document structure using the Document Structure Matrix Editor, see REFID="41821" TYPE="XREF-TEXTCOPY"Generating Documents Manually.Examining your document structure in the BrowserThe following figure shows the structure of a FrameMaker document displayed in the Information area on Document level.FILENAME="00972.unk" ORIGFILE="pics/docstruc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"Once you have generated the contents of your document, you can examine these files directly from the Browser. You can also start the current word-processor from the Browser on Document level to edit text or to work on the final layout.TERM1="document" TERM2="generating using templates"ID="32012"TERM1="document" TERM2="specifying properties"TERM1="properties" TERM2="specifying for documents"Specifying Document PropertiesDocument propertiesLike most other Browser objects, you can specify properties for Document versions. The following table lists the properties that can be specified for a Document Version.COLS="3"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="72p"COLNAME="3" COLWIDTH="216p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document type" TERM2="document property"Document TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional identificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document title" TERM2="document property"Document TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional identificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document subject" TERM2="document property"Document SubjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional identificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document reference" TERM2="document property"Document ReferenceCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional identificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document keywords" TERM2="document property"Document KeywordsCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional identificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document date" TERM2="document property"Document DateCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional identificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document authors" TERM2="document property"Document AuthorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional identificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document status" TERM2="document property"Document StatusCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional identificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="document structure file" TERM2="document property"Document Structure FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies that a non-default Document Structure File be used for generation.COLNAME="1" VALIGN="TOP" MOREROWS="0"File System Path PartCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the name of the directory in the User Environment in which the generated document will be stored.COLNAME="1" VALIGN="TOP" MOREROWS="0"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"Multi-line textCOLNAME="3" VALIGN="TOP" MOREROWS="0"Optional descriptionMost of these properties can be used to identify a document in different ways. For example, if documents in your department are subject to a coding system, you can decide to use the property Document Reference to attach the code. The property Document Structure File can be used to specify a user-defined document structure file. For details, see REFID="41024" TYPE="XREF-TEXTCOPY"Customizing the Document Structure File.Displaying document properties in a generated documentIf you specify document properties, they will appear in your generated document, for example on the Title Page. The following figure shows how properties might appear on the Title Page in a generated FrameMaker document:FILENAME="00973.unk" ORIGFILE="pics/docttl.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"Specifying properties for a document versionΣ To specify properties for a Document Version:1 In the Browser on Phase level, select the Document Version in the Information area.2 Select File | Properties | Edit.The Edit Properties dialog box appears.FILENAME="00974.unk" ORIGFILE="pics/docprops.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"3 Fill in the desired properties.4 Click on OK.TERM1="generating" TERM2="default document"TERM1="document" TERM2="generating -"ID="42465"Generating Documents Using Document Structure FilesIntroductionThis section describes how to generate technical documentation from your data model using ready-made templates called Document Structure files that are supplied with ObjectTeam. The default Document Structure filesThe quickest way to produce technical documentation is to use one of the default Document Structure files. There are two default Document TERM1="document structure file"Structure files for each available word-processor or DTP package:n M4_home/etc/package_mod.strTERM1="fm40_mod.str"TERM1="fm50_mod.str"TERM1="il60_mod.str"TERM1="word_mod.str" Use this file for documents documenting systems from the Analysis, System design and Object Design phases.n M4_home/etc/package_imp.strTERM1="fm40_imp.str"TERM1="fm50_imp.str"TERM1="il60_imp.str"TERM1="word_imp.str"Use this file for documents documenting systems from the Implementation phase.These files define the structure and contents of your generated documents. However, you can also create your own custom Document Structure file. For details, see REFID="41024" TYPE="XREF-TEXTCOPY"Customizing the Document Structure File.ID="38541"Generating a default documentΣ To generate a document using a default Document Structure file:1 In the Browser on Phase level, select a Document Version in the Information area.2 Select File | Generate.The Generate Document dialog box appears.FILENAME="00975.unk" ORIGFILE="pics/gendoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"3 Select the appropriate Document Structure File, for example word_mod.str, and click on OK.A Monitor window opens, displaying the progress of the document generator.Result of generationThe document generator:n Creates a document structure which you can view in the Browser on Document level.n Creates Local Sections in the user environment, such as Title Page, etc., and creates initial contents for these files.n Creates File Sections in the user environment and exports diagrams and text files from the repository to these File Sections.Note that no Property Sections are included in the default document structure. Viewing your generated structureΣ To view the generated document structure, in the Browser on Phase level, double-click on the Document Version in the Information area.The Document Version is opened in the Information area.The following figure shows an example of an initial structure generated in the Object Design phase. Note that the document is structured according to the various models in the OMT method.FILENAME="00976.unk" ORIGFILE="pics/viewstrc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"Modifying Generated DocumentsAdapting the generation processIf you are not satisfied with the structure or initial contents generated by the Document Structure file, you can:n Edit the generated structure, or create a structure from scratch using the Document Structure Matrix editor.For example, if you are not satisfied with the default structure, you might want to make alterations such as:- Changing the hierarchy of the objects- Adding objects to the hierarchy- Removing objects from the hierarchy- Changing the contents of local sectionsAny changes you make to a structure in the Browser apply only to the current document and cannot be reused. For details of creating a document structure using the Document Structure Matrix Editor, see REFID="41821" TYPE="XREF-TEXTCOPY"Generating Documents Manually.n Create your own custom Document Structure file.If you create a custom file, you can use it again in any other phase. For details, see REFID="41024" TYPE="XREF-TEXTCOPY"Customizing the Document Structure File.Refining your documentOnce your document has been generated, you may want to refine the text or layout a little using your word-processor before printing it. Be aware that any changes you make to the document in the word-processor are lost when you regenerate the document.For details on refining generated documents, refer to REFID="19181" TYPE="XREF-TEXTCOPY"Chapter 2, DTP-Specific Features.ID="41821"Generating TERM1="documents" TERM2="creating manually"Documents Manually IntroductionThe default structure of a document is specified in the Document Structure file. So if you want to generate documents automatically with a different structure, you must create your own structure file. See REFID="41024" TYPE="XREF-TEXTCOPY"Customizing the Document Structure File for details on how to create your own Document Structure File.However, if you only want to make some minor one-time changes to a generated document, you can probably make these changes and add-ons in the Browser on Document level and regenerate parts of the customized document. This section discusses how to do this.Defining your own draft documentΣ Defining your own draft document consists of the following steps:1 Create a new document version.Refer to REFID="26513" TYPE="XREF-TEXTCOPY"Creating a New Document in the Browser.2 Define your document structure, adding the appropriate file sections, local sections and property sections.Refer to REFID="29901" TYPE="XREF-TEXTCOPY"Adding a Local Section, REFID="17842" TYPE="XREF-TEXTCOPY"Adding a File Section, REFID="13575" TYPE="XREF-TEXTCOPY"Adding a Property Section and REFID="23523" TYPE="XREF-TEXTCOPY"Including a Section in the Document Structure.3 Adapt the document structure.Refer to REFID="26557" TYPE="XREF-TEXTCOPY"Changing the Document Structure.4 Generate the document structure.Refer to REFID="36199" TYPE="XREF-TEXTCOPY"Generating Contents and Structure of Local Sections.ID="22060"The TERM1="Document Structure Matrix"SEE="Document Structure Matrix" TERM1="DSM"Document Structure MatrixIntroductionA newly created Document Version is empty. When you create your first (local or file) section, a Document Structure Matrix (DSM) is automatically created in the Document. Every document can contain exactly one DSM. By editing the Document Structure Matrix, you can create and change the structure of your document.Appearance of a Document Structure MatrixSections in the Document Structure Matrix dialog box can be folded and unfolded, just like in the Navigation Area of the Browser. The hierarchy as represented in the Document Structure Matrix dialog box is reflected in the Information Area of the Browser with indentation of document objects.FILENAME="00977.unk" ORIGFILE="pics/browsdsm.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"ID="29901"Adding a TERM1="local section" TERM2="adding"Local SectionIntroductionLocal sections are files that are part of the document structure, but do not have a link to the development environment. They form a framework for the "raw" information retrieved from the development environment. Examples are word processor dependent documents such as book files, TOCs and plain documents, and word processor-independent files such as Encapsulated PostScript (EPS) files and ASCII files.Default local section typesBelow is an (alphabetical) list of the available default TERM1="local section" TERM2="type"local section types:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Book"BookCOLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker book fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Cat"CatCOLNAME="2" VALIGN="TOP" MOREROWS="0"Interleaf Catalog FileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Data"DataCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Doc"DocCOLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker documentInterleaf DocumentMS Word DocumentNote: Depends on the Editor specified when the document was created.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="DocText"DocTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII text fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Eps"EpsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Encapsulated PostScript file without preview imageCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Epsf"EpsfCOLNAME="2" VALIGN="TOP" MOREROWS="0"Encapsulated PostScript file with TIFF preview imageCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Epsi"EpsiCOLNAME="2" VALIGN="TOP" MOREROWS="0"Encapsulated PostScript file with bitmap preview imageCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Mif"MifCOLNAME="2" VALIGN="TOP" MOREROWS="0"File in FrameMaker MIF formatCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Mml"MmlCOLNAME="2" VALIGN="TOP" MOREROWS="0"File in FrameMaker MML formatCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Ps"PsCOLNAME="2" VALIGN="TOP" MOREROWS="0"PostScript fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Str"StrCOLNAME="2" VALIGN="TOP" MOREROWS="0"Interleaf Structure FileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Toc"TocCOLNAME="2" VALIGN="TOP" MOREROWS="0"FrameMaker table of contents Interleaf table of contentsNote: Depends on the Editor specified when the document was created.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="Ximage"XimageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Graphical file in Ximage formatHow to add a local sectionΣ To add a local section to your document:1 Create a new local section on Document levelSee for details: REFID="26456" TYPE="XREF-TEXTCOPY"How to create a section from the Browser2 Include the new local section in your document structureSee for details: REFID="28307" TYPE="XREF-TEXTCOPY"How to include a section in your document structure3 If the file you want to be the local section already exists in your file system, copy or move it over to your user environment (see REFID="29834" TYPE="XREF-TEXTCOPY"User environment).You can use the appropriate system command(s) or tools of your operating system to do this (e.g. cp on UNIX and copy on Windows)The actual file is now part of your document structure.Warning: Be aware of the following. If you generate a document by selecting File | Generate for the selected document on Phase level, you have to select a document structure file. If you select a default structure file, newly added local sections are removed from the document structure. They are still accessible from the Browser on Document level, though.Warning: Create the local section in ObjectTeam before you copy or move the file over to your user environment. If you try to do it after, the file is overwrittenID="17842"Adding a File TERM1="file section" TERM2="adding"SectionDefault file section typesFile sections are links to diagram and text files from the development environment. Below is a list of the available default TERM1="file section type"file section types. COLS="3"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="108p"COLNAME="3" COLWIDTH="234p"COLNAME="1" VALIGN="TOP" MOREROWS="0"File Section TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Interface NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="cad"cadCOLNAME="2" VALIGN="TOP" MOREROWS="0"CADCOLNAME="3" VALIGN="TOP" MOREROWS="0"Class Association DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="ccd"ccdCOLNAME="2" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Class Communication DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="dfd"dfdCOLNAME="2" VALIGN="TOP" MOREROWS="0"DFDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Data Flow DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="etd"etdCOLNAME="2" VALIGN="TOP" MOREROWS="0"ETDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Sequence DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="mgd"mgdCOLNAME="2" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="3" VALIGN="TOP" MOREROWS="0"Message Generalization DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="std"stdCOLNAME="2" VALIGN="TOP" MOREROWS="0"STDCOLNAME="3" VALIGN="TOP" MOREROWS="0"State Transition DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="esqlc++"esqlc++COLNAME="2" VALIGN="TOP" MOREROWS="0"Esqlc++COLNAME="3" VALIGN="TOP" MOREROWS="0"C++ source file with embedded SQLCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="c++"c++ COLNAME="2" VALIGN="TOP" MOREROWS="0"C++ COLNAME="3" VALIGN="TOP" MOREROWS="0"C++ source fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="h++"h++COLNAME="2" VALIGN="TOP" MOREROWS="0"H++COLNAME="3" VALIGN="TOP" MOREROWS="0"header fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="lex++"lex++COLNAME="2" VALIGN="TOP" MOREROWS="0"Lex++COLNAME="3" VALIGN="TOP" MOREROWS="0"lex fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="yacc++"yacc++COLNAME="2" VALIGN="TOP" MOREROWS="0"Yacc++COLNAME="3" VALIGN="TOP" MOREROWS="0"yacc fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="make"make COLNAME="2" VALIGN="TOP" MOREROWS="0"Makefile COLNAME="3" VALIGN="TOP" MOREROWS="0"make fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="mktmpl"mktmpl COLNAME="2" VALIGN="TOP" MOREROWS="0"Make Template COLNAME="3" VALIGN="TOP" MOREROWS="0"make file templateCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="sql_script"sql_scriptCOLNAME="2" VALIGN="TOP" MOREROWS="0"SQL ScriptCOLNAME="3" VALIGN="TOP" MOREROWS="0"SQL scriptCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="tcl"tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"TCLCOLNAME="3" VALIGN="TOP" MOREROWS="0"file containing TCL proceduresHow to add a file sectionΣ To add a file section to your document:1 Create a new file section on Document levelSee for details: REFID="26456" TYPE="XREF-TEXTCOPY"How to create a section from the Browser2 Include the new file section in your document structureSee for details: REFID="28307" TYPE="XREF-TEXTCOPY"How to include a section in your document structureThe file section is now part of your document structure.Warning: Be aware of the following. If you generate a document by selecting File | Generate for the selected document on Phase level, you have to select a document structure file. If you select a default structure file, newly added file sections may be removed from the document structure. They are still accessible from the Browser on Document level, though.File section statusDuring the software development life cycle, diagrams are liable to change. Usually, different versions of the same diagram will exist. The status of a file section controls which version of the file the file section refers to. The status is either one of the following:n TERM1="fixed" TERM2="status of file section"TERM1="file section" TERM2="status"fixed The file section points at the version of the diagram (or file) that was the working version when the file section was created or when its status was changed last.n TERM1="selected" TERM2="status of file section"selected The file section points at the version of the diagram (or file) that is currently the working version. When a new version of the diagram or file is created or selected in the development environment, the file section is rerouted to this new (working) version.How to change the file section statusΣ To change the file section status, select TERM1="file section" TERM2="changing status"one of the following:n Version | TERM1="Make Fixed" TERM2="file section"Make FixedChanges the status from selected into fixed.n Version | TERM1="Select Fixed..." TERM2="file section"Select Fixed.Changes the status from selected into fixed. You can select the version you want to fix the link to.n Version | TERM1="Make Selected" TERM2="file section"Make SelectedChanges the status from fixed into selected.ID="13575"Adding a Property SectionTERM1="property section" TERM2="adding"IntroductionProperty sections are links to values of properties from the development environment. They can have the following types:TERM1="property section types"n File propertiesn Item properties TERM1="file property section"TERM1="property section" TERM2="file"File Property SectionProperty sections of this type refer to file properties. An example of a file property is free text that is specified for a Class Association Diagram through File | Properties | Edit.How to add a property sectionΣ To add a property section to your document:1 Create a new property section on Document levelSee for details: REFID="26456" TYPE="XREF-TEXTCOPY"How to create a section from the Browser2 Include the new property section in your document structureSee for details: REFID="28307" TYPE="XREF-TEXTCOPY"How to include a section in your document structureThe property section is now part of your document structure.Warning: Be aware of the following. If you generate a document by selecting File | Generate for the selected document on Phase level, you have to select a document structure file. If you select a default structure file, newly added property sections may be removed from the document structure. They are still accessible from the Browser on Document level, though.Status of File Property SectionsThe TERM1="property section" TERM2="status"status of a file property section indicates which version of the file the property section refers to. The status is either one of the following:n TERM1="fixed" TERM2="status of property section"fixed The file property section points at the version of the diagram (or file) that was the working version when the file section was created or when its status was changed last. Version changes in the repository do not affect this reference; it is a fixed link.n TERM1="selected" TERM2="status of property section"selected The file property section points at the version of the diagram (or file) that is currently the working version. When a new version of the diagram or file is created or selected in the development environment, the file property section is rerouted to this new (working) version.How to change the status of a File Property SectionΣ To change this status, select one of the following:n Version | TERM1="Make Fixed" TERM2="file property section"Make FixedChanges the status from selected into fixed.n Version | TERM1="Select Fixed..." TERM2="file property section"Select Fixed.Changes the status from selected into fixed. The result is equal to Version | Make Fixed, but here you can select the version you want to fix the link to.n Version | TERM1="Make Selected" TERM2="file property section"Make SelectedChanges the status from fixed into selected. The file property section will refer to the version that is currently selected.TERM1="item property section"TERM1="property section" TERM2="item"Item Property SectionProperty sections of this type refer to item properties. An example of an item property is free text that was specified for a CAD class in a Class Association Diagram through Item | Properties | Edit.Status of an Item Property SectionThe status of an item property section indicates which state of the item the property section refers to. The status is either one of the following:n TERM1="snapshot" TERM2="status of item property section"snapshot This status refers to the state the item was in at the moment you activated this menu entry. Item changes in the repository do not affect this reference; it is a snapshot.n TERM1="current" TERM2="status of item property section"current The item property section will refer to the current state of the item. If the item's state changes, this reference will change too.How to change the status of an Item Property SectionΣ To change this status, select one of the following:n Version | TERM1="Make Snapshot" TERM2="item property section"Make SnapshotChanges the status from current into snapshot. n Version | TERM1="Make Current" TERM2="item property section"Make CurrentChanges the status from snapshot into current.ID="23523"Including a Section in the Document StructureTERM1="document structure" TERM2="including sections"TERM1="file section" TERM2="including in document structure"TERM1="local section" TERM2="including in document structure"TERM1="property section" TERM2="including in document structure"IntroductionThere are two ways of including a local section, a file section or a property section in the document structure:n Create the section in the Browser on Document level first and add it to the Document Structure later.n Create the section in the Edit Document Structure Matrix dialog box first and apply a section type to the section later.ID="26456"How to create a section from the BrowserΣ To create a section:1 In the Browser, select File | New | (section type) on Document level.2 Fill in the New Section dialog box.The following figure shows the new Local Section dialog box and the New File Section dialog box:FILENAME="00978.unk" ORIGFILE="pics/nwlocsec.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"FILENAME="00979.unk" ORIGFILE="pics/nwfilsec.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"The following figure shows the New File Property Section (top) and the New Item Property (bottom) dialog box:FILENAME="00980.unk" ORIGFILE="pics/nwfilprp.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"FILENAME="00981.unk" ORIGFILE="pics/nwitprop.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"ID="28307"How to include a section in your document structureAfter you have confirmed the information in the dialog box, a new object of the selected section type is added to the Information Area. However, it is not yet included in the document structure. A dash preceding the object's name in the Information Area indicates this.The following figure shows a Local Section (NewLocalSection) that is not yet added to the Document Structure:FILENAME="00982.unk" ORIGFILE="pics/brnewsec.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"Σ To include the new section in the document structure:1 Open the Document Structure Matrix (DSM) from the Browser on Document level.FILENAME="00983.unk" ORIGFILE="pics/editstrc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"2 Click on New in the Edit Document Structure dialog box.The New Section dialog box appears:FILENAME="00984.unk" ORIGFILE="pics/addnwsec.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"3 Select the section you want to incorporate from the list in the New Section dialog box.4 Select the TERM1="parent section"parent section of the selected section from the list Parent.If you want the new section to be included in the document and if the Master Document (Word) or book file (FrameMaker and Interleaf) already exists, select the Master Document or book file as parent section.If this parent section does not exist yet, make sure you change the new section's parent section to the Master Document or book file section, once it is created.5 Click on OK to confirm the information.Now the section is part of the document structure.6 Click on OK to confirm the information in the Edit Document Structure dialog box.When you edit a local word processor section from the Document level using File | Edit, the appropriate word processor is started with the selected local section loaded.Warning: Changes made to the DSM do only take effect after you (re)generate the Master Document or book file.For more informationREFID="38541" TYPE="XREF-TEXTCOPY"Generating a default document, REFID="33931" TYPE="XREF-TEXTCOPY"How to change a document structure and REFID="20834" TYPE="XREF-TEXTCOPY"How to generate a local section structureHow to create a section from a DSMΣ To create a section:1 In the Browser, open the Document Structure Matrix (Type: dsm) on Document level.2 Click on New in the Edit Document Structure dialog box.3 Enter the name of a new section in the entry field.4 Select the parent section of the new section from the list Parent.5 Click on OK to confirm the information.Now the section is part of the document structure.6 Click on OK to confirm the information in the Document Structure dialog box.Now the section is displayed in the Information Area as well, but the Type of the object is None. You can decide to turn it into a Local Section, a File Section or a Property Section.7 Select File | TERM1="Define"TERM1="section" TERM2="defining"Define | (section type) Section.For File Sections, you can only select an existing FileVersion from the documented system. If you do so, the initial name that you might have entered will be lost.For Local Sections, you have to select a Section Type from a fixed list. For Property Sections, you specify the item or file property in the New Property Section dialog box.8 Click on OK to confirm the information.The Type of the new section is now defined.ID="26557"Changing the Document StructureTERM1="document structure" TERM2="changing -"ID="33931"How to change a document structureYou can change the document structure at any time within the Browser.Σ To change the document structure:1 Open the Document Structure Matrix (Type: dsm) from the Browser on Document level.The Edit Document Structure dialog box appears.2 Select the section you want to change the position of in the structure.3 Click on Edit.The Edit Section dialog box appears.FILENAME="00985.unk" ORIGFILE="pics/editsec.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"4 Select a different parent section from the Parent list.The document structure changes after you confirm the information in the Edit Section dialog box.5 Click on OK to confirm the change.The new structure is reflected in the Information Area on Document level.AlternativeAlternatively, you can move a section within a document hierarchy by dragging and dropping it in the Edit Document Structure dialog box. To change the order of sections on the same hierarchy level, you can only use drag and drop.TERM1="document structure" TERM2="removing sections"Removing a Section from the Document StructureHow to remove a section from a document structureAn obsolete section can be deleted from the document structure at any time.Σ To delete a section:1 Open the Document Structure Matrix (dsm) from the Browser on Document level.The Edit Document Structure dialog box appears.2 Select the section you want to delete.3 Click on Delete.Keep in mind that if the selected section has child objects, these objects are deleted from the document structure too. If the delete action had an unexpected result, you can click on Cancel to bring back the situation before the delete action.4 Click on OK to confirm the removal.Deleted sections are deleted from the document structure, but not from the Browser. They are still visible in the Information Area on Document level, where a preceding dash indicates that they are not part of the document structure anymore. To delete a section from the Browser as well, use File | Delete or Version | Delete.TERM1="structure" TERM2="generating -"TERM1="contents" TERM2="generating -"TERM1="local section" TERM2="generating structure and contents"ID="36199"Generating Contents and Structure of Local SectionsIntroductionWhen you generate local sections, the document generation tools generate the contents and, if applicable, the structure. The structure of a local section is generated when both of the following are true:n A document contains diagrams (file sections and property sections) from the development environment.n The DTP package can work with documents containing other documents (FrameMaker book files for instance, or Interleaf Structure Files).When you use a default structure file to generate your document, the structure and contents generators are already defined, and you do not really have to pay further attention. However, you can specify a contents generator and a structure generator for every local section separately. You can also generate the contents and structure of every local section separately.How to TERM1="structure generator" TERM2="specifying"TERM1="local section" TERM2="specifying structure generator"specify a Structure GeneratorA structure generator is a (Tcl) command that retrieves underlying file sections or property sections. Σ To assign a structure generator to a local section:1 Select the local section in the Information Area on Document level and selecting File | Properties | Edit. FILENAME="00986.unk" ORIGFILE="pics/genstruc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"ID="20834"How to generate a local section structureΣ To generate the structure of a local section, select the local section and selecting File | Generate | Structure.Note: If you generate the structure of an individual local section, the information area is not automatically updated. With View | Update you can do this manually.For more information on structure generators, see REFID="41024" TYPE="XREF-TEXTCOPY"Customizing the Document Structure File.How to TERM1="contents generator" TERM2="specifying"TERM1="local section" TERM2="specifying contents generator"specify a Contents GeneratorΣ To assign a contents generator to a local section, select the local section in the Information Area on Document level and selecting File | Properties | Edit. You can generate the contents (and structure) of a local section with File | Generate | Structure And Contents.For more information on contents generators, see REFID="41024" TYPE="XREF-TEXTCOPY"Customizing the Document Structure File.Redefining Existing TERM1="section" TERM2="changing an existing -"SectionsHow to apply a type to a sectionΣ To apply a different type to an existing section:1 Select the local section, file section or property section in the Information area.2 Select File | Delete in the Browser. Because the section is still part of the Document Structure, it is not deleted from the Information Area. However, the type of the selected section is turned into None.3 Select File | TERM1="Define"Define | section_type.FILENAME="00987.unk" ORIGFILE="pics/deflocsc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/docw.fm5.mif"4 Apply the section type of your choice, for instance local section.The section type of your choice is now applied to the selected section.Editing TERM1="property" TERM2="editing"TERM1="local section" TERM2="edit properties"TERM1="file section" TERM2="edit properties"TERM1="property section" TERM2="edit properties"PropertiesHow to edit propertiesΣ To edit the properties of file sections, local sections and property sections, select the section in the Information Area of the Browser and select File | Edit Properties.Available property sectionsThe following properties are available for the different sections:COLS="5"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="63p"COLNAME="3" COLWIDTH="63p"COLNAME="4" COLWIDTH="72p"COLNAME="5" COLWIDTH="253p"COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Local SectionCOLNAME="3" VALIGN="TOP" MOREROWS="0"File SectionCOLNAME="4" VALIGN="TOP" MOREROWS="0"Property SectionCOLNAME="5" VALIGN="TOP" MOREROWS="0"ExplanationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="free text" TERM2="property"Free TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"XCOLNAME="3" VALIGN="TOP" MOREROWS="0"X COLNAME="4" VALIGN="TOP" MOREROWS="0"X COLNAME="5" VALIGN="TOP" MOREROWS="0"Option for documenting files or items.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="contents generator" TERM2="property"Contents GeneratorCOLNAME="2" VALIGN="TOP" MOREROWS="0"X COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"See REFID="36199" TYPE="XREF-TEXTCOPY"Generating Contents and Structure of Local Sections.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="structure generator" TERM2="property"Structure generatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"X COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"See REFID="36199" TYPE="XREF-TEXTCOPY"Generating Contents and Structure of Local Sections.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="referred properties" TERM2="property"TERM1="property" TERM2="referred -"Referred propertiesCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"X COLNAME="5" VALIGN="TOP" MOREROWS="0"List of properties the property section refers to. You can add new property types or delete selected ones by editing this list.A list of valid property types can be found in the following customization file:M4_home/etc/t_RDBMS/l_language/propdefs.propdefs ID="41024"Customizing the TERM1="document structure file" TERM2="customizing"Document Structure FileAvailable Document Structure FilesFor each of the supported word-processor or desktop publishing packages, there are two document structure files:COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Structure fileCOLNAME="2" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="fm40_mod.str"TERM1="fm50_mod.str"TERM1="il60_mod.str"TERM1="word_mod.str"package_mod.str COLNAME="2" VALIGN="TOP" MOREROWS="0"Used for documents documenting systems in the Analysis, System Design and Object Design phases. COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="fm40_mod.str"TERM1="fm50_mod.str"TERM1="il60_mod.str"TERM1="word_mod.str"package_imp.str COLNAME="2" VALIGN="TOP" MOREROWS="0"Used for documents documenting systems in the Implementation phase.In the above files, package is one of fm40, fm50, il60 or word.How to store user-defined structure files in the file systemΣ To store a user-defined structure file in the file system:1 Select Edit | Properties for a document.2 In the Document Structure File entry field, specify the name (and the path) of your structure file. When you use File | Generate to generate that same document, you can select this user-defined file as document structure file.Example of a Structure File (fm40_mod.str)The following figure shows an example of a structure file.#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Componentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|Level|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Struct.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|Sect.|Cont.|Cont.#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|Delta|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Gen.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|Typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Genname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|#------------------------------------------------------------------------------------Modelname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bookname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Bookname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Modelname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(Titlename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Page)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'+name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'genFmTitleModelname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(Contents)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'TocObjectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Modelname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Associationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Diagramsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'+name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'createFileSectionsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cadname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Communicationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Modelname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Communicationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Diagramsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'+name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'createFileSectionsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ccdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Messagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Generalizationname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Diagramsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'createFileSectionsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'mgdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dynamicname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Modelname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Eventname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Tracename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Diagramsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'+name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'createFileSectionsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'etdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Statename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Transitionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Diagramsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'createFileSectionsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'stdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Functionalname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Modelname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dataname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Flowname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Diagramsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'+name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'createFileSectionsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'dfdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dataname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Dictionaryname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Classesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'+name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'|name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'genFmListContents of a Structure FileEach structure file is a text file formatted into the following columns:COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="316p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Column NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"MeaningCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the document component: the local sections as they are going to be created in the document.Make sure the components names are unique. Two identical names in a document structure file may break the document generation process.COLNAME="1" VALIGN="TOP" MOREROWS="0"Level DeltaCOLNAME="2" VALIGN="TOP" MOREROWS="0"The indentation level; that is, the place of the document component in the document structure. The place is indicated in relation to the previous component:=name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Same level as previous component+name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'One deeper than the previous component-name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'One shallower than the previous component-nname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-n shallower than the previous componentCOLNAME="1" VALIGN="TOP" MOREROWS="0"Struct. Gen COLNAME="2" VALIGN="TOP" MOREROWS="0"Here you can enter a Tcl procedure that calls a contents generator, in addition to the one associated with the local section type (see Section Type).See REFID="20436" TYPE="XREF-TEXTCOPY"Structure Generator.COLNAME="1" VALIGN="TOP" MOREROWS="0"Sect TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"The type of the local section. See REFID="29901" TYPE="XREF-TEXTCOPY"Adding a Local Section for an overview of valid section types. The type of a section affects the contents generator used for generating the section. For instance, there is a different contents generator for a FrameMaker book file (section type: Book) and for a FrameMaker Document (section type: Doc).COLNAME="1" VALIGN="TOP" MOREROWS="0"Cont. GenCOLNAME="2" VALIGN="TOP" MOREROWS="0"Here you can enter a Tcl procedure that calls a structure generator, other than the one associated to the local section type (see Section Type), for example, genFmTitle or genFmlist.See REFID="25592" TYPE="XREF-TEXTCOPY"Contents Generator.COLNAME="1" VALIGN="TOP" MOREROWS="0"ContentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Initial contents file. These are discussed for every word processor separately in REFID="19181" TYPE="XREF-TEXTCOPY"Chapter 2, DTP-Specific Features.TERM1="document structure file" TERM2="structure generator"TERM1="structure generator"ID="20436"Structure GeneratorIntroductionThe structure generator of a local section that should contain all diagrams of a certain type is:TERM1="createFileSections" TERM2="Tcl procedure"createFileSections fileTypes This generator refers to the Tcl procedure of the same name, which is defined in the Tcl file TERM1="docprocs.tcl"docprocs.tcl. You can find this file in the directory M4_home.. In this file, you can also find structure generators for file and item property sections:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Tcl ProcedureCOLNAME="2" VALIGN="TOP" MOREROWS="0"See For DetailsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="createItemPropSections" TERM2="Tcl procedure"createItemPropSections COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="36838" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="createFilePropSections" TERM2="Tcl procedure"createFilePropSections COLNAME="2" VALIGN="TOP" MOREROWS="0"REFID="31955" TYPE="XREF-TEXTCOPY"pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'43Generating a structure could also be useful for local sections that contain other local sections, such as FrameMaker book files or Interleaf structure files. However, these type of files usually have a separate structure generator associated with them. In that case, the structure generation is taken care of internally by the document generation tools and as a result, no structure generator has to be specified through properties. For technical details on documentation generation, refer to REFID="32350" TYPE="XREF-TEXTCOPY"Chapter 3, Creating Your Own Document Generator.ID="36838"createItemPropSectionsIntroductionUse the Tcl procedure createItemPropSections to automatically generate specified item properties from the Cayenne repository into your document. Item properties are properties you can define for diagram components that have an item type attached to them.You assign values to item (and component) properties through Item | Edit Properties in a diagram editor.Examples of item properties are: Data Type, Persistent and Association Access.SyntaxThe createItemPropSections command takes the following arguments:fileTypes itemType componentType labelType properties The argument properties Examine the customization file propdefs.propdefs to retrieve valid values for the argument properties. If you are using the Property Definition Customization Editor to view this customization file, refer to the Name column for valid properties values, e.g.: persistent, nullable, include_list. These names are used internally by ObjectTeam. To find out a property name as used in the Property dialog box, refer to the Long Name column (e.g.: Persistent, Nullable, External Include List).Suppose you are looking for the property Data Type that is specified for qualifiers in a qualified association in a CAD. After some searching in the Property Definition Editor you will find out that the name for this property is data_type.ID="11042"Property ContainersBefore you look at the other arguments, you must find out if the property you are looking for is defined as an Interface Member for a property container, like a Property Page. If it is, only the location of the property container is specified in the customization file proplocs.proplocs, not that of the property itself. You need the information of the proplocs.proplocs file to retrieve valid values for the other arguments for the procedure createItemPropSections.There is no easy way in the Property Definition Customization Editor to find out if a property is defined as Interface Member of a property container. However, if, in the Property dialog box, the property is part of a Property page other than Misc, your property is probably defined as an Interface Member of this Property page. Property containers can have the following Interface Classes:n PropIfPagen PropIfGroupn PropIf2Coln PropIfCombo.The property freeText, for instance, is part of a Property page with the tab Text. By using the Property Definition Editor you can retrieve the internal name for this Property page: the Interface Class must be PropIfPage and the Long Name must be Text. The only matching Name for this Property Page is freeTextPage. To double check, you can select Edit | Info for this property container you found. The property you are looking for should be listed under Interface Members in the information dialog box that appears.Tip: If you have read access to the directories in your file system where the customization files on corporate level are stored, you can view the file proplocs.proplocs with a text editor. You can use the Find or Search feature of your text editor to find out if your property is defined as Interface Member of a property container.The arguments fileType, itemType, componentType, and labelType Examine the customization file proplocs.proplocs to retrieve valid values for the arguments fileType, itemType, componentType, and labelType. If you are using the Property Availability Customization Editor to view this customization file, refer to the following columns:COLS="3"COLNAME="1" COLWIDTH="115p"COLNAME="2" COLWIDTH="244p"COLNAME="3" COLWIDTH="88p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ArgumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Column In Property Availability EditorCOLNAME="3" VALIGN="TOP" MOREROWS="0"ExampleCOLNAME="1" VALIGN="TOP" MOREROWS="0"fileTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Diagram TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"cadCOLNAME="1" VALIGN="TOP" MOREROWS="0"itemTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Container Type(only for the properties for which the Container Kind Item is defined)COLNAME="3" VALIGN="TOP" MOREROWS="0"deCOLNAME="1" VALIGN="TOP" MOREROWS="0"componentTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"qualif_assocCOLNAME="1" VALIGN="TOP" MOREROWS="0"labelTypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Label TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"qualifierWarning: Bear in mind that you can only use the procedure createItemPropSections for diagram components that have an Item Type defined. In the Property Availability Editor this means: only the entries for which the Container Type Item is specified.If the property you are looking for is defined as Interface Member of a property container, look for the defined values of the property container; the location of the property itself is not specified in this file.Examples of complete createItemPropSection procedure callsIf you are looking for the location of the property data_type, for instance, you probably have found out that it is not defined as an Interface Member for a property container, so you could look for this property directly. Besides the Property Availability Editor, you can consult REFID="14387" TYPE="XREF-TEXTCOPY"Appendix B, Type and Scope of Diagram Components in the ObjectTeam Modeling Guide to find out the right values for the property you are looking for.This appendix shows that the componentType of a qualifier is qualif_assoc, the itemType is de and the labelType is qualifier. So, the procedure createItemPropSections should take the following argument values for this particular property:createItemPropSections cad de qualif_assoc qualifier data_typeIf you are interested in the property Free Text for classes in a CAD for instance, the procedure createItemPropSections should take the following argument values:createItemPropSections cad cl cad_class name freeTextSpecifying createItemPropSections as Structure GeneratorIf you have retrieved the values for createItemPropSections, do the following on Document level:1 Create a new local section or select an existing local section2 Select File | Properties | EditThe Edit Properties dialog box appears3 Enter createItemPropSections, including the argument values in the field Structure Generator, e.g.:createItemPropSections cad de qualif_assoc qualifier data_type4 Click OK to confirm the information in the dialog box5 Select File | Generate | Structure and Contents for this local sectionThe appropriate item property sections are generated for the selected local section.For more informationMore information about the type and scope of diagram components can be found in REFID="14387" TYPE="XREF-TEXTCOPY"Appendix B, Type and Scope of Diagram Components of the ObjectTeam Modeling Guide. You could retrieve the necessary information from this table instead of from the Property Availability Editor.More information on the Property Definition Editor, the Property Availability Editor, the customization files propdefs.propdefs and proplocs.proplocs, and (user-defined) properties in general can be found in REFID="32013" TYPE="XREF-TEXTCOPY"Chapter 8, Customizing Properties of the ObjectTeam Customization Guide.ID="31955"createFilePropSectionsIntroductionUse the Tcl procedure createFilePropSections to automatically generate specified file properties from the Cayenne repository into your document. File properties are properties you can specify for an entire diagram. You assign values to file properties through File | Properties | Edit in the browser on system level, or in the diagram editor itself.Free Text is an example of a file property.SyntaxThe createItemPropSections command has the following arguments:fileTypes properties The argument properties Examine the customization file propdefs.propdefs to retrieve valid values for the argument properties. If you are using the Property Definition Customization Editor to view this customization file, refer to the ContainerKind column for valid properties values, e.g. freeText. These names are used internally by ObjectTeam. To find out a property name as used in the Property dialog box, refer to the Long Name column (e.g.: Free Text).Property ContainersBefore you look at the fileType argument, you must find out if the property you are looking for is defined as an Interface Member for a property container, like a Property Page. See for more information on property pages: REFID="11042" TYPE="XREF-TEXTCOPY"Property ContainersThe arguments fileType Examine the customization file proplocs.proplocs to retrieve valid values for the argument fileType. If you are using the Property Availability Customization Editor to view this customization file, refer to the column Diagram Type for property entries that have the Container Kind Graph.If the property you are looking for is defined as Interface Member of a property container, look for the defined values of the property container; the location of the property itself is not specified in this file.Examples of a createFilePropSection procedure callIf you are looking for the location of the property freeText, for instance, you probably have found out that it is defined as an Interface Member for the property container freeTextPage, so you have to look for the location of this property container instead. So, the procedure createIFilePropSections should take the following argument values for the property Free TextcreateFilePropSections cad freeTextSpecifying createFilePropSections as Structure GeneratorIf you have retrieved the values for createFilePropSections, do the following on Document level:1 Create a new local section or select an existing local section.2 Select File | Properties | Edit.The Edit Properties dialog box appears.3 Enter createFilePropSections, including the argument values in the field Structure Generator, e.g.:createFilePropSections cad freeText4 Click OK to confirm the information in the dialog box.5 Select File | Generate | Structure and Contents for this local section.The appropriate file property sections are generated for the selected local section.For more informationMore information on the Property Definition Editor, the Property Availability Editor, the customization files propdefs.propdefs and proplocs.proplocs, and (user-defined) properties in general can be found in REFID="32013" TYPE="XREF-TEXTCOPY"Chapter 8, Customizing Properties of the ObjectTeam Customization Guide.TERM1="section type" TERM2="column in document structure file"TERM1="section type"TERM1="contents generator" TERM2="column in document structure file"TERM1="contents generator"ID="25592"Contents GeneratorIntroductionA contents generator is a Tcl procedure that generates the contents of local sections by calling methods from classes defined in Object Tcl. These classes are associated with a particular local section type.The internal contents generator used depends on the following:n The specified section type (sect_type).n The current word processor or DTP package (Fm, Il or Word).Naming of Contents GeneratorsThe name of the contents generator that is being used is retrieved internally as follows:<package><sect_type>ConGenFor instance, the contents generator for Word documents (section type Doc) isWordDocConGenThe Object Tcl class WordDocConGen and all other Object Tcl classes are defined in Tcl files stored in the M4_home/tcl directory. Specifying a different contents generatorIf you want to specify a contents generator that is different from this type, you can enter a Tcl procedure here that calls this (alternative) contents generator. In the default structure file fm40_mod.str, for example, a contents generator is specified for the local section representing the following:n A title page (genFmTitle).n A list of classes (genFmList).Both components have the same local section type: Doc. These alternative generators can be defined as Tcl procedures in the Tcl file TERM1="docprocs.tcl"docprocs.tcl.If the Contents Generator field is empty for a certain local section type, the contents generation is taken care of by the contents generator that is internally associated with the local section type. Chapter 2 DTP-ID="19181"Specific FeaturesTERM1="DTP-specific features"TYPE="MIFmarker"TYPE="number"0TYPE="text"Document Generation GuideIntroductionThis chapter discusses briefly how ObjectTeam generates documents for the supported word-processors and DTP packages. It focuses on the tools that are used and the steps that are taken for each DTP package.This chapter also discusses the typical editing actions you might want to carry out after you have generated a document. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29993" TYPE="XREF-TEXTCOPY"FrameMaker 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15617" TYPE="XREF-TEXTCOPY"Interleaf 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32195" TYPE="XREF-TEXTCOPY"Microsoft Word for Windows 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14TERM1="FrameMaker"ID="29993"FrameMakerFrameMaker-specific features in document generationIn the default Document Structure files for FrameMaker, three types of local sections are generated: Book, Toc and Doc. An initial contents file exists for each of these section types.These initial contents files are MIF files containing Tcl macros. They are stored in the directory M4_home/etc. During the document generation process, the appropriate initial contents files are copied over to the user environment and the macros are expanded for every local section. Eventually, the resulting generated MIF-files are converted to FrameMaker binary files using a ObjectTeam tool called fmcomm.TERM1="initial contents file" TERM2="FrameMaker"TERM1="FrameMaker" TERM2="initial contents file"Initial contents filesThe following initial contents files exist for FrameMaker:COLS="2"COLNAME="1" COLWIDTH="117p"COLNAME="2" COLWIDTH="333p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Initial Contents FilesCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="fm40book.con"fm40book.conTERM1="fm50book.con"fm50book.conCOLNAME="2" VALIGN="TOP" MOREROWS="0"Empty FrameMaker book file, used to generate book files.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="fm40doc.mif"fm40doc.mifTERM1="fm50doc.mif"fm50doc.mifCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII file containing Maker Interchange Format (MIF) tags and Tcl macros. This file is used to generate FrameMaker document files: local sections of type Doc.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="fm40mif.con"fm40mif.conTERM1="fm50mif.con"fm50mif.conCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII file containing Maker Interchange Format (MIF) tags. This file is used to generate MIF files: local sections of type Mif.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="fm40title.mif"fm40title.mifTERM1="fm50title.mif"fm50title.mifCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII file containing Maker Interchange Format (MIF) tags and Tcl macros. This file is used to generate default FrameMaker document files containing a title page.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="fm40toc.con"fm40toc.conTERM1="fm50toc.con"fm50toc.conCOLNAME="2" VALIGN="TOP" MOREROWS="0"Empty FrameMaker Table of Contents (TOC) file, used to generate TOC files.TERM1="fmcomm"fmcommObjectTeam uses the tool fmcomm to manipulate FrameMaker documents. During document generation, it uses the tool to convert MIF files to FrameMaker binary files (and vice versa).SyntaxThe syntax for fmcomm is:fmcomm [ -e | -s | -p (-f prsetfile ) ] file fmcomm [ -a | -b ] source_file destination_file ArgumentsThe following arguments can be used with fmcomm:COLS="2"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="270p"COLNAME="1" VALIGN="TOP" MOREROWS="0"-e file COLNAME="2" VALIGN="TOP" MOREROWS="0"Opens the file for editing. FrameMaker must be runningCOLNAME="1" VALIGN="TOP" MOREROWS="0"-s file COLNAME="2" VALIGN="TOP" MOREROWS="0"Opens the file for showing. FrameMaker must be runningCOLNAME="1" VALIGN="TOP" MOREROWS="0"-p file COLNAME="2" VALIGN="TOP" MOREROWS="0"Prints the file according to the printer settings stored in that fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"-f prsetfile COLNAME="2" VALIGN="TOP" MOREROWS="0"Uses the printer settings as defined in prsetfileCOLNAME="1" VALIGN="TOP" MOREROWS="0"-a source_file destination_file COLNAME="2" VALIGN="TOP" MOREROWS="0"Converts a FrameMaker binary file, the source file, to a FrameMaker MIF file, the destination fileCOLNAME="1" VALIGN="TOP" MOREROWS="0"-b source_file destination_file COLNAME="2" VALIGN="TOP" MOREROWS="0"Converts a FrameMaker MIF file, the source file, to a FrameMaker binary file, the destination fileLocationThe fmcomm tool is in the directory M4_home/bin.ID="24426"Refining TERM1="document" TERM2="refining a generated FrameMaker -"TERM1="FrameMaker" TERM2="refining a generated - document"Draft Documents in FrameMakerIntroductionWhen a default document has just been generated, you may need to adjust it a little in FrameMaker before you can print it. You can, for example:n Generate a table of contents.n Edit default variables.n Reformat text.Contents of a default ObjectTeam documentA default ObjectTeam document that is generated for FrameMaker consists of the following:n A book file comprising all other FrameMaker documentsn A TOC filen FrameMaker documentsContents of a generated FrameMaker documentThe FrameMaker documents contain the following:n Headers and footersn Links to EPSI files as generated by ObjectTeam (if fm40_mod.str or fm50_mod.str was used as document structure file)n Copies of text files as generated by ObjectTeam (if fm40_imp.str was used as document structure file)n Text insets with links to text files as generated by ObjectTeam (if fm50_imp.str was used as document structure file)ID="12725"How to generate a TERM1="table of contents" TERM2="generating a - in FrameMaker"TERM1="FrameMaker" TERM2="generating a table of contents"table of contentsΣ To generate a table of contents in FrameMaker:1 In FrameMaker, select File | Generate/Update... in the book file.The Generate/ Update dialog box appears.2 Include the TOC file in the Generate list box.3 Select Update in the dialog box.Now the Table of Contents is generated. It is not necessary to apply tags to the table of contents before it is generated, as this is provided for by the initial contents file.The following figure shows an initial Table of Contents (top) and a generated one (bottom):FILENAME="00988.unk" ORIGFILE="pics/frinitoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"FILENAME="00989.unk" ORIGFILE="pics/frgentoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"Edit default variablesTERM1="variable" TERM2="editing FrameMaker -"TERM1="FrameMaker" TERM2="editing - variables"Variables in the FrameMaker Template are defined in the headers and footers and in the title page in the title page file. The following table shows information about the header/footer variables and their definitions in the draft document. These headers and footers occur on every page of every file, except for the (right) title page. Information on the title page variables is shown in the last column.COLS="7"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="45p"COLNAME="3" COLWIDTH="40p"COLNAME="4" COLWIDTH="49p"COLNAME="5" COLWIDTH="81p"COLNAME="6" COLWIDTH="90p"COLNAME="7" COLWIDTH="75p"NAMEST="2" NAMEEND="6" SPANNAME="S2T6"COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Variable NameSPANNAME="S2T6" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Master PageCOLNAME="7" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Title pageCOLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="2" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"LeftCOLNAME="4" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"RightCOLNAME="5" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"ReportLeftCOLNAME="6" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"ReportRightCOLNAME="7" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Company NameCOLNAME="2" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"userCOLNAME="3" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'XCOLNAME="4" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="5" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="6" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="7" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Current Date (short)COLNAME="2" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"sysCOLNAME="3" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="4" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="5" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="6" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="7" ROWSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3 COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Current Page #COLNAME="2" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"sysCOLNAME="3" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="4" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="5" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="6" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="7" ROWSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Department NameCOLNAME="2" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"userCOLNAME="3" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="4" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="5" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="6" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="7" ROWSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3 COLNAME="1" ROWSEP="0" VALIGN="TOP" MOREROWS="0"Project NameCOLNAME="2" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"userCOLNAME="3" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="4" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="5" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'X COLNAME="6" ROWSEP="0" COLSEP="0" VALIGN="TOP" MOREROWS="0"COLNAME="7" ROWSEP="0" VALIGN="TOP" MOREROWS="0"How to change the default variable definitionsΣ To change the default variable definitions in one of the files from the book file, and apply these new defaults to the entire document:1 In the book file, select File | Import | Formats...2 Make sure the following is set in the Use Formats dialog box:a The text box Use Formats from Document contains the name of the file in which you have edited the default variable definitions.b Only the button Variable Definitions in the Update box is switched on.c The Update list box contains the names of the files you want to update.3 Select Update.Now the variable definitions of all the selected files are updated.How to TERM1="reformatting" TERM2="in a generated FrameMaker document"TERM1="FrameMaker" TERM2="reformatting text"reformat textA proportional font is used for the default paragraph tag Normal. This tag is applied to normal text. However, proportional fonts sometimes lead to undesired results, for instance in a list with columns. Columns can also outrun the margins.Σ To fix these problems:1 Select the text you want to reformat.2 Apply the paragraph tag Reports to the selection.Now the columns included in the selection are straightened, as the Reports tag uses a non-proportional font.3 Make the first line of the description start at Top of Column.4 Copy the layout of master page report_right to the page on which the selected text is located if this page is a right page. If it is a left page, use report_left. Now the selected text is TERM1="rotating text in FrameMaker"TERM1="FrameMaker" TERM2="rotating text"rotated.The following figure shows an imported, unedited description (top) and an edited one (bottom):FILENAME="00990.unk" ORIGFILE="pics/fruneddc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"FILENAME="00991.unk" ORIGFILE="pics/freditdc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"Further refinementsYou now have a document with a consistent layout. If you like, you can further refine the document in FrameMaker. For example, you can do the following:n Create separate files containing text.n Add text to the files with chapter or section headers.n Add text to the files with diagrams, matrices and descriptions.n Add paragraph tags.n Add index markers.Keep in mind though, that the link between the document generation and FrameMaker is only one-way. If you regenerate your document in ObjectTeam, you lose any edits made in FrameMaker.TERM1="document" TERM2="refining a generated FrameMaker -"TERM1="FrameMaker" TERM2="refining a generated - document"ID="15617"InterleafTERM1="Interleaf"Interleaf-specific features in document generationIn the default Document Structure files for Interleaf, four types of local sections are generated: Str, Cat, Toc and Doc. For the types Cat and Doc, initial contents files exist (il60catalog.asc and il60doc.asc). Other initial contents files, such as il60link.asc and il60class.asc, are used to generate the contents of documents.TERM1="initial contents file" TERM2="Interleaf"TERM1="Interleaf" TERM2="initial contents file"Initial contents filesInitial contents files are text files containing Tcl macros. They are stored in the directory m4_home/etc. During the document generation process, the appropriate initial contents files are copied over to the user environment and the macros are expanded for every local section. The resulting generated text files can be read with Interleaf.The following initial contents files exist for Interleaf:COLS="2"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="342p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Initial Contents FilesCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="il60catalog.asc"il60catalog.ascCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII file containing LISP tags and Tcl macros. This file is used to generate Interleaf catalogs.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="il60class.asc"il60class.ascCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII file containing Interleaf structuring elements.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="il60doc.asc"il60doc.ascCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII file containing LISP tags. This file is used to generate Interleaf documents.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="il60link.asc"il60link.ascCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII file containing LISP tags and Tcl macros. This file is used to generate Interleaf links to diagram files.COLNAME="1" VALIGN="TOP" MOREROWS="0"TERM1="il60title.asc"il60title.ascCOLNAME="2" VALIGN="TOP" MOREROWS="0"ASCII file containing LISP tags and Tcl macros. This file is used to generate Interleaf title pages..boo directory in the user environmentThe directory in the user environment where ObjectTeam stores the generated Interleaf files always has the extension .boo. This extension is required for Interleaf to recognize the generated files as belonging to a book file.TERM1="document" TERM2="refining a generated Interleaf -"TERM1="Interleaf" TERM2="refining a generated - document"ID="17626"Refining a Draft Document in InterleafIntroductionWhen a document has just been generated, the draft document needs the following adjustments in Interleaf before you can print it:1 Generate a table of contents.2 Edit description layouts.This section contains a short section on Interleaf's configuration settings, followed by a discussion of these adjustments.Contents of a default ObjectTeam documentA default ObjectTeam document that is generated for Interleaf consists of the following:n A structure file n A catalog filen A TOC filen Interleaf documentsContents of a generated Interleaf documentThe Interleaf documents contain:n Headers and footersn Links to EPSI files as generated by ObjectTeam(if il60_mod.str was used as document structure file)n Links to text files as generated by ObjectTeam (if il60_imp.str was used as document structure file)How to TERM1="table of contents" TERM2="generating a - in Interleaf"TERM1="Interleaf" TERM2="generating a table of contents"generate a table of contentsΣ To generate a Table Of Contents:1 Open and save every document of the book file that contains active links.This is necessary to obtain correct pagination in the table of contents (documents with active links are the ones with diagrams, descriptions and Implementation phase text files sitting next to them in the Interleaf desktop).2 Select all documents of the book file and synchronize them with the command Book | Sync.3 Select all documents of the book file and generate the Table of Contents with the command Book | TOC.Now the Table of Contents is generated. The format of the table of contents is provided for by the template itself.The following figure shows an initial Table of Contents (top) and a generated one (bottom):FILENAME="00992.unk" ORIGFILE="pics/ilinitoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"FILENAME="00993.unk" ORIGFILE="pics/ilgentoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"TERM1="reformatting" TERM2="in a generated Interleaf document"TERM1="Interleaf" TERM2="reformatting text"Edit description layoutsThe master component Para, defined in the Catalog, uses proportional fonts. This component is exported to normal text. Descriptions are considered as normal text, but the use of proportional fonts in descriptions can lead to undesired results such as jagged margins. Descriptions can also outrun the margins.The best way to reformat descriptions, is to define a separate master component in the Catalog. The properties of this new component must be similar to those of the para component, except for the selected font and font size. In the Component Properties sheet, select a non-proportional font such as Courier with a moderate font size, such as 8 pt. Apply the new master component globally.Go back to the document in which you want to apply the new component. Change the component para into the newly defined master component. The margins are straightened.The following figure shows an imported description with jagged margins (top) and a newly defined master component applied (bottom):FILENAME="00994.unk" ORIGFILE="pics/iluneddc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"FILENAME="00995.unk" ORIGFILE="pics/ileditdc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"Further refinementsYou now have a document with a consistent layout. If you like, you can further refine the document in Interleaf. For example, you can do the following:n Fill in the missing fields on the title page.n Adapt the headers and footers.n Create separate files containing text.n Add text to the existing files.n Add master components.Keep in mind though, that the link between the document generation and FrameMaker is only one-way. If you regenerate your document in ObjectTeam, you lose any edits made in Interleaf.TERM1="document" TERM2="refining a generated Interleaf -"TERM1="Interleaf" TERM2="refining a generated - document"TERM1="Microsoft Word for Windows"TERM1="Word for Windows"ID="32195"Microsoft Word for WindowsWord-specific features in document generationObjectTeam uses the TERM1="OLE Automation Interface"OLE Automation Interface to generate Word for Windows documents. For a brief description of this interface, see the description of the OLE Automation Interface for Tcl in the ObjectTeam Programming Interface Guide.Contents of a default ObjectTeam documentA default draft document generated by ObjectTeam consists of one Master Document and a couple of sub documents. Only one type of local section is generated: Doc. There is one initial contents file, TERM1="Word.dot"TERM1="initial contents file" TERM2="Word for Windows"Word.dot. Contents of a generated Word.dot fileThe Word.dot file is a Word for Windows Document Template containing the following styles which are used to generate Word documents:n Body Textn Captionn Chapter Title (user-defined)n Subtitle Cover (user-defined)n Title Attributes (user-defined)n Title Cover (user-defined)During the document generation process, this template is expanded and the resulting files are copied over to the user environment. Make sure that you have terminated all edit sessions of the documents before you generate them in ObjectTeam.Diagrams are converted to Windows Meta File (.wmf) format. The appropriate Word files contain links to these files. The .wmf files are stored in the same directory as the Word documents.TERM1="document" TERM2="refining a generated Microsoft Word -"TERM1="Microsoft Word" TERM2="refining a generated - document"Refining a Draft Document in Microsoft WordEditing your generated documentAfter you generate a default draft document for Microsoft Word for Windows, you may want to generate the table of contents and edit it before you print it. Bear in mind though, that the link between the document generation and Word for Windows works one way only. Changes made in the ObjectTeam environment cannot be carried through to the Word for Windows documents automatically without losing the edits made in Word for Windows.The following figures show a generated Title Page and a page with a diagram:FILENAME="00996.unk" ORIGFILE="pics/wdgenttl.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"FILENAME="00997.unk" ORIGFILE="pics/wdgenobj.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"How to TERM1="table of contents" TERM2="generating a - in Interleaf"TERM1="Interleaf" TERM2="generating a table of contents"generate a table of contentsΣ To generate a Table Of Contents:1 From the browser, select the local section MasterDocument_Doc in the information area.2 Select File | Edit.Microsoft Word for Windows starts with the Master Document.3 Make sure the Master Document view is the current view. You can check this through the View menu in Word for Windows.4 Go to page 2, the Table of Contents.The Table of Contents contains only a single line.5 Click on the single line and press F9.The Update Table of Contents dialog box appears. 6 Select the Update Entire Table option and press OK.The Table of Contents is generated.The following figures show an initial Table of Contents (top) and a generated one (bottom):FILENAME="00998.unk" ORIGFILE="pics/wdinitoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"FILENAME="00999.unk" ORIGFILE="pics/wdgentoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/refining.fm5.mif"TERM1="document" TERM2="regenerating a Microsoft Word -"TERM1="Microsoft Word" TERM2="regenerating a - document"TERM1="regenerate" TERM2="Microsoft Word document"Regenerating a Microsoft Word documentThe view of a generated Master Document (MasterDocument_Doc) is Master Document. Before regenerating a Microsoft Word document, make sure the Master Document still is in Master Document view, otherwise the regeneration process may fail.Chapter 3 Creating ID="32350"Your Own TERM1="document generator" TERM2="creating your own"Document GeneratorTYPE="MIFmarker"TYPE="number"0TYPE="text"Document Generation GuideIntroductionThis chapter describes how to customize the document generation tools to support document generation for word-processors, DTP packages or text editors other than the default ones. It deals with aspects such as:n Modeling new classes in the Document modeln Implementing these classes in Object Tcln Writing contents generators for section typesn Making the new type of document and the new local section types available in the BrowserThis description is illustrated by an example.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12539" TYPE="XREF-TEXTCOPY"The Document Model 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37010" TYPE="XREF-TEXTCOPY"Creating a User Defined Integration 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26196" TYPE="XREF-TEXTCOPY"Modeling New Local Section Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39589" TYPE="XREF-TEXTCOPY"Modeling Contents Generators for Local Section Types 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20431" TYPE="XREF-TEXTCOPY"Modeling Diagram Sections 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'38COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11718" TYPE="XREF-TEXTCOPY"Managing Tcl Customization Files 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'40COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29544" TYPE="XREF-TEXTCOPY"Defining the New Editor in the Browser 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'43COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17186" TYPE="XREF-TEXTCOPY"Defining New Document Structure Files 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'45COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17336" TYPE="XREF-TEXTCOPY"Refining the HTML Draft Document 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'47COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29646" TYPE="XREF-TEXTCOPY"Summary 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'61TERM1="document model"The ID="12539"Document ModelThe Document ModelBy default, ObjectTeam generates project documentation for several of the most common word-processors. The tools that generate this documentation are constructed using a class system called the Document Model.By extending this model with new classes, you can use the document generator to create documents for word-processors other than the ones currently supported.ExampleThe best way to generate documentation depends largely on the tools and utilities provided by your DTP package or word-processor. Therefore, a general step-by-step description of how to integrate a new package cannot be given here. Instead, this chapter illustrates user-defined document generation by showing a simple example that is just one of the many possible integrations.IssuesIn general, the following issues are worth considering if you want to integrate a user-defined word processor, editor or authoring system with ObjectTeam:n Does the package support a macro or script language? Depending on how powerful the language is, you can decide to make use of its features. In the integration of Word for Windows for instance, the macro language WordBasic is used intensively.n Is the word processor able to interpret text files that are written in a mark-up language or an interchange language? The interchange language used for FrameMaker for instance, is MIF. Documents are first generated to plain text files containing MIF tags and are later converted to proper FrameMaker files.n Is the word processor able to handle live links to diagram files and/or text files? Except for FrameMaker 4.0, all the word processors that are supported by ObjectTeam can handle live links to diagrams and plain text files. The standard way ObjectTeam handles live links is by first exporting them from the repository to the user environment. In the case of diagrams, this includes conversion to some format the word processor can handle (usually EPSI: Encapsulated PostScript with preview Image). References to these files are added to the appropriate local sections. These references are kept up to date by ObjectTeam.Property Sections are handled in the same way.n Does the word processor provide tools to carry out certain tasks in batch mode? Using such features can save you a lot of (Tcl) programming. Where appropriate, you can just invoke the batch utility with the right type of parameters. A Model of Existing IntegrationsUsing Object TclThe documentation generation tools of ObjectTeam are written in TERM1="Object Tcl"Object Tcl, which is an object-oriented extension to the command language Tcl. Because of the object-oriented nature of this language, you can model these tools in Class Association Diagrams. For more details on Object Tcl, refer to the ObjectTeam Programming Interface Guide.Data hidingOne of the characteristics of the object-oriented approach is data hiding. If you want to extend ObjectTeam with your own integration, you only have to extend the document model with some new subclasses in which features specific to the new package are dealt with. All the classes that perform general documentation generation tasks should be left untouched. Example of data hidingAn example of a class that is not specific to any package, is the class TERM1="DocEditor"-DocEditor. The classes that are specific to one package are subclasses of this superclass:FILENAME="01000.unk" ORIGFILE="pics/docedit.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Where these classes are definedYou can find the implementation of the classes in this model in the following Tcl files (in M4_home/tcl):COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Class COLNAME="2" VALIGN="TOP" MOREROWS="0"Object Tcl File COLNAME="1" VALIGN="TOP" MOREROWS="0"DocEditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"doceditor.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"FmDocEditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"fmdocedito.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"Fm40DocEditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"fm40docedi.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"Fm50DocEditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"fm50docedi.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"Il60DocEditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"il60docedi.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"WordDocEditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"worddocedi.tclA Model of Existing Document SectionsSection types in documentsIn ObjectTeam, there are three different section types that can be defined in a document:n File sectionn Local Sectionn Property SectionFor a new document generation integration, you usually have to create only new local section types: the ones specific to the package you are creating the integration for. Since file sections and property sections are not package-specific, you do not have to change them.General local section typesBesides the package-specific local section types, the following general local section types exist. These types can be defined in every document generation integration:n DocTextn PsSectionn XimageSectionn DataSectionSee REFID="29901" TYPE="XREF-TEXTCOPY"Adding a Local Section for brief descriptions of these types.Model of existing document sectionsIn the following figure, you can see that the general document section types are subclasses of document sections. For the new document generation integration, the New Local Section types will be subclasses of the class LocalSection (see REFID="26196" TYPE="XREF-TEXTCOPY"Modeling New Local Section Types).FILENAME="01001.unk" ORIGFILE="pics/docsect.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"ID="17490"FILENAME="01002.unk" ORIGFILE="pics/frefsect.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"FILENAME="01003.unk" ORIGFILE="pics/locsect.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"FILENAME="01004.unk" ORIGFILE="pics/propsect.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"ID="37010"Creating a User Defined IntegrationIntroductionThis section provides an overview of a sample integration for the HyperText Markup Language (HTML). The remaining sections in this chapter use this sample integration to describe each of the tasks involved in integrating a new word processor, DTP package or authoring system in ObjectTeam. Actions involved in document creationFor every document generation integration you create, you have to consider the following actions an end user of ObjectTeam must be able to execute:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Corresponding Menu Entry In The Browser On Document LevelCOLNAME="1" VALIGN="TOP" MOREROWS="0"Editing (generated) local sectionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"File | EditCOLNAME="1" VALIGN="TOP" MOREROWS="0"Showing (generated) local sectionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"File | ShowCOLNAME="1" VALIGN="TOP" MOREROWS="0"Printing (generated) local sectionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"File | PrintCOLNAME="1" VALIGN="TOP" MOREROWS="0"Previewing (generated) local sectionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"File | PreviewCOLNAME="1" VALIGN="TOP" MOREROWS="0"Generating the structure of local sectionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"File | Generate StructureCOLNAME="1" VALIGN="TOP" MOREROWS="0"Generating the contents of local sectionsCOLNAME="2" VALIGN="TOP" MOREROWS="0"File | Generate Structure And ContentsExampleThese tasks are illustrated with a simple example of an integration for the HyperText Markup Language (HTML) for UNIX-based platforms. This language is used to mark up files for the World Wide Web (WWW), but it can also be used to prepare local files that are not distributed over the Internet. This example shows only one of the many possible ways such an integration could be established. HTMLHTML files are ASCII files with HTML tags. These files can be viewed with any (graphical) HTML browser and can be edited with any ASCII editor. They can contain links to graphic files (in-line images), links to other HTML files (hyperlinks) and links to plain ASCII files. Third-party tools usedIn the example discussed in the following sections, the following third-party tools are used to make the HTML integration work properly:COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"UtilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"Netscape Navigator 1.11aCOLNAME="2" VALIGN="TOP" MOREROWS="0"This graphical HTML browser is used to (pre)view generated HTML-files. However, you can use any graphical HTML-browser.(Copyright (C) 1994-1995 Netscape Communications Corporation. WWW:http://www.netscape.comCOLNAME="1" VALIGN="TOP" MOREROWS="0"ViCOLNAME="2" VALIGN="TOP" MOREROWS="0"With this widely used UNIX text editor you can edit (generated) HTML files from the ObjectTeam Browser. However, you can specify any text editor.COLNAME="1" VALIGN="TOP" MOREROWS="0"GhostScript 3.12bCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeam exports diagrams from the repository to the user environment and converts them into Encapsulated PostScript (EPSI) format.However, most graphical HTML-browsers on UNIX platforms can only display graphics in GIF (or JPEG) format. The PostScript interpreter/previewer GhostScript is used to convert EPSI files into GIF-files. (Copyright (C) 1994 Aladdin Enterprises, Menlo Park, CA). WWW: http://www.cs.wisc.edu/~ghost/index.htmlCOLNAME="1" VALIGN="TOP" MOREROWS="0"Curl 1.2COLNAME="2" VALIGN="TOP" MOREROWS="0"This program automatically generates links between HTML documents. In the example, you use it outside the ObjectTeam environment to provide better hypertext navigation between the generated documents.(Copyright (C) 1995 Andrew Davison). WWW: http://www.cs.mu.oz.au/~ad (September 1995)ID="11269"Modeling the New TERM1="DocEditor" TERM2="modelling a new"TERM1="editor" TERM2="modelling a new document -"DocEditorAdding a new classWhen you create your own document integration in ObjectTeam, the first extension you make to the document model is a new subclass of the class -DocEditor. That is, you extend the model with a class for the new package.The DocEditor classThe following figure shows the class, DocEditor, and its subclasses, including the new class HtmlDocEditor:FILENAME="01005.unk" ORIGFILE="pics/de_html.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Methods of the DocEditor classNotice that the new class includes the methods edit, show and preview. The implementations of these methods in Object Tcl are discussed later.ID="14429"Implementing the New TERM1="DocEditor" TERM2="implementing a new - class in Object Tcl"TERM1="editor" TERM2="implementing a new document - in Object Tcl"DocEditor in Object TclDefining the new classThe preferred name syntax for a new subclass of the superclass DocEditor is as follows:my_word_processorDocEditorWhere my_word_processor is an abbreviation of the new word processor, DTP package or authoring system. Preferably, this abbreviation starts with a capital and contains otherwise only lower case characters. In this example, therefore, the name of the new class is HtmlDocEditor.Besides the name of the class and the name of its superclass, a class definition contains a list of methods (and attributes):Classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HtmlDocEditorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]':name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{DocEditor}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'editname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'showname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'preview}Defining the TERM1="DocEditor" TERM2="defining the constructor in Object Tcl"constructorThe constructor of the new class can be used, among other things, to redefine or to extend certain attribute values of the superclass DocEditor. You have to define the values of at least the following attributes:n nameUse the same abbreviation as used in the class name to identify the new package.n localSectionTypesExtend the list of general local section types with at least one specific local section type.Which extra specific local section types you should define depends on the features of your package. If your word processor can handle book files or catalog files for instance, it may be useful to define a separate local section type for these type of files.You could introduce a different local section type for every type of file you want to generate different contents for. This example defines two specific local section types: Title and Doc. The section type Title is used to generate a title page; the type Doc is used for all other files.constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HtmlDocEditorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[DocEditor::constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$classname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$name]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Startname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Htmlname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'localSectionTypesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"[$thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'localSectionTypes]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Title"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this}Defining the TERM1="DocEditor" TERM2="defining the destructor in Object Tcl"destructorYou can just copy the destructor of an existing DocEditor class and paste it into the HtmlDocEditor class at the right spot:methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HtmlDocEditor::destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{this}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Startname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DocEditor::destructor}(Re)Defining TERM1="DocEditor" TERM2="(re)defining operations"operationsIn the class DocEditor, operations such as edit, show, print and preview are defined. However, DocEditor is a general class and operations like these are package-specific. Therefore, the appropriate operations are redefined in package-specific subclasses. For this example, the following operations are redefined in the subclass HtmlDocEditor:n editn shown previewNote: The operation print is not (re)defined because there is no standard way to print off interpreted HTML files in batch mode. However, if you have a utility that does the job or you are willing to write one yourself, you can also redefine the print operation in the class HtmlDocEditor.Redefining the TERM1="DocEditor" TERM2="" TERM3="edit"Edit operationJust like all the other operations of DocEditor, the operation DocEditor::edit is not word-processor-specific. Therefore, the implementation of this operation does not contain code to activate the editor. By redefining the operation edit in a subclass, however, you can make it word-processor-specific and supply it with Tcl code through which the appropriate word processor is activated with the right parameters. The result is that end users are able to start the appropriate word processor for editing a local section from ObjectTeam. Although there are many HTML editors around, in this example, the operation HtmlDocEditor::edit defines the UNIX text editor vi as the editor used to edit HTML files.methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HtmlDocEditor::editname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'docSection}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cmdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"viname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'docLocation]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Startingname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'editname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'forname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{![$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'executename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"$cmd"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'xtool]}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerrorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'uiName]:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'editname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'failed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'""}In this case, vi is started in a separate xtool window. For editors that start a window in which they run, you can use system in stead of xtool. Redefining the Show TERM1="DocEditor" TERM2="" TERM3="show"operationAnalogous to the edit operation, you can redefine the show operation. If your word processor can be started in read-only mode, you should use this feature in the show operation.In this example, the show operation starts the same text editor as for editing, but now in read-only mode.methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HtmlDocEditor::showname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'docSection}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cmdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"viewname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'docLocation]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Startingname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'showname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'forname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{![$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'executename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"$cmd"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'xtool]}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerrorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'uiName]:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'showname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'failed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'""}Redefining the Preview TERM1="DocEditor" TERM2="" TERM3="preview"operationIn this example, the preview operation starts the graphical HTML browser Netscape Navigator for the preview operation. This allows end users to view the interpreted HTML code by selecting File | Preview for a generated local section.methodname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'HtmlDocEditor::previewname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'docSection}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'cmdname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"netscapename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'file:[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'docLocation]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'&"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"Startingname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'previewname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'forname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]''[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{![$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'executename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"$cmd"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'xtool]}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerrorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"[$docSectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'uiName]:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'previewname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'failed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'""}Completing the New DocEditor ImplementationIf you put everything together and construct a proper Object Tcl file, the file -htmldocedi.tcl looks as follows:#---------------------------------------------------------------------##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'(c)name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Cayenne Software 1996##name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'File:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'@(#)htmldocedi.tcl#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Description:#---------------------------------------------------------------------# Start user added include file section# End user added include file sectionrequire "doceditor.tcl"Class HtmlDocEditor : {DocEditor} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method editname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method showname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method preview}constructor HtmlDocEditor {class this name} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set this [DocEditor::constructor $class $this $name]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this name Htmlname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this localSectionTypes "[$this localSectionTypes] Doc Title"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $this}method HtmlDocEditor::destructor {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this DocEditor::destructor}method HtmlDocEditor::edit {this docSection} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set cmd "vi [$docSection docLocation]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessage "Starting edit for section '[$docSection name]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {![$docSection execute "$cmd" xtool]} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerror "[$docSection uiName]: edit failed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessage ""}method HtmlDocEditor::show {this docSection} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set cmd "view [$docSection docLocation]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessage "Starting show for section '[$docSection name]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {![$docSection execute "$cmd" xtool]} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerror "[$docSection uiName]: show failed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessage ""}method HtmlDocEditor::preview {this docSection} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set cmd "netscape file:[$docSection docLocation] &"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessage "Starting preview for section '[$docSection name]'"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {![$docSection execute "$cmd" xtool]} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerror "[$docSection uiName]: preview failed"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkmessage ""}# Do not delete this line -- regeneration end markerWhere to put the fileUser-defined Object Tcl files are generally stored in the user_home/icase directory. For details on the location of Tcl files, see REFID="11718" TYPE="XREF-TEXTCOPY"Managing Tcl Customization Files.ID="26196"Modeling New TERM1="local section" TERM2="modelling new types"Local Section TypesIntroductionIn the constructor of the new DocEditor class, you define new local section types. In this example, the new local section types are:n Titlen DocModeling new Local Section typesThe following Class Association Diagram depicts the model for the new local section types. There is one superclass HtmlSection and a subclass for every class representing an actual local section type. You can create as many local section types as you want as long as they correspond to the local section types you have specified elsewhere in the Tcl code. Every local section type for which contents must be generated, is associated with a class representing its contents generator (see REFID="40322" TYPE="XREF-TEXTCOPY"Introduction).ID="27608"The local section type classes are subclasses of the superclass HtmlSection. In the following figure, you can see that the classes that represent editor-specific local sections are also subclasses of the class LocalSection.FILENAME="01006.unk" ORIGFILE="pics/hlseccl.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"TERM1="local section" TERM2="implemeting new types in Object Tcl"Implementing the Superclass in Object TclIntroduction8In this example, the implementation of the class HtmlSection does not contain much specific code. It mainly acts as a frame for its two subclasses:#---------------------------------------------------------------------## (c) Cayenne Software 1996## File: @(#)htmlsection.tclname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Description:#---------------------------------------------------------------------# Start user added include file section# End user added include file sectionrequire "localsecti.tcl"Class HtmlSection : {LocalSection} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method promotername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method editname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method showname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method preview}constructor HtmlSection {class this name document} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set this [LocalSection::constructor $class $this $name $document]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $this}method HtmlSection::destructor {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this LocalSection::destructor}method HtmlSection::promoter {this document} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this DocSection::promoter $documentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this FileVObj::promotername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this operationClass manipulate}method HtmlSection::edit {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# edit with the document editor commandname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[[$this document] editor] edit $this}method HtmlSection::show {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# show with the document editor commandname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[[$this document] editor] show $this}method HtmlSection::preview {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# preview with the document editor commandname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[[$this document] editor] preview $this}# Do not delete this line -- regeneration end markerImplementing the Subclasses in Object TclIntroductionThe constructor of the class HtmlDocEditor defined two specific local section types: Title and Doc (REFID="14429" TYPE="XREF-TEXTCOPY"Implementing the New DocEditor in Object Tcl). These types have to start with a capital and otherwise contain only lower case characters. These types are modeled as the subclasses HtmlTitleSection and HtmlDocSection. Both classes are associated with a class that represents their contents generators. These classes are discussed further in REFID="39589" TYPE="XREF-TEXTCOPY"Modeling Contents Generators for Local Section Types. htmldocsec.tclThe Object Tcl file htmldocsec.tcl looks as follows:#---------------------------------------------------------------------## (c) Cayenne Software 1996## File: @(#)htmldocsec.tcl# Description:#---------------------------------------------------------------------# Start user added include file sectionmy_require "/user/papr/icase/htmldocconge.tcl"# End user added include file sectionmy_require "/user/papr/icase/htmlsection.tcl"Class HtmlDocSection : {HtmlSection} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method promotername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generateTypeContentsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method contentsGeneratorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attribute _contentsGenerator}constructor HtmlDocSection {class this name document} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set this [HtmlSection::constructor $class $this $name $document]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $this}method HtmlDocSection::destructor {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set ref [$this _contentsGenerator]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$ref != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$ref _section ""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this HtmlSection::destructor}method HtmlDocSection::promoter {this document} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this uiType Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this extension htmlname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this HtmlSection::promoter $documentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'global classCount name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this _contentsGenerator [HtmlDocConGen new HtmlDocConGen$classCount $this]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'incr classCount}method HtmlDocSection::generateTypeContents {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[$this contentsGenerator] generate}# Do not delete this line -- regeneration end markermethod HtmlDocSection::contentsGenerator {this args} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$args == ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return [$this _contentsGenerator]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set ref [$this _contentsGenerator]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$ref != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$ref _section ""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set obj [lindex $args 0]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$obj != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$obj _section $thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this _contentsGenerator $obj}htmltitlesec.htmlThe Object Tcl file htmltitlesec.tcl looks as follows:#---------------------------------------------------------------------## (c) Cayenne Software 1996## File: @(#)htmltitlesec.tcl# Description:#---------------------------------------------------------------------# Start user added include file sectionmy_require "/user/papr/icase/htmldocconge.tcl"# End user added include file sectionmy_require "/user/papr/icase/htmlsection.tcl"Class HtmlTitleSection : {HtmlSection} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method promotername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generateTypeContentsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method contentsGeneratorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attribute _contentsGenerator}constructor HtmlTitleSection {class this name document} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set this [HtmlSection::constructor $class $this $name $document]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $this}method HtmlTitleSection::destructor {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set ref [$this _contentsGenerator]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$ref != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$ref _section ""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this HtmlSection::destructor}method HtmlTitleSection::promoter {this document} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this uiType Titlename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this extension htmlname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this HtmlSection::promoter $documentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'global classCount name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this _contentsGenerator [HtmlTitleConGen new HtmlTitleConGen$classCount $this]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'incr classCount}method HtmlTitleSection::generateTypeContents {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[$this contentsGenerator] generate}# Do not delete this line -- regeneration end markermethod HtmlTitleSection::contentsGenerator {this args} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$args == ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return [$this _contentsGenerator]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set ref [$this _contentsGenerator]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$ref != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$ref _section ""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set obj [lindex $args 0]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$obj != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$obj _section $thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this _contentsGenerator $obj}Redefining the promoter of a subclassIn the promoter of both the subclasses, you can redefine, among other things, a file extension for the local section type. Most HTML browsers recognize HTML-files by their extension; therefore, in this example, the attribute extension for both classes is redefined to html. For more information on promoters, refer to the ObjectTeam Programming Interface Guide.Implementing the association with Contents Generator classesAnalogous to the existing document generation integrations in ObjectTeam, the example implements the association of the local section type to its contents generator with the methods generateTypeContents and contentsGenerator. The method generateTypeContents calls the method generate of the appropriate contents generator class.ID="39589"Modeling Contents Generators for TERM1="local section" TERM2="modelling contents generators"Local Section TypesID="40322"IntroductionModeling and implementing contents generators is an activity that is probably the most specific to the package you are integrating with ObjectTeam. There is no standard way of doing this, since every editor, word processor, DTP package and authoring system has different features, strengths and weaknesses. This section contains a description of how these generators could be modeled and implemented for the sample HTML integration.IssuesThe following issues are important to keep in mind when you model and implement contents generators:n To construct a contents generator for a local section type, you just have to provide the right framework in Object Tcl to invoke the appropriate tools (or methods). These tools are for instance: tools provided by the package itself, methods in Object Tcl, (user-defined) shell scripts, third-party utilities and applications you have written yourself (for example, in C).n In every existing integration, the contents generators use one or more template files to generate documents. These template files can contain Tcl macros and variables that are expanded during document generation. Using template files can save you (Tcl) programming.n For some integrations, the extensions of generated files can be very important. You can make the contents generators generate files with the right type of file extensions.Contents Generator modelThe following Class Association Diagram depicts the model for the contents generators of the local section types, Doc and Title, defined in REFID="26196" TYPE="XREF-TEXTCOPY"Modeling New Local Section Types.The actual local section type classes are subclasses of the superclass HtmlSection.FILENAME="01007.unk" ORIGFILE="pics/hlcongen.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"TERM1="local section" TERM2="implementing contents generators in Object Tcl"Implementing HtmlConGen in Object TclIntroductionThe class HtmlConGen contains, among other things, the method openAsc, which is used by both the subclasses to open an ASCII file.The corresponding Object Tcl file htmlcongen.tcl looks as follows:#---------------------------------------------------------------------## (c) Cayenne Software 1996## File: @(#)htmlcongen.tcl# Description:#---------------------------------------------------------------------# Start user added include file section# End user added include file sectionClass HtmlConGen : {Object} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method openAscname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attribute ascPathname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attribute templatePathname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attribute section}method HtmlConGen::destructor {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End destructor user section}constructor HtmlConGen {class this name section} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set this [Object::constructor $class $this $name]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this section $sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this ascPath [$section docLocation]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set type [string tolower [$section type]]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set user_dir "/user/papr/icase"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'catch {$this templatePath $user_dir/html${type}.asc}]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $this}method HtmlConGen::openAsc {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Open the ASC-filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {[catch {set asc [open [$this ascPath] w]} rsn]} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerror "Error on opening '[$this ascPath]' for writing: $rsn"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return ""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $asc}## Do not delete this line -- regeneration end markerID="39157"Implementing HtmlTitleConGen in Object TclIntroductionThis example uses two different contents generators: one for title pages (HtmlTitleConGen) and one for other HTML-files (HtmlDocConGen). These classes are subclasses of the superclass HtmlConGen. The main method of these subclasses is generate.The corresponding Object Tcl file htmltitlec.tcl looks as follows:#---------------------------------------------------------------------## (c) Cayenne Software 1996## File: @(#)htmltitlec.tcl# Description:#---------------------------------------------------------------------# Start user added include file section# End user added include file sectionmy_require "/user/papr/icase/htmlcongen.tcl"Class HtmlTitleConGen : {HtmlConGen} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generate}constructor HtmlTitleConGen {class this name section} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set this [HtmlConGen::constructor $class $this $name $section]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set user_dir "/user/papr/icase"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# this is not a type-tied generator, so adjust the typename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# part of the template namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this templatePath $user_dir/htmltitle.ascname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $this}method HtmlTitleConGen::destructor {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this HtmlConGen::destructor}method HtmlTitleConGen::generate {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set titleFid [$this openAsc]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$titleFid == ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# set department name here for the title pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set departmentName "<Department Name>"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# set titlename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set documentTitle "[[[$this section] document] title]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#expand initial contents filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set contents [TextSection new]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'expand_file $contents [$this templatePath] name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$contents write $titleFidname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'close $titleFid}# Do not delete this line -- regeneration end markerImplementing the HtmlTitleConGen:: generate methodIn order to generate a file with a title page, the example uses a template file called htmltitle.asc which is stored in the directory $user_dir. This template file contains pieces of ready-made HTML tagged text and Tcl macros. The Tcl macros and variables are preceded by a ~.<html><head><TITLE>~[[[$this section] document] name]</TITLE></head><body><H1>~$documentTitle</H1><hr><H2>Project: ~[[[$this section] project] name]</H2><H2>Documented System: ~[[[[[$this section] document] documentedSystem] system] name]</H2><p><hr><ul><li><b><i>Document Title:</b></i>:~[[[$this section] document] title]<li><b><i>Document Subject:</b></i>:~[[[$this section] document] subject]<li><b><i>Document Reference:</b></i>:~[[[$this section] document] reference]<li><b><i>Document Keywords:</b></i>:~[[[$this section] document] keywords]<li><b><i>Document authors:</b></i>:~[[[$this section] document] authors]<li><b><i>Document status:</b></i>:~[[[$this section] document] docStatus]<li><b><i>Department:</b></i>:<Department Name><li><b><i>Document Creation Date:</b></i>:~[[[$this section] document] date]<li><b><i>Document Printing Date:</b></i>:~[fmtclock [getclock]]</ul></BODY></HTML>Expanding the template fileThe implementation of the method HtmlTitleConGen::generate contains commands to expand the Tcl macros in this file. This results in a title page consisting mainly of a heading with the name of the document, the name of the current project, the name of the documented system and a list of document properties. The following (Object) Tcl command in HtmlTitleConGen::generate expands the template file:expand_filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$contentsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[$thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'templatePath]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Note that in the constructor of HtmlTitleConGen, the attribute templatePath is set to htmltitle.asc.ID="24884"Implementing HtmlDocConGen in Object TclIntroductionThe main methods in the class HtmlDocConGen are:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlDocConGen::generateCOLNAME="2" VALIGN="TOP" MOREROWS="0"this is the general methodCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlDocConGen::genPictureCOLNAME="2" VALIGN="TOP" MOREROWS="0"used for generating diagramsCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlDocConGen::genTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"used for generating text files and propertiesThe complete file htmldocconge.tcl looks as follows:#---------------------------------------------------------------------## (c) Cayenne Software 1996## File: @(#)htmldocconge.tcl# Description:#---------------------------------------------------------------------# Start user added include file section# End user added include file sectionmy_require "/user/papr/icase/htmlcongen.tcl"Class HtmlDocConGen : {HtmlConGen} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method destructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method generatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method genComponentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method genPicturename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method genTextname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'method sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attribute linkNrname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attribute ascFidname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'attribute _section}method HtmlDocConGen::destructor {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set ref [$this _section]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$ref != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$ref _contentsGenerator ""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End destructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this HtmlConGen::destructor}constructor HtmlDocConGen {class this name section} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set this [HtmlConGen::constructor $class $this $name $section]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set user_dir "/user/papr/icase"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$section _contentsGenerator $thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Start constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this linkNr 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this templatePath $user_dir/htmldoc.ascname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# End constructor user sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return $this}method HtmlDocConGen::generate {this} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this ascFid [$this openAsc]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {[$this ascFid] == ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# set title, if title is empty use name of title documentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set documentTitle "[[[$this section] document] title]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$documentTitle == ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' set documentTitle "[[[$this section] document] name]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# when the fold-level is lower than 2 the file name will be a chaptername='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# else the file will be a sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set header [TextSection new]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'expand_file $header [$this templatePath] name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "[$header contents]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'case [[$this section] indentation] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{0 1}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{set tag "H1>"}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{2}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{set tag "H2>"}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{3}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{set tag "H3>"}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{4}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{set tag "H4>"}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "\n<$tag <A NAME=[[$this section] uiName]> \name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[[$this section] uiName]</A></$tag"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set inSubdoc 0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set subLevel 0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'foreach sect [[$this section] getTree] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set level [$sect indentation]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set name [$sect uiName]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set type [$sect type]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set class [$sect operationClass]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$inSubdoc} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Check for end of subdocname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$level <= $subLevel} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set inSubdoc 0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set subLevel 0name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {!$inSubdoc} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Check if the section is manipulatable. If so then skipname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# this section and all it's underlying sections.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$class == "manipulate"} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# In subdocumentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set inSubdoc 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set subLevel $levelname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'} else {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Generate contents for this sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this genComponent $sectname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "</body>"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "</html>"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'close [$this ascFid]}method HtmlDocConGen::genComponent {this section} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# Look at the doctype of the class and generate a picture name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# or a text for it.name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'case [$section docType] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{Epsi Epsf Eps Ximage}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{$this genPicture $section }name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{default}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{$this genText $section}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}}method HtmlDocConGen::genPicture {this section} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set linkPath "[path_name base [$section docLocation]]"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set linkNumber [$this linkNr]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "<p><i>\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "<b>Figure</b>: $linkNumber: $linkPath.</i>"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "<p><img allign=top src=$linkPath.gif>"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'# linknr is used in templatename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this linkNr [incr linkNumber]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set epsi2gifPath "/user/papr/bin/epsi2gif"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set cmd "$epsi2gifPath $linkPath.gif $linkPath.eps"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if { [catch {system $cmd} reason] } {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerror "Epsi to gif conversion failed. Reason $reason."name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}}method HtmlDocConGen::genText {this section} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "\n"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'puts [$this ascFid] "File : <A HREF=[$section docLocation]> \name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[$section uiName]</A><BR>"}# Do not delete this line -- regeneration end markermethod HtmlDocConGen::section {this args} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$args == ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'return [$this _section]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set ref [$this _section]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$ref != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$ref _contentsGenerator ""name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set obj [lindex $args 0]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {$obj != ""} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$obj _contentsGenerator $thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this _section $obj}Implementing the method HtmlDocConGen:: generate The contents generation of section types Doc is slightly more complicated than the generation of section types Title. First, these section types can be part of a hierarchy of files. This is usually reflected in the weight of the headings: a section type lower in hierarchy generally has a smaller heading than one higher in hierarchy. This issue is taken care of by the first part of HtmlDocConGen::generate.Second, a section type Doc can contain file sections, such as links to diagrams or (generated) source files. In the following methods, the generation of these file sections are implemented:n HtmlDocConGen::genPicturen HtmlDocConGen::genTextThese methods are discussed later in greater detail.The last part of HtmlDocConGen::generate contains some code to generate HTML tags to conclude an HTML file properly.Expanding the template fileJust like in the contents generator for the section type Title, a template file containing some ready-made HTML-tagged text and Tcl macros is expanded in the contents generator of the section type Doc. This template file is called htmldoc.asc and is stored in the directory $user_dir.<html><head><TITLE>~[[$this section] name]</TITLE></head><body><p><b><i>Document:</b></i> ~$documentTitle<BR><b><i>Documented System:</b></i> ~[[[[[$this section] document] \documentedSystem] system] name]<BR><b><i>Project:</b></i> ~[[[$this section] project] name]<p><b><i>Date:</b></i> ~[fmtclock [getclock]]<BR><hr><p>The following (Object) Tcl command in HtmlDocConGen::generate expands the template file:expand_filename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$contentsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[$thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'templatePath]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'In the constructor of HtmlDocConGen, the attribute templatePath is set to htmldoc.asc.The template file is only used to generate the top part of the HTML file. Generation of links to graphic files for instance, is taken care of by the method -HtmlDocConGen::genPicture.Implementing the method HtmlDocConGen:: genComponent This method invokes the method HtmlDocConGen::genPicture if the file section is a diagram and HtmlDocConGen::genText if the file section is a (generated) source file. genText is also used for generating the contents of property sections.Implementing the method HtmlDocConGen:: genPicture This method consists of two parts. In the first part, the HTML code for including an in-line image and a caption is generated and the second part calls the C shell script epsi2gif. In this shell script, the utility GhostScript is called with the parameters needed to convert EPSI files to GIF files:#!/bin/shgs -sDEVICE=gifmono -sOutputFile=$1 $2 << EOFquitEOFBear in mind that the directory where gs is located must be included in your path.In the generated HTML file, a caption containing the number and the name of the figure is displayed before the in-line image. The variable linkNr is used to make figure numbers unique within one HTML file.Implementing the method HtmlDocConGen:: genText This method contains the code needed to generate a reference to a text file in HTML. In the generated HTML file, only a hyperlink to the appropriate text file is generated. As opposed to a link to a GIF file, text files are not displayed in-line in the generated HTML file. So the end user who is viewing the generated document with the HTML browser has to click on the reference to display the text file. ID="20431"Modeling Diagram ID="diagram sections"Sections IntroductionAnalogous to the existing integration with Interleaf and Word for Windows, the sample HTML integration models the different diagram types in ObjectTeam as subclasses of a class HtmlDiagramSection.FILENAME="01008.unk" ORIGFILE="pics/hldgsec.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Implementing the ID="diagram sections"Diagram Sections in Object TclReusing existing filesThe following files that are used in the Interleaf integration are practically identical to the ones needed for the HTML integration. You can copy them and change, where appropriate, the file names and class names:COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Interleaf FilesCOLNAME="2" VALIGN="TOP" MOREROWS="0"HTML FilesCOLNAME="1" VALIGN="TOP" MOREROWS="0"ildiagrams.tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmldiagrams.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"ilcadsecti.tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlcadsecti.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"ilccdsecti.tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlccdsecti.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"ildfdsecti.tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmldfdsecti.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"iletdsecti.tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmletdsecti.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"ilmgdsecti.tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlmgdsecti.tclCOLNAME="1" VALIGN="TOP" MOREROWS="0"ilstdsecti.tclCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlstdsecti.tclID="11718"Managing Tcl ID="customization files"Customization FilesWhere Tcl files for document generation are storedObject Tcl files that are required for existing document generation integrations are stored in the directory M4_home/tcl. All the other Object Tcl files required by ObjectTeam are stored there as well. User-defined Object Tcl files, like the ones created for the Html integration, must be stored elsewhere in the file system. Preferably, they are stored in the directory where all ID="user customization file;customization file"user customization files are stored: user_home/icase. DTP-specific Tcl fileHowever, you need to have at least one Tcl file stored in the M4_home/tcl directory. The name of this file must correspond to the abbreviation used to identify the word processor or editor. In this example, the name of this file must be html.tcl.When this file is readThis file is read by ObjectTeam when an end user changes the browser level into:n Phase levelThe file is only read if there are already documents of type Html defined on this level.n Document levelThe file is only read if the type of the document is Html.Contents of this fileFor every (existing) integration, such a file exists. These files contain only require statements by which all the other Tcl files used for that particular integration are sourced. The reason why the procedure require is used to source Tcl files and not the Tcl built-in command source, is because require prevents a file from being sourced more than once.Available filesFor the existing integrations, the following files exist:n fm40.tcln fm50.tcln il60.tcln word.tclMaking your own DTP-specific fileThe example file html.tcl serves the same purpose as the .tcl files for existing integrations. However, it does not use the same require statements, because the require statement only searches the M4_home/tcl directory, whereas the user customization files are stored elsewhere in the file system. The new integration needs its own Tcl procedure, my_require, to source Object Tcl files that can be stored anywhere. This new procedure can then be used in html.tcl to source all the user-defined Object Tcl files required for the new integration.Sometimes it is necessary to source another user-defined Object Tcl file from within a user-defined Object Tcl file. In those cases, you must use the same my_require statement as in the html.tcl file. (The example files shown in the previous sections also use the my_require statement.)The user-defined Object Tcl file html.tcl# Require: source a file only once#proc my_require {file} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'global my_required_filesname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if [info exists my_required_files($file)] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'set my_required_files($file) 1name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'my_read_require_file $file}# Procedure to actually read in the "required" file. Can be overridden to# use another method to read in a file (e.g. to use a search path).#proc my_read_require_file {file} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'source $file}# Source file if it exists#proc my_read_if_exist {file} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if [file exists $file] {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'if {[catch {source $file} reason]} {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'wmtkerror $reasonname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}}my_require "/user/papr/icase/htmldocedi.tcl"my_require "/user/papr/icase/htmlsection.tcl"my_require "/user/papr/icase/htmldocsec.tcl"my_require "/user/papr/icase/htmlcongen.tcl"my_require "/user/papr/icase/htmldocconge.tcl"my_require "/user/papr/icase/htmldiagrams.tcl"my_require "/user/papr/icase/htmlcadsecti.tcl"my_require "/user/papr/icase/htmlccdsecti.tcl"my_require "/user/papr/icase/htmldfdsecti.tcl"my_require "/user/papr/icase/htmletdsecti.tcl"my_require "/user/papr/icase/htmlmgdsecti.tcl"my_require "/user/papr/icase/htmlstdsecti.tcl"my_require "/user/papr/icase/htmltitles.tcl"my_require "/user/papr/icase/htmltitlec.tcl"In this example, the user-defined Object Tcl files are all stored in the directory /user/papr/icase.ID="29544"Defining the ID="editor"New Editor in the BrowserHow to create a new documentΣ To create a new document:1 In the Browser on phase level, select File | New | Document Version... Note: You must have correct access rights do this. A dialog box appears.2 Select the editor for which the document is created. The available editors in the default situation are Fm40, Fm50, and Il60 for Unix-based systems and Word for Windows-based systems.Making your own editor availableTo make your own editor available in this dialog box, you have to adapt the Tcl file newdocvdlg.tcl. The same abbreviation has to be used as in REFID="14429" TYPE="XREF-TEXTCOPY"Implementing the New DocEditor in Object Tcl; in this case, Html.Constructor newdocvdlg.tclFollowing is the bottom part of the constructor of newdocvdlg.tcl:name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Selection-changedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'callbackname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this.top.docsysname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'selectionChangedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'dialogname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[getParentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[getParentname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'%this]]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$dialogname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'handleSelectionChangedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this.top.namename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'textModifiedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'"$thisname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'handleSelectionChanged"name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Fillname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'listname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ofname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'availablename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'editorsname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ifname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$win95name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'entrySetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{Word}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'elsename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'setname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'entrySetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'{Fm40name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Fm50name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Il60name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Html}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this.top.editorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'configname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'\name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-entrySetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$entrySetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'\name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'-selectedname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'[lindexname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$entrySetname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'0]name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'#name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'Endname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'constructorname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'username='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'sectionname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'returnname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'$this}The file ID="newdocvdlg.tcl"newdocvdlg.tcl must be stored in the directory M4_home/tcl. Making your changes effectiveAfter you have adapted this file and implemented the necessary Object Tcl files successfully, you should be able to create documents and local sections of the new type in the ObjectTeam Browser.Σ To make your changes effective:1 Exit the Browser and start it up again. 2 Change the Browser level to phase level.3 Select File | New | Document Version...The new editor will be available in the New Document dialog box.FILENAME="01009.unk" ORIGFILE="pics/hlnewdoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Creating the structure of your documentAt this stage, you can still only manually create the structure of your document. Σ To create the structure of your document, in the Browser, add new sections on Document level and incorporate them in the Document Structure Matrix. If you want to automate the generation of draft documents, you have to create new document structure files. This is covered in the next section.ID="17186"Defining New ID="document structure file"Document Structure FilesIntroductionDocument Structure Files are used to automatically generate complete documents. For every default editor, two Document Structure Files are available:n editor_mod.str for documented systems of the Analysis, System Design and Object Design phasen editor_imp.str for documented systems of the Implementation phaseContents of Document Structure FilesThe columns in these files contain information to direct document generation. See REFID="41024" TYPE="XREF-TEXTCOPY"Customizing the Document Structure File for details on these columns. The files in this example resemble the ones used for the default editors. The component TableOfContents is added as a preparation for the utility curl, which is used later to link generated components together.html_mod.strThis is the Document Structure File for the Analysis, System Design and Object Design phase.# Component | Level | Struct. | Section# | Delta | Gen. | Type #--------------------------------------------------------------------- Table Of Contents | + | | Doc Model Title Page | = | | Title Object Model | = | | Doc Class Diagrams | + | createFileSections cad | Doc Communication Model | - | | Doc Class Communication Diagrams | + | createFileSections ccd | Doc Message Generalization Diagrams | = | createFileSections mgd | Doc Dynamic Model | - | | Doc Sequence Diagrams | + | createFileSections etd | Doc State Transition Diagrams | = | createFileSections std | Doc Functional Model | - | | Doc Data Flow Diagrams | + | createFileSections dfd | Doc html_imp.strThis is the Document Structure File for the Implementation phase.# Component | Level | Struct. | Section # | Delta | Gen. | Type #--------------------------------------------------------------------Table Of Contents | + | | DocImp. Model - Title Page | = | | TitleDatabase | = | | Doc Database Implementation | + | | Doc SQL scripts | + | createFileSections sql_script | DocSources | -2 | | DocCpp sources | + | | DocCpp | + | createFileSections c++ | DocEsqlcpp | = | createFileSections esqlc++ | DocHpp | = | createFileSections h++ | DocOther Sources | - | | DocLexpp | + | createFileSections lex++ | DocYaccpp | = | createFileSections yacc++ | DocMakefiles | - | | DocMake Template | + | createFileSections mtmpl | DocMakefile | = | createFileSections make | DocTclname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' | - name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'| createFileSections tcl name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]' | DocUsing the Document Structure FilesWhen you generate a document, you select one of these structure files. The sections are automatically created and incorporated in the Document Structure Matrix, according to the specified structure file.The document structure files for the existing integrations are stored in the directory M4_home/etc, but you can store your files anywhere you want on the file system. In this example, they are stored in the user_home/icase directory. You use the document property Document Structure File to specify the name and the path of the structure file you want to use.Before generating a document, make sure the section types in the column Section Type are valid local section types.ID="17336"Refining the HTML Draft DocumentIntroductionAlthough you now have a fully working HTML document integration in ObjectTeam, the navigation between the generated documents could be improved. This example uses the utility curl to do this. What curl providesThe result of using curl is a more usable document with better navigation facilities:n A header containing navigation buttons is added to every HTML documentn A hyperlinked Table of Contents is added to the local section -TableOfContents n A file figs.html is generated, which contains a hyperlinked list of all graphic filesUsing curlIn this example, you use curl after a document is generated. The activities that are required to make curl work properly are performed manually outside the ObjectTeam environment. Therefore, if the document is regenerated, these activities have to be repeated. (Alternatively, you could adapt the Tcl files used for HTML document generation to automate these activities.) For details on how to use curl, refer to the documentation that comes with curl.Below, some samples are depicted of files that were generated with ObjectTeam and refined later with curl.Curl Configuration filesIntroductionThis example uses the following configuration files:n The curl contents file cts n The curl configuration file dheader.sty n The curl configuration file dfooter.sty n The curl configuration file dcnts.sty The curl contents file ctsTableOfContents {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ModelTitlePage_Title name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ObjectModel_Doc {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ClassAssociationDiagrams_Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'CommunicationModel_Doc {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'ClassCommunicationDiagrams_Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'MessageGeneralizationDiagrams_Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DynamicModel_Doc {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'EventTraceDiagrams_Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'StateTransitionDiagrams_Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'FunctionalModel_Doc {name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'DataFlowDiagrams_Docname='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'}}The curl configuration file dheader.sty<hr><br><i>%prev(left.gif)</i>.<i>%next(right.gif)</i>.<i>%up(up.gif)</i>.<i>%home(home.gif)</i>.<i>%figs</i>.<hr> <p>The curl configuration file dfooter.sty<hr>The curl configuration file dcnts.sty<hr><h2>Contents</h2><ul><li>%item <p></ul> <p>ExamplesIntroductionWhen everything is set up properly, you can create a new document with the type Html (see REFID="29544" TYPE="XREF-TEXTCOPY"Defining the New Editor in the Browser). Then, the document can be generated according to a specified document structure file (see REFID="17186" TYPE="XREF-TEXTCOPY"Defining New Document Structure Files). After the files are generated, curl can be run from the command line to improve navigation within the generated document. The project document is then finished, and can be displayed in the Netscape Navigator by using File>Preview from the Browser on Document level (see REFID="14429" TYPE="XREF-TEXTCOPY"Implementing the New DocEditor in Object Tcl).On the next few pages, some examples of generated HTML documentation are depicted. Table Of ContentsIn the first two pictures, the generated Table of Contents is depicted, as displayed by the Netscape Navigator. The picture on the top shows the HTML-file before curl is run, the one on the bottom after. The header information and the title are generated by ObjectTeam, and the navigation buttons and the hyperlinked Table of Contents by curl. These navigation buttons are added to every HTML file that is included in the generated document. From every file, you can go back to the (hyperlinked) Table of Contents File, by clicking the TOC button. One of the other "buttons" added by curl is Figs, which jumps to the list of figures. FILENAME="01010.unk" ORIGFILE="pics/wdinitoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"FILENAME="01011.unk" ORIGFILE="pics/wdgentoc.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Title PageThe following figure shows ID="29372"the generated HTML-file ModelTitlePage_Title.html before (top) and after (bottom) running curl.Like title pages in other integrations, this page identifies the document with a list of document properties (see REFID="39157" TYPE="XREF-TEXTCOPY"Implementing HtmlTitleConGen in Object Tcl).FILENAME="01012.unk" ORIGFILE="pics/hlttlp1.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"FILENAME="01013.unk" ORIGFILE="pics/hlttlp2.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Other filesSome files only serve as an index to other files. In the following figure, the generated HTML-file DynamicModel_Doc.html before (top) and after (bottom) running curl.FILENAME="01014.unk" ORIGFILE="pics/hldynmo1.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"FILENAME="01015.unk" ORIGFILE="pics/hldynmo2.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"DiagramsThe following figure shows ID="14556"the generated HTML-file ClassAssociationDiagrams_Doc.html (first) an example of a CAD (second) and the Figures File (third).ClassAssociationDiagrams_Doc.htmlIn this window, each figure appears as an icon because the option Auto Load Images in Netscape is switched off.FILENAME="01016.unk" ORIGFILE="pics/hlcadtop.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Class Association Diagram (CAD)As a result of the conversion process from EPSI to GIF (see REFID="24884" TYPE="XREF-TEXTCOPY"Implementing HtmlDocConGen in Object Tcl), the size of Class Association Diagrams are always the same (one "page"), regardless of their actual size. FILENAME="01017.unk" ORIGFILE="pics/hlcad.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Figures fileThe Figures File figs.html is a list of hyperlinked diagrams generated by curl.FILENAME="01018.unk" ORIGFILE="pics/hlfigs.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"Implementation phaseFor documents that document systems from the Implementation phase, a different document structure file is used. The following figure shows ID="12217"a document of the Implementation phase: a list of (generated) C++ files (top) and an example of one such file (bottom).Unlike diagrams in other phases, (generated) source files are not displayed inline, at least not in this example. Instead, there is a hyperlinked list of source files. To view a file, an end user clicks on its link (see REFID="24884" TYPE="XREF-TEXTCOPY"Implementing HtmlDocConGen in Object Tcl).FILENAME="01019.unk" ORIGFILE="pics/hlcpplst.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"FILENAME="01020.unk" ORIGFILE="pics/hlcppfil.gif" ORIGTYPE="X" ORIGDOC="../../sources/dgg/createdg.fm5.mif"ID="29646"SummaryClasses createdIn this example, you created the following classes to integrate HTML document generation with ObjectTeam:COLS="3"COLNAME="1" COLWIDTH="144p"COLNAME="2" COLWIDTH="117p"COLNAME="3" COLWIDTH="189p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Class NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Object Tcl FileCOLNAME="3" VALIGN="TOP" MOREROWS="0"LocationCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlDocEditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmldocedi.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="37010" TYPE="XREF-TEXTCOPY"Creating a User Defined IntegrationCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlsection.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="26196" TYPE="XREF-TEXTCOPY"Modeling New Local Section TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlTitleSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmltitles.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="26196" TYPE="XREF-TEXTCOPY"Modeling New Local Section TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlDocSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmldocsec.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="26196" TYPE="XREF-TEXTCOPY"Modeling New Local Section TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlConGenCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlcongen.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="39589" TYPE="XREF-TEXTCOPY"Modeling Contents Generators for Local Section TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlTitleConGenCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmltitlec.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="39589" TYPE="XREF-TEXTCOPY"Modeling Contents Generators for Local Section TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlDocConGenCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmldocconge.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="39589" TYPE="XREF-TEXTCOPY"Modeling Contents Generators for Local Section TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlDiagramSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmldiagrams.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="20431" TYPE="XREF-TEXTCOPY"Modeling Diagram SectionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlCadSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlcadsecti.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="20431" TYPE="XREF-TEXTCOPY"Modeling Diagram SectionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlCcdSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlccdsecti.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="20431" TYPE="XREF-TEXTCOPY"Modeling Diagram SectionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlDfdSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmldfdsecti.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="20431" TYPE="XREF-TEXTCOPY"Modeling Diagram SectionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlEtdSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmletdsecti.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="20431" TYPE="XREF-TEXTCOPY"Modeling Diagram SectionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlMgdSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlmgdsecti.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="20431" TYPE="XREF-TEXTCOPY"Modeling Diagram SectionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"HtmlStdSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"htmlstdsecti.tclCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="20431" TYPE="XREF-TEXTCOPY"Modeling Diagram SectionsYou also created a new file called html.tcl, and adapted the existing file newdocvdlg.tcl.Besides these Object Tcl files, the following configuration files were created and stored in the user_home/icase directory:COLS="2"COLNAME="1" COLWIDTH="97p"COLNAME="2" COLWIDTH="351p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object Tcl FileCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"htmltitle.ascCOLNAME="2" VALIGN="TOP" MOREROWS="0"template for local sections of type TitleCOLNAME="1" VALIGN="TOP" MOREROWS="0"htmldoc.ascCOLNAME="2" VALIGN="TOP" MOREROWS="0"template for local sections of type DocCOLNAME="1" VALIGN="TOP" MOREROWS="0"html_mod.strCOLNAME="2" VALIGN="TOP" MOREROWS="0"document structure file for all phases except ImplementationCOLNAME="1" VALIGN="TOP" MOREROWS="0"html_imp.strCOLNAME="2" VALIGN="TOP" MOREROWS="0"document structure file for Implementation phaseDocExpress User GuideChapter 1 TutID="37584"orialTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress User GuideOverviewThis chapter guides you step by step through a quick demonstration of DocExpress to generate the Software Requirements Specification in compliance with the standard MIL-STD-498.The engineering information extracted by DocExpress to generate the documents was prepared with the ObjectTeam Diagram Editors. The remainder of this guide provides a more comprehensive description of the document generation process.In this chapterThis chapter contains the following topics: COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13054" TYPE="XREF-TEXTCOPY"Starting DocExpress 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12872" TYPE="XREF-TEXTCOPY"Loading a Document Template 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35770" TYPE="XREF-TEXTCOPY"Loading the Variable Set 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="32388" TYPE="XREF-TEXTCOPY"Building a Document 1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9TERM1="Starting DocEXPRESS" TERM2="demonstration"ID="13054"Starting DocExpressHow to start DocExpress under UNIXΣ To start DocExpress:1 Enter the following command from the UNIX command line:docexpressThe DocExpress Message Pad and DocExpress main window are displayed.FILENAME="01021.unk" ORIGFILE="pics/main.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tut.fm5.mif"FILENAME="01022.unk" ORIGFILE="pics/dmp.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tut.fm5.mif"Note: If UNIX issues an error message, verify that DocExpress was installed properly by reviewing the instructions in the ObjectTeam Installation Guide. How to start DocExpress under WindowsΣ To start DocExpress:1 Select Start | Programs | Cayenne DocExpress | Cayenne DocExpress.The DocExpress Message Pad and DocExpress main window are displayed.The DocExpress Message PadDuring the operation of DocExpress, error messages and other useful information will be displayed in the Message Pad. This window should therefore be left open.TERM1="Loading a Template" TERM2="demonstration"ID="12872"Loading a Document TemplateIntroductionA document template establishes the structure of the completed document. It consists of a title page, table of contents, main document, and appendixes. Once you have loaded a template, you can modify it in your DTP package. For details on how to modify templates, see the chapter for your DTP package.How to load a document templateΣ To load a document template:1 UNIX: Click the Load Button in the DocExpress main window. Windows: Select File | Load in the DocExpress main window.The Load window appears.FILENAME="01023.unk" ORIGFILE="pics/load.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tut.fm5.mif"FILENAME="01024.unk" ORIGFILE="pics/loadwin.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tut.fm5.mif"2 In the Load window, select your Documentation System.3 From the Standard popup, select MIL-STD-498.A list of available templates for this standard is displayed in the Template scroll list.4 From the Template scroll list, select SRS (Software Requirements Specification).The default document destination is filled in5 Click the Load Button. The document template is copied to the destination shown in the Document Destination field. 6 Select File | Close to close the Load window. Examining the Document TemplateIntroductionThe document template is now available for examination. The location of the template depends on your Documentation System.Interleaf Users: The template has been placed on your Interleaf desktop. If Interleaf is already running, you may need to select View | Rescan (Interleaf 5), or View | Update (Interleaf 6), so that it is visible. FrameMaker Users: The template has been placed in your home directory. If FrameMaker is not already running, start it with the "-name='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'api" option as follows: maker -apiWord Users: The template has been placed in your home directory. If Word is not already running, start it.How to review the document templateΣ To review the document template:1 Open the SRS document template (i.e., the SRS book icon for Interleaf; SRS.boo directory for FrameMaker; srs.boo directory for Word).2 Open the main document of the SRS template (i.e., the e_doc document icon for Interleaf, the e_doc.doc file for FrameMaker, or the e_doc.rtf for Word).3 Notice the number of pages in the document. The size of the document will grow when it is built with DocExpress.4 Notice the location of the following variables:COLS="2"COLNAME="1" COLWIDTH="147p"COLNAME="2" COLWIDTH="286p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"$EXT_IF_DIAG_GETCOLNAME="2" VALIGN="TOP" MOREROWS="0"Causes DocExpress to extract a Diagram from the ObjectTeam repository representing the External Interface Diagram required in Section 3.3.1 of the SRS.COLNAME="1" VALIGN="TOP" MOREROWS="0"$CAPABILITIES_GETCOLNAME="2" VALIGN="TOP" MOREROWS="0"Causes DocExpress to execute the parse_dcs utility to automatically get the system information starting with the main Class Communication Diagram, SystemOverview, from the ObjectTeam repository.5 Open the appendix document of the SRS (i.e., the g_app document icon for Interleaf, or g_app.doc file for FrameMaker, or g_app.rtf for Word). 6 Notice the location of the following variable:COLS="2"COLNAME="1" COLWIDTH="178p"COLNAME="2" COLWIDTH="259p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"$DATA_ELEMENTS_GETCOLNAME="2" VALIGN="TOP" MOREROWS="0"This variable causes DocExpress to extract all of the data elements of the selected system, and present them as tables.TERM1="Loading Variables" TERM2="demonstration"ID="35770"Loading the Variable SetIntroductionEach document template has an associated set of variables used in generating a document. Before you build a document, you must load the variable set for the selected template. How to load the variable setΣ To load a variable set:1 UNIX: Select Build in the DocExpress Main window. Windows: Select File | Build in the DocExpress Main window.The Build window appears.FILENAME="01025.unk" ORIGFILE="pics/build1.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tut.fm5.mif"2 In the Build window, select the same Documentation System you selected in REFID="12872" TYPE="XREF-TEXTCOPY"Loading a Document Template on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'1name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3. 3 In the scroll list, locate and double-click on your template (e.g., SRS.boo). The parts of the template are displayed.FILENAME="01026.unk" ORIGFILE="pics/loadvars.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tut.fm5.mif"4 Select ObjectTeam as the CASE Tool, and the Unified Modeling Language (UML) as the Method.5 Select Options | Variables | Load to load the variable set.You can now build the document.TERM1="Building a Document" TERM2="demonstration"ID="32388"Building a DocumentIntroductionDocExpress builds a document in parts. In the scrolling list on the Build Window, all the document parts (i.e., e_doc.doc, g_app.doc, etc.) are displayed. In this section, we will generate two parts of the document:n The main document (i.e., e_doc.doc)n The appendix (i.e., g_app.doc). Note: All messages are displayed in the DocExpress Message Pad, therefore, keep it open.How to build the main documentΣ To build the main document:1 In the Build Window, select the main document of the SRS (i.e., e_doc.doc) from the scrolling list.FILENAME="01027.unk" ORIGFILE="pics/build.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tut.fm5.mif"2 Select the Build button.DocExpress displays the Confirmation window.FILENAME="01028.unk" ORIGFILE="pics/buildq.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tut.fm5.mif"3 Select the OK button.+ There seems to be some kind of bug here. Clicking on Build gives the error "Document already being built." Double-clicking on e_doc opens the template. You must make sure your variables are set OK. The system variable was not set properly for me. It was set to the "Training Materials System" even though I set it to BusinessObjects.system. in the .ata/.var_file.The document is now built. Wait for DocExpress to notify you that the document generation has completed. Examining your document Word UsersWait for Word to open the completed document. The generated document may now be examinedFrameMaker UsersWait for FrameMaker to open the completed document. The generated document may now be examined. Interleaf UsersThe generated document is placed on your desktop within the book loaded previously. If Interleaf is already running, you may need to perform a Rescan (Interleaf 5) or an Update (Interleaf 6). Notice how many pages have been generated. Go to Section 3.3.1 where the External Interface Diagram has been placed. Identify the list of generated external interfaces (Section 3.3.1). Notice the order that was used to place the information into the document, i.e., Object Model, Dynamic Model, Functional Model and text. + These model names are no longer used in 711. (UML)How to build the AppendixFrameMaker UsersIf FrameMaker is in use, exit it. Σ To build the appendix:1 If you closed the Build window, select the Build button on the DocExpress Main window. 2 In the scroll area of the Build window, click the appendix document of the SRS (i.e., g_app.doc). 3 Select the Build button on the Build window. 4 Select the OK button on the Confirmation window. Wait for DocExpress to notify you that the document generation has completed. 5 Select File | Close to close the Build window.Examining your document Interleaf Users:The generated document has been placed on your desktop within the book loaded previously. If Interleaf is already running, you may need to select View | Rescan (Interleaf 5) or View | Update (Interleaf 6). Open the generated document. FrameMaker UsersThe generated document should already be open. Word Users: Open the generated document if it is not already open.The appendix contains tables that have been generated for all of the system's data elements.What to do nextNow you are familiar with the basic operations of DocExpress, you can find out more about how DocExpress works in the remaining chapters:REFID="12416" TYPE="XREF-TEXTCOPY"Chapter 2, Introduction to DocExpress, gives an outline of how DocExpress works.REFID="35482" TYPE="XREF-TEXTCOPY"Chapter 3, Development Guidelines for ObjectTeam, describes guidelines to keep in mind when developing in ObjectTeam in order to get the best output in DocExpress.REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress Templates, explains how to modify the standard templates provided with DocExpress to match your own requirements.REFID="11998" TYPE="XREF-TEXTCOPY"Chapter 5, Building Documents in DocExpress, describes the document generation process in more detail.Chapter 2 Introduction ID="12416"to DocExpressTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress User GuideIntroductionObjectTeam is an object-oriented software development environment. Using the ObjectTeam Diagram Editors, you create development models, which are stored in the Cayenne repository. DocExpress lets you extract model data from the Cayenne repository, and import it into documents formatted according to a variety of standard templates. You can then carry out additional formatting on the generated documents in your Document Publishing System.This chapter describes the principles behind DocExpress and summarizes the document generation process.In this chapterThis chapter contains the following topics:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11973" TYPE="XREF-TEXTCOPY"Document Templates 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37517" TYPE="XREF-TEXTCOPY"Developing a Document 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18136" TYPE="XREF-TEXTCOPY"Customizing DocExpress 2name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9TERM1="Document Templates"ID="11973"Document TemplatesIntroductionThe first step in building a document is to select a document template. DocExpress supplies default document templates for various standards. However, you can also customize the default templates, or create your own.Supported TERM1="Standards" TERM2="support for"standardsThe documents generated by DocExpress comply with the following military, government, commercial, and international standards:n DOD-STD-2167An DOD-STD-2168n DOD-STD-7935An MIL-STD-490An MIL-STD-498n MIL-STD-973n MIL-STD-1521Bn ANSI/IEEEn ISO 9000-3/6592n J-STD-016+ ^ last one Win only ^?TERM1="Document" TERM2="types"Data Item Descriptions (DIDs)Each of the above standards defines a number of document types called Data Item Descriptions (DIDs). Each DID defines how a particular software development activity should be documented. The MIL-STD-498 standard, for example, defines 22 DIDs. DocExpress supplies document templates for all DIDs defined by each supported standard. A document template consists of a set of files, or document parts, whose formatting and structure comply with the appropriate standards and style guides defined by the DID.Note: The document templates supplied with your copy of DocExpress may vary depending on the options purchased. Contact Cayenne for additional templates.TERM1="Document" TERM2="parts"Document PartsEach DID consists of the following document parts: n Title pagen Table of Contents (TOC)n List of Figures (LOF)n List of Tables (LOT)n List of Appendixes (LOA)n Main Documentn Appendix AA large part of the contents of the Main Document and Appendix A is generated by DocExpress. Most of the contents of the TOC, LOF, and LOT are generated from the Main Document using the document publishing system (FrameMaker, Interleaf, or Word). Likewise, most of the contents of the LOA is generated from Appendix A using the document publishing system.Document publishing systemsDocument template files are provided for each of the supported documentation systems. All document templates have been developed in accordance with the appropriate standards and style guides.If the supplied templates do not exactly meet your needs, you can customize an existing one or develop your own, using the facilities of your document publishing system. For details on modifying templates, see the chapter on Customizing DocExpress Templates.Note: A document template developed with one document publishing system cannot be used with another. TERM1="Document" TERM2="characteristics"ID="18752"Mapping Model Data to Document ContentRequirementsDocExpress generates documents according to the characteristics (i.e. DIDs) defined by the various supported standards. Each standard imposes requirements on the following aspects of the deliverable documents:n Contentn Structuren FormatThese requirements dictate how the model data for a given development activity is distributed (i.e., mapped) to the various sections within a document.FILENAME="01029.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_intr.fm5.mif"ContentEach standard dictates which model information must be presented in the document. The content of a particular document depends on the current development activity, such as Analysis or Design.The standard also dictates the order in which the information is included in the document. Different sections of the document require different elements of model information.StructureThe structure of a document is defined by the hierarchy and sequence of sections and paragraphs.HierarchyFor example, sections may consist of subsections, which in turn consist of textual paragraphs. Textual paragraphs may in turn consist of numerical or bullet lists. Sometimes the level of nested relationships may be limited by the applicable documentation standard, as in DOD-STD-2167A and MIL-STD-490A.SequenceThe sequence of paragraphs may also be mandated. For example, in the Software Requirements Specification for MIL-STD-498, the first section must be Scope, the second Applicable Documents, and the third Engineering Requirements.FormatTERM1="Document" TERM2="format"Format is concerned with the consistent presentation of information within the document. This is represented by the requirements for specific font types and sizes, headers and footers, pagination schema, etc.TERM1="Document" TERM2="building"ID="37517"Developing a DocumentDocument development processDeveloping a document using DocExpress in conjunction with your document publishing system consists of the following tasks: COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="124p"COLNAME="3" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TaskCOLNAME="2" VALIGN="TOP" MOREROWS="0"ToolCOLNAME="3" VALIGN="TOP" MOREROWS="0"See Chapter onCOLNAME="1" VALIGN="TOP" MOREROWS="0"n Develop the ObjectTeam modelsCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="35482" TYPE="XREF-TEXTCOPY"Chapter 3, Development Guidelines for ObjectTeamCOLNAME="1" VALIGN="TOP" MOREROWS="0"n Optional: Modify a default template or create your ownCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocExpress and document publishing systemCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress TemplatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"n Load a Document Templaten Load the Variable Setn Build the documentCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocExpressCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="11998" TYPE="XREF-TEXTCOPY"Chapter 5, Building Documents in DocExpressCOLNAME="1" VALIGN="TOP" MOREROWS="0"n Complete the documentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document publishing systemCOLNAME="3" VALIGN="TOP" MOREROWS="0"REFID="15623" TYPE="XREF-TEXTCOPY"Chapter 8, Completing Documents in WordREFID="15623" TYPE="XREF-TEXTCOPY"Chapter 6, Completing Documents in FrameMakerREFID="41357" TYPE="XREF-TEXTCOPY"Chapter 7, Completing Documents in InterleafLoading a document template and variable set only needs to be performed once for each instance of a document. Developing a document's contents and building the document is generally an iterative process. Documents may be built many times during their development either for review or for submission.Developing the ObjectTeam modelIn order to get the best results when building a document, certain drawing and modeling guidelines should be followed in developing your ObjectTeam models. For more details, see REFID="35482" TYPE="XREF-TEXTCOPY"Chapter 3, Development Guidelines for ObjectTeam.Loading a templateTo load a template, you specify the following items in the DocExpress Load window:n Document publishing systemn Standardn DIDA set of template files (default or custom) are then copied to your home directory.Note: If the supplied templates do not exactly meet your needs, you can customize an existing one or develop your own, using the facilities of your document publishing system. For details on modifying templates, see REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress Templates.Loading a Variable SetAssociated with each document template is a set of variables. After selecting a particular template, you must load its associated variables into DocExpress. These have default values defined by the selected standard, but you can change their values using the DocExpress Variable Editor. Many variables are embedded as placeholders in the template files. When you build a document the variables are replaced by their current value.(Re)Building a documentOnce you have loaded a document template and variable set, you build the document. DocExpress automatically extracts modeling data from the Cayenne repository and places it in the appropriate sections of the document template in your home directory. DocExpress also restructures and reformats the document to accommodate the modeling data.Every time a document is rebuilt, DocExpress extracts the most current engineering information from the Cayenne repository.For a detailed description of the build process, see REFID="11998" TYPE="XREF-TEXTCOPY"Chapter 5, Building Documents in DocExpress.DocExpress utilitiesDocExpress builds the documents by performing "intelligent" queries on the Cayenne repository. These queries are performed by DocExpress commands and variables. These commands and variables allow you to execute any UNIX process and include files located anywhere on the network. For details of the syntax of the DocExpress variables and commands, see the DocExpress Utilities Guide. For details on the use of these variables and commands, see REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress Templates.Modifying your generated documentIn addition to the text and diagrams added to your document by DocExpress, you may wish to add some information to the document manually, especially if it is material that cannot be stored in ObjectTeam. It is simple to enter text or create additional diagrams in the document publishing system itself.For more information on modifying your generated document, see the appropriate chapter on completing your document in your DTP package.ID="18136"Customizing DocExpressIntroductionDocExpress was designed to be very flexible. All utilities that extract information from the ObjectTeam repository have a variety of options that may be changed to modify their behavior. In addition, you can create your own utilities. For more information, see the DocExpress Utilities Guide and REFID="37519" TYPE="XREF-TEXTCOPY"Chapter 9, Customizing DocExpress.ATTRNAME="MIFconds"GlossaryGlossaryATTRNAME="MIFconds"GlossaryGlossaryATTRNAME="MIFconds"GlossaryChapter 3 Development ID="35482"Guidelines for ObjectTeamTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress User GuideIntroductionThis section discusses how to use ObjectTeam in developing software projects, so that the documentation effort will be more productive and the results more satisfactory. This chapter assumes that you are experienced in using ObjectTeam and have a working knowledge of the systems and software engineering methods supported by ObjectTeam. For a detailed description of ObjectTeam and its use, see the ObjectTeam documentation. TERM1="ObjectTeam Systems" TERM2="diagram layout"ID="10219"Diagram LayoutIntroductionGenerally, figures and tables in a document are laid out in portrait orientation, that is, the height of the figure or a table is greater than its width. Moreover, for a document with a page size of 8.5" by 11" (US Letter) the maximum available space for a figure is only 6.5" by 8.5" after accounting for margins, header, footer, and the figure or table title. These limitations must be taken into account when preparing ObjectTeam diagrams for documentation. Landscape versus portraitTypically, ObjectTeam windows are sized in landscape orientation. That is, the window's width is greater than its height. Diagrams developed in a landscape orientation look okay in ObjectTeam and when printed directly from ObjectTeam.FILENAME="01030.unk" ORIGFILE="pics/landscape.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_guide.fm5.mif"However, when sent to a document publishing system, the resulting diagram may look different. For example, objects or text may only partially appear or text may be too small to be legible, etc. Because DocExpress uses the portrait orientation for document layout, it is recommended to layout ObjectTeam diagrams in portrait orientation as shown in the following figure. FILENAME="01031.unk" ORIGFILE="pics/portrait.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_guide.fm5.mif"Resizing diagramsDiagrams developed in ObjectTeam can be much larger than the allotted 6.5" by 8.5" in the document. The diagram as it appears in ObjectTeam must be "shrunk" by DocExpress to fit the allocated area in the document. If the diagram is reduced to less than 50% of its original size, it may no longer be possible to read the text or understand the diagram.Number of objects in a diagramReadability problems may arise when too many objects are placed on a single ObjectTeam diagram. Since DocExpress places a diagram onto a single 8.5" by 11" page for printing, too many objects can cause the diagram to become unreadable. TERM1="Diagram Layout" TERM2="d2 rule of thumbd3"DeMarco proposed a rule, which states that: "There should be no more than 7name='plusmn' font=symbol charset=fontspecific code=177 TeX='\pm ' descr='[plusmn]'2 objects on each diagram."DeMarco's rule of thumb was proposed for Structured Analysis, but it is also relevant for UML or OMT diagrams. SummaryThe points in this section can be summarized in the form of general guidelines for the development of diagrams in ObjectTeam. Adhering to these guidelines will result in a better presentation of ObjectTeam objects in documents. n Diagrams should be developed in portrait orientation.n Diagrams in ObjectTeam should be no larger than 13"x17" so they are not compressed more than 50 percent. n Do not crowd objects on the diagram.n Keep the diagram simple, remember the "7name='plusmn' font=symbol charset=fontspecific code=177 TeX='\pm ' descr='[plusmn]'2" rule. TERM1="ObjectTeam Systems" TERM2="annotating of"Annotating ObjectTeam Projects and ObjectsUsing the Free Text propertyObjectTeam provides a convenient way of keeping additional information about the objects in the repository. Each object class in ObjectTeam has a property called Free Text. This property permits the user to "attach" electronic notes to any object in the repository. Each object may have only one Free Text property. DocExpress can extract these Object descriptions and include them into the document. See REFID="26532" TYPE="XREF-TEXTCOPY"Object Formatting on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7 for how these descriptions are extracted from the Cayenne repository and formatted for inclusion in the generated document. Object descriptions can be used to describe the various ObjectTeam objects, such as Class Diagrams, Classes, Event Messages, etc. For example on DoD projects, a description containing the purpose of each Computer Software Configuration Item (CSCI) capability can be developed so that it could be automatically included by DocExpress into a Software Requirements Specification (SRS) in compliance with MIL-STD-498. Assigning free text to objectsΣ To assign free text to objects in the Diagram Editors:1 In a Diagram Editor, select the object you wish to describe and then select Item | Edit Properties.The Edit Properties dialog is displayed.FILENAME="01032.unk" ORIGFILE="pics/editprops.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_guide.fm5.mif"2 If multiple items are listed, select the item you wish to describe then select the Text tab. Type the purpose of the object into the Free Text area.The description should be brief and describe the requirements of the object it represents. Only the requirements that pertain to this object should be addressed in the description. For more information on assigning properties, see the ObjectTeam Modeling Guide. TERM1="Object Formatting"ID="26532"Object FormattingIntroductionThe presentation of diagrams and text within ObjectTeam is not always consistent with the desired presentation in a document. Therefore, DocExpress provides a variety of mechanisms to achieve an acceptable presentation. The following sections describe how diagrams, tables and text extracted by DocExpress from the Cayenne repository are formatted when placed in a document. TERM1="Object Formatting" TERM2="Diagrams"DiagramsPresentationDocExpress sizes a diagram (e.g., Class Diagram, Use Case Diagram, etc.) to fit into a maximum 6.5 inch wide frame in a document. The height of the frame remains proportional to the width but cannot exceed 8.5 inches. By default, DocExpress generates titles centered below the diagrams. You can modify these defaults.The diagram will be compressed proportionally as much as necessary to fit the specified area. If the diagram is compressed more than 50 percent, it may be unreadable. This difficulty may be resolved by using an alternate layout in ObjectTeam (see REFID="10219" TYPE="XREF-TEXTCOPY"Diagram Layout on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2) or by the document publishing system (see REFID="15623" TYPE="XREF-TEXTCOPY"Chapter 6, Completing Documents in FrameMaker or REFID="41357" TYPE="XREF-TEXTCOPY"Chapter 7, Completing Documents in Interleaf.Inclusion OptionsDocExpress extracts individual diagrams or groups of diagrams and objects from the Cayenne repository using the get_diags and get_objects utilities. Some utilities extract large groups of related information including diagrams. For example, parse_omt extracts Classes, descriptions attached to each Class, the State Model, and Functional Model for each Class as well as other associated information. See the DocExpress Utilities Guide for more information. Diagram TitlesWhen a diagram is extracted from the Cayenne repository by DocExpress, you can specify the title for the diagram in the document. By default the title is the diagram's name with its type in parenthesis. TERM1="Object Formatting" TERM2="Tables"TablesPresentationDocExpress sizes a table (e.g., Data Element Table, Interface Table, etc.) to be 6.5 inches wide in the document. Titles are centered above the tables generated by DocExpress. Inclusion OptionsDocExpress can generate individual or groups of tables from the ObjectTeam database using the dd_tbl or if_tbl utilities. See the DocExpress Utilities Guide for more information. Table TitlesWhen a table is extracted from the Cayenne repository by DocExpress, you can specify the table's title in the document. By default the title is the name and type of the data element (e.g., Class, Messages Definition, etc.) or interface (e.g., Communication Message, etc.). TERM1="Object Formatting" TERM2="Text"TextPresentationThe text formatting capabilities of the ObjectTeam text editor are limited. It does not provide word wrap, or choices of font size, style (e.g., italic, bold), or family (e.g., Times, Courier) or other more sophisticated formatting capabilities of commercial document publishing systems. DocExpress automatically formats these textual objects in accordance with predefined styles in the document templates. You can modify the definitions of these styles using your document publishing system. In addition, you can specify alternate styles (see the appropriate utility information in the DocExpress Utilities Guide). Note: Carriage-returns should only be typed into the text when they are desired in the final output. Inclusion OptionsYou can place DocExpress variables in a document template to include files or to execute utilities that extract object descriptions or text files and include them in the document.You can also place these variables in the text files or text objects that are included upon the generation of the document. These variables will not be resolved on the first generation of the document. However, when the generated document is rebuilt, the variables will be instantiated. For more information on DocExpress commands and variables, see REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress Templates. Building a DocumentIntroductionAfter developing the necessary engineering information, the process of assembling the document can be performed automatically by DocExpress. This section discusses some of the automated and manual steps that you must take to produce a document. TERM1="Instantiation" TERM2="automatic"Automated InstantiationDocExpress automatically extracts the necessary information from the Cayenne repository and places the information in the appropriate sections of the desired document. For a detailed description of the steps you perform with DocExpress to generate a document, see REFID="11998" TYPE="XREF-TEXTCOPY"Chapter 5, Building Documents in DocExpress.TERM1="Instantiation" TERM2="manual"Manual InstantiationYou may prefer to add some engineering information to the document manually. For example, the information for some document sections are not normally captured by ObjectTeam. This information may be easier to simply type into the document template. TERM1="Document Building" TERM2="Rebuilding"Rebuilding the DocumentEngineering information changes often. There are two approaches to incorporate these changes into the document: n Make modifications to the Cayenne repository.n Make modifications to the generated document.Cayenne recommends using ObjectTeam to modify all engineering information that comes from the Cayenne repository. The original document template is then used to generate an updated version of the document that incorporates the latest engineering information. DocExpress accepts as input any document created using a supported document publishing system. Therefore, a document built by DocExpress may also be "rebuilt." However, when a document is built by DocExpress all Mapping Information that can be resolved is resolved, thus removing it from the generated document. Note: Informiation that cannot be resolved is left as-is in the document built by DocExpress. Also, text files and objects may contain DocExpress variables or commands. These are not resolved when the file or object is first included, but may be resolved on subsequent builds. To rebuild a document built by DocExpress, it should contain Mapping Information. Otherwise, no additional information will be extracted from the repositories. Note: Your document publishing system may be used to compare the differences between two versions of a document and generate revision markings. ATTRNAME="MIFconds"GlossaryGlossaryGlossaryATTRNAME="MIFconds"GlossaryChapter 4 Customizing ID="32776"DocExpress TemplatesTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress User GuideIntroductionThis chapter describes the default DocExpress document templates for the document publishing systems, and how to customize them. In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30842" TYPE="XREF-TEXTCOPY"Customizing Document Templates 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36575" TYPE="XREF-TEXTCOPY"Customizable Aspects 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="QgAwk8stei" TYPE="XREF-TEXTCOPY"DocExpress Variables and Commands 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21378" TYPE="XREF-TEXTCOPY"Customizing for Standards and Document Templates 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'21COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31242" TYPE="XREF-TEXTCOPY"FrameMaker Templates 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="33899" TYPE="XREF-TEXTCOPY"Interleaf Templates 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'36COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11898" TYPE="XREF-TEXTCOPY"Microsoft Word Templates 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'46ID="30842"Customizing Document TemplatesIntroductionThe document templates provided with DocExpress have been designed to comply with the appropriate standards defined by the associated DID. However, these default templates may not meet the needs of every organization or project. For example, many projects specify document tailoring instructions in the Contract Data Requirements List (CDRL).If the default templates do not exactly meet your requirements, you can modify any aspect of a document template's structure, format or content using your documentation system. Where to customizeYou can customize template files on two levels:n PersonalWhen you load a template for a selected standard, a template directory is created in your home directory and a set of document part files are copied into the template dictory. These files belong to you and you can edit them as you like.n ProjectIf you wish to use a customized template for an entire project, you must make the template available to all members of the project team. To do this, you copy the default template to a separate directory and make the template available in the DocExpress user interface.Warning: You are recommended not to customize the default template files themselves.Customization ProcessΣ To customizing a personal template:1 Load the template for a particular standardThe template files are copied to your home directory by default.2 Edit the template files in your documentation system.3 Edit the variable set using the Variable Editor.Σ To customize a project-specific template:1 Copy the default template files for your selected standard to a separate directory.2 Edit the template files in your documentation system.3 Define a variable set for the template in a text editor.4 Edit the DocExpress menus to select the new template.TERM1="Guidelines" TERM2="customization"TERM1="Customization" TERM2="guidelines"Customization GuidelinesFor the most effective use of the document templates, Cayenne recommends the following customization guidelines: n Restrict modifications of the protected default templates to changes which applies across the company or project. n Perform all other customization on copies of the default templates. n Avoid customizing documents that have been built by DocExpress. Such changes are difficult to share and may be lost when the document is rebuilt. n Create separate directories to contain any customized document templates. Customization guidelines for the structure, format, and content of the document templates are contained in REFID="41657" TYPE="XREF-TEXTCOPY"Appendix A, Documentation Requirements.TERM1="Templates" TERM2="for Frame"ID="36575"Customizable AspectsIntroductionYou can customize the following aspects of a document template:n Structure (e.g., deleting sections or paragraphs)n Format (e.g., modifying font families, style or size)n Content (e.g., adding, deleting or modifying boiler plate text, development guidance or mapping information)TERM1="Templates" TERM2="FrameMaker" TERM3="structure"StructureA document's structure defines the sequence of the various sections it contains and the relationships between them.The sections in a document template are implemented in FrameMaker by predefined paragraph tags and in Interleaf by predefined components. A paragraph tag/component is defined for each section level of the document template. For example, sections 1, 2, 3, ... are defined by the paragraph tag/component section.level_1, and sections 1.1, 1.2, 1.3, ... 2.1, 2.2, 2.3, ... are defined by section.level_2. There are ten (10) predefined section level paragraph tags/components.n For a complete list of paragraph tags, see REFID="31242" TYPE="XREF-TEXTCOPY"FrameMaker Templates on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27.n For a complete list of components, see REFID="33899" TYPE="XREF-TEXTCOPY"Interleaf Templates on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'36.n For a complete list of styles, see REFID="11898" TYPE="XREF-TEXTCOPY"Microsoft Word Templates on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'46.For details on customizing document structure, see your FrameMaker, Interleaf, or MS-Word documentation.TERM1="Templates" TERM2="FrameMaker" TERM3="format"FormatThe format of a document template is defined by its paragraph tags (FrameMaker), components (Interleaf) or styles (MS-Word). Each paragraph tag/component has a font family, style, size, and various layout characteristics. You can modify these characteristics using the FrameMaker Paragraph Designer, Interleaf Component Properties editor or MS-Word Paragraph dialog box.FILENAME="01033.unk" ORIGFILE="pics/fr_pcat.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"FILENAME="01034.unk" ORIGFILE="pics/il_compcat.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"For details on customizing document format, see your FrameMaker, Interleaf, or MS-Word documentation.ContentYou can modify the development guidance to depict your company's development process, or modify the boiler plate text to suit your company's particular style. For details on customizing content, see REFID="16681" TYPE="XREF-TEXTCOPY"Customizing Content on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6.TERM1="Templates" TERM2="FrameMaker" TERM3="content"ID="16681"Customizing ContentIntroductionEach document template initially contains three types of information: n Development Guidancen Boiler Plate Textn Mapping InformationFILENAME="01035.unk" ORIGFILE="pics/info_types.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"TERM1="Document" TERM2="FrameMaker" TERM3="development guidance"TERM1="Development Guidance" TERM2="FrameMaker"Development GuidanceDevelopment Guidance is shown in italics and specifies the information that must be contained within each section or paragraph. Development Guidance for each template is extracted from its related Data Item Description (DID). All Development Guidance paragraph tags/components have a name beginning with guide.DID, for example, guide.DID_text, guide.DID_list1, etc. You should modify the development guidance so that it depicts your company's development process. Note: You should remove the Development Guidance before delivering the final document. TERM1="Boiler Plate" TERM2="FrameMaker"TERM1="FrameMaker" TERM2="boiler plate"Boiler Plate Text"Boiler plate" is any text not specific to a project. This can include introductory text, acronym definitions, or descriptions of a development method. You should modify the boiler plate text to suit your company's particular style.All paragraph tags for boilerplate text have names beginning with bp, for example, bp.text, bp.glossary, etc.TERM1="Mapping" TERM2="FrameMaker"TERM1="FrameMaker" TERM2="mapping information"Mapping InformationMapping Information consists of DocExpress variables and commands that act as placeholders for model data. The variables and commands are resolved into the appropriate model data during the DocExpress Build operation. Note: All variables used in the document template must be defined in the associated variable set. If you change any variable in the template, be sure to also change its definition. Mapping Information has the following characteristics:n A Mapping Information section is identified by double percentage signs (%%) at the beginning and the end of an uppercase alphanumeric string.n Variables start with the dollar sign ( $ ) and their name should be in a single, alphanumeric string with all capital letters. Underscores ( _ ) are permitted. No other special characters are allowed. For example, $CSCI_NAME is a valid DocExpress variable. The string $csci_name is not a valid DocExpress variable. n Mapping Information must be contained in its own paragraph. A special paragraph, bp.command, is defined in the templates for this purpose.Additional Mapping Information may be inserted into the document template by following the above rules. Any variables added to the template must be defined using the DocExpress Variable Editor as discussed in REFID="34176" TYPE="XREF-TEXTCOPY"Modifying the Variable Set on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14.For more information on the rules and use of DocExpress variables and commands, see REFID="QgAwk8stei" TYPE="XREF-TEXTCOPY"DocExpress Variables and Commands on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9.ObjectTeam contentParagraphs are also provided in the templates for all engineering information extracted from the Cayenne repository. These paragraphs do not have a prefix; for example paragraph, figure, etc. As with all other paragraphs, their characteristics may be modified using the FrameMaker Paragraph Designer, Interleaf Component Properties editor, or MSWord Paragraph dialog box.TERM1="Guidelines" TERM2="tailoring"TERM1="Tailoring" TERM2="guidelines"Additional Tailoring GuidanceAll standards, including DOD-STD-2167A, are meant to be tailored for every project to which they apply. Therefore, the templates and their use should also be tailored accordingly. For further guidelines on how to tailor the templates and their application, contact Cayenne Software.TERM1="Customization" TERM2="standards"TERM1="Customization" TERM2="document templates"TERM1="DocEXPRESS Variables"ID="QgAwk8stei"TERM1="Variables"TERM1="DocEXPRESS Commands"TERM1="Commands"DocExpress Variables and CommandsIntroductionVariables give you the flexibility to abstract the required information in a template such that it can be instantiated with modeling data from different projects using different development methods. A CSCI name, text file, and hierarchy of diagrams are examples of information that could be abstracted using variables.DocExpress provides a Variable Editor that allows you to easily add, delete, and modify variable definitions. For more information on the use of the Variable Editor, see REFID="34176" TYPE="XREF-TEXTCOPY"Modifying the Variable Set on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14.TERM1="CASE Tool Information" TERM2="including into FrameMaker"Extracting model dataThe Build option of DocExpress resolves all variables and commands present in the document template, including commands that extract engineering information from the CASE tool repository. The information extracted may include individual or groups of objects. For more information, see REFID="11998" TYPE="XREF-TEXTCOPY"Chapter 5, Building Documents in DocExpress.Resolving Mapping InformationWhen building a document, DocExpress resolves the variables and commands it encounters in the document template. This Mapping Information is resolved based on its values defined in a Variable Set associated with the document. DocExpress provides default Variable Sets for various combinations of documents and development methods. An appropriate Variable Set is selected and loaded by the user from the DocExpress Build window. After loading the Variable Set, you can manipulate it as needed.You can insert additional Mapping Information into the document template by following the above rules. In addition, any variables added to the template must be defined using the DocExpress Variable Editor.TERM1="DocEXPRESS Variables" TERM2="syntax"TERM1="DocEXPRESS Variables" TERM2="rules of use"TERM1="Variables" TERM2="syntax"TERM1="Variables" TERM2="rules of use"Variable Syntax and Rules of UseVariable rulesThe use and syntax of the DocExpress variables are as follows:n Variables start with the dollar sign ($) and their name must be a single, alphanumeric string with all capital letters. Underscores (_) are permitted. No other special characters are allowed. For example, $CSCI_NAME is a valid DocExpress variable. The string $csci_name is not a valid DocExpress variable. n Commands start with the "at" sign ( @ ). Three commands are provided: EXECUTE, UPDATE, and INCLUDE. Each command may have associated parameters. The parameters are enclosed in parenthesis. For example, the following command executes the UNIX date command and redirects its results to the date.txt file in the home directory of the user.@EXECUTE(/usr/bin/date > $HOME/date.txt) + should this have a -u after date?n The variable name must be all upper-case.n The name must be a single alpha-numeric string (i.e., "A" through "Z" and "0" through "9"). The string may contain underscores ( _ ). No other special characters are permitted. n The variable name must be unique for a given document.n The variable value can be either a plain text string, a DocExpress command, another DocExpress variable, or a variable from your UNIX environment. For example, ATAHOME and HOME are two variables that are used in other DocExpress variables, but are defined in your UNIX environment.n Any reference to another DocExpress variable within the variable definition must be preceded with a "$" sign as shown in the following figure.FILENAME="01036.unk" ORIGFILE="pics/date_var.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"n DocExpress will resolve up to ten (10) levels of recursive variable definitions. After ten levels, if the variable is still not resolved, the resolution is passed to the system environment for resolution.n In a document template variables must have double percent signs (%%) at the beginning and the end as shown in the following figure. FILENAME="01037.unk" ORIGFILE="pics/templ.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"n UNIX environment variables can be referred to in variable values only. TERM1="DocEXPRESS Commands" TERM2="rules of use"TERM1="Commands" TERM2="syntax"TERM1="Commands" TERM2="rules of use"Command TERM1="DocEXPRESS Commands" TERM2="syntax"Syntax and Rules of UseCommand rulesThe use and syntax for the DocExpress commands is described below:n A DocExpress command must be preceded by an "at" ( @ ) sign. n The syntax for a DocExpress command is as follows:@Command_name(Command_value)n The Command_name is either "EXECUTE" or "INCLUDE".n For the "EXECUTE" command, the Command_value is any UNIX or user-defined process. It is executed as a command typed at the UNIX prompt in a shell window, including all of the options, output redirection, piping, etc.n For the "INCLUDE" command, the Command_value must be a standard UNIX filename. This command includes the file identified by the Command_value into the document at the "INCLUDE" location. The file must be at least in read mode to be included in the generated document. The path for the file must be fully specified.n The Command_value can contain references to DocExpress variables as shown in the following figure. However, it can not contain references to another DocExpress command. It also can not contain references to the DocExpress variables that in themselves are resolved as the DocExpress "EXECUTE" or "INCLUDE" commands. For example: when DATE is defined as:@EXECUTE($DATE_GET)and DATE_GET is defined as@EXECUTE(date)The resolution of DATE would produce:@EXECUTE(@EXECUTE(date)) which is illegal.FILENAME="01038.unk" ORIGFILE="pics/ext_if_diag.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"n A DocExpress command can be placed directly in a document template. When used in a template, a command must start and end with the double percent signs (%%) as shown in the following figure. FILENAME="01039.unk" ORIGFILE="pics/tmpl_comm.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"Note: Commands that contain quotes may not be processed properly. If quotes are necessary, substitute the command with a variable and define the variable with the variable editor. Also, you must take care that special characters are not included in the command string as this will prevent proper interpretation. TERM1="Variables" TERM2="editing Variable Set"ID="34176"Modifying the Variable SetIntroductionCayenne has taken great care to ensure that the information extracted from ObjectTeam is compliant with the appropriate standards. However, not all the needs of specific companies or its customers can be anticipated. Therefore, you may wish to customize the document template to extract different information. This can be accomplished by modifying variable definitions or adding new variables and commands. The definitions of all variables associated with a document can be edited, and new variables defined using the DocExpress Variable Editor. How to edit the variable setΣ To edit the variable set:1 Select Options | Variables | Edit. The Edit Variables window appears.FILENAME="01040.unk" ORIGFILE="pics/editvars.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"Note: If a Variable Set does not exist, the user is requested to load the variables before proceeding.FILENAME="01041.unk" ORIGFILE="pics/novars.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"Adding a variableΣ To add a variable:1 Select <New Variable> in the scroll list. 2 Enter the new variable name in the Name field.3 Enter a value in the Value field, and an optional description. The value of the variable can contain other DocExpress variables. 4 Press the Add button at the bottom of the window. Remember, variables must also be added to the document template in the appropriate sections. Note: Always follow the syntax and definition rules for variables in REFID="16681" TYPE="XREF-TEXTCOPY"Customizing Content on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6. Changing a variableΣ To change a variable's name, value, or description:1 Select the variable in the scroll list.Its attributes are displayed in their respective fields in the Variable Editor window. 2 Modify these fields as necessary. 3 When all modifications have been completed, press the Change button at the bottom of the "Edit Variables" window. Note: Changes to the variable's name creates a new variable. Deleting a variableTo delete a variable along with its value and description, select the variable name and press the Delete button at the bottom of the window. Note: All variables that have been added, or deleted with the Variable Editor should have their references in the document template added or deleted accordingly. Otherwise, DocExpress will not use the definition or it will issue a warning that it can not resolve the variables. For guidance on modifying variables, press the Help button at the bottom of the Variable Editor window. DocExpress will display the Variable Editor help information.FILENAME="01042.unk" ORIGFILE="pics/helpvars.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"Modifying project specific variablesBefore you can build a document, you must modify all project specific variables. These may include the following: n Company namen Agency namen Company addressn System namen Program nameMost importantly, you must tell DocExpress the location of your engineering data. The default location points to engineering data provided with DocExpress and loaded during installation. The specific variable which refers to the engineering data is dependent on the document template loaded but always ends with the word GROUP (e.g., SYSTEM_GROUP, CSCI_GROUP, PROGRAM_GROUP, etc.). These variables are used as parameters to the DocExpress utilities. By changing their values to point to your project information (e.g., model, project, etc.), a document will be produced that contains your engineering data. Modifying other parameters of DocExpress utilities can change what and how information is extracted from the engineering repository and how it is formatted. For details of the DocExpress utilities and their options, refer to the DocExpress Utilities Guide.TERM1="Including Files" TERM2="FrameMaker"TERM1="Files" TERM2="including" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="including files"ID="10670"Including FrameMaker FilesIncluding FrameMaker filesThe Mapping Information in a FrameMaker template may also be defined as another FrameMaker file. During the Build process, DocExpress will include the specified file into the generated document. To include a FrameMaker file, define a variable using the DocExpress Include command and the full UNIX path for the file.. For example, the file rtm.doc located in the directory /home may be included as follows. 1 Insert a bp.command paragraph in the desired location in the FrameMaker template. 2 Create a variable such as %%$RTM%% in the paragraph created in step 1. 3 Define the variable using the DocExpress Variable Editor as follows: @INCLUDE(/home/rtm.doc). 4 Build the template with DocExpress. TERM1="Including Files" TERM2="Interleaf"TERM1="Files" TERM2="including" TERM3="Interleaf"TERM1="Interleaf" TERM2="including files"ID="27418"Including Interleaf FilesIncluding Interleaf filesThe Mapping Information in an Interleaf template may also be defined as another Interleaf file. During the Build process, DocExpress will include the specified file into the generated document. To include a Interleaf file, define a variable using the DocExpress Include command and the full UNIX path for the file. For example, the file rtm.doc located in the directory /home/desktop may be included as follows. 1 Insert a bp.command component in the desired location in the Interleaf template. 2 Create a variable in the component created in step 1. For example, %%$RTM%%. 3 Define the variable using the DocExpress Variable Editor as follows: @INCLUDE(/home/desktop/rtm.doc). 4 Open the rtm.doc file in Interleaf and purge all extra master components. Note: Interleaf files which contain extra master components will cause Interleaf to crash when included by DocExpress.5 Save the rtm.doc file as Interleaf ASCII. Note: Interleaf files which contain extra master components will cause Interleaf to crash when included by DocExpress.6 Build the template with DocExpress.Including Microsoft Word FilesTERM1="Including Files" TERM2="Microsoft Word"TERM1="Files" TERM2="including" TERM3="Microsoft Word"TERM1="Microsoft Word" TERM2="including files"Including Microsoft Word FilesID="7ke6na2pola"The Mapping Information in a Microsoft Word template may also be defined as another Microsoft Word document. During the Build process, DocExpress will include the specified document into the generated document. To include a Microsoft Word document, define a variable using the DocExpress Include command and the full directory path for the file.. For example, the file rtm.doc located in the directory c:\users\default may be included as follows. 1 Insert a bp.command paragraph in the desired location in the Microsoft Word template. 2 Create a variable such as %%$RTM%% in the paragraph created in step 1. 3 Define the variable using the DocExpress Variable Editor as follows: @INCLUDE(c:\users\default\rtm.doc). 4 Build the template with DocExpress. ID="21378"Customizing for Standards and Document TemplatesIntroductionDocExpress provides document templates for a wide variety of military, commercial, and international standards. These templates have been developed to comply with the appropriate standards structure, format, and content requirements. However, you may wish to modify these templates, or add new templates and standards. TERM1="Customization" TERM2="document templates" TERM3="supplied with DocEXPRESS"Modifying an Existing Document TemplateModifications to an existing Document Template, including its structure, format, and content, may be performed using your document publishing system in conjunction with the DocExpress Variable Editor. The modifications may be performed on a personal copy of the template after using the DocExpress Load capability or directly on the default templates provided in the DocExpress directories. The customized templates may be placed in a single directory and accessed via the DocExpress user interface by selecting the Other menu option on the Standards menu shown in the following figure. FILENAME="01043.unk" ORIGFILE="pics/other.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"The default directory for this menu option is $HOME. For details on changing the default directory and other configuration options, see REFID="11998" TYPE="XREF-TEXTCOPY"Chapter 5, Building Documents in DocExpress.Alternatively, you may prefer access to tailored document templates directly from the standards and templates list. For more information on this alternative, see REFID="34949" TYPE="XREF-TEXTCOPY"Adding Support for Other Standards on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19. TERM1="Customization" TERM2="document templates" TERM3="adding a template"ID="6T9xk200stei"Adding a Template to an Existing StandardIntroductionDocExpress provides all of the required document templates for each of the standards it supports. However, you may wish to add custom document templates to those provided. How to add user-defined document templatesΣ To add a user-defined document template:1 Create the Document Template by modifying the predefined document templates provided with DocExpress or creating one from scratch in your document publishing system. 2 Create a directory for the new document template in $ATAHOME/doc/templates/dps/standard, where dps is one of ileaf, frame or msword and standard is one of:- 2167A (DOD-STD-2167A)- 490A (MIL-STD-490A)- IEEE (ANSI/IEEE)- ISO (ISO 9000-3/6592)- 498 (MIL-STD-498)3 Copy the parts of the document template created in step 1 into the directory created in step 2.4 Create Variable Sets for the new document template. A Variable Set is added to DocExpress for each development method that provides information for the document. Adding a Variable Set is not necessary, if ObjectTeam provides no information for a particular document. DocExpress provides a default Variable Set for every document which is not mapped to a development method. The default Variable Set is $ATAHOME/doc/var_files/general/.var_file. 5 Create a .var_file in $ATAHOME/var_files/ot/standard, where standard is on of the above standards. An example of a .var_file for the Software Requirements Specification (SRS) of DOD-STD-2167A is shown below. ################################################################################# ## ENGINEERING DATA INFORMATION ## List all capabilitiesCAPABILITIES_LIST_GET=@EXECUTE($TOOL_DIR/bin/capability_list -model $CSCI_GROUP -type dfd -object 0 -dp_type $DP_TYPE -header -c $CONFIG_FILE > $TEMP_DIR/capabilities_list.$DOC_SUFFIX1)=Command to generate a list of the CSCI's capabilitiesCAPABILITIES_LIST_PUT=@INCLUDE($TEMP_DIR/capabilities_list.$DOC_SUFFIX1)=Command to include a list of the CSCI's capabilities# List all external entitiesEXTERNALS_LIST_GET=@EXECUTE($TOOL_DIR/bin/term_list -model $CSCI_GROUP -header -dp_type $DP_TYPE -c $CONFIG_FILE > $TEMP_DIR/term_list.$DOC_SUFFIX1)=Command to generate a list of external entitiesEXTERNALS_LIST_PUT=@INCLUDE($TEMP_DIR/term_list.$DOC_SUFFIX1)=Command to include a list of external entities# List all external interfacesEXT_INTERFACES_GET=@EXECUTE($TOOL_DIR/bin/external_io -model $CSCI_GROUP -type dfd -object Context-Diagram -list -header -dp_type $DP_TYPE -c $CONFIG_FILE > $TEMP_DIR/ext_interfaces.$DOC_SUFFIX1)=Command to generate a list of external interfacesEXT_INTERFACES_PUT=@INCLUDE($TEMP_DIR/ext_interfaces.$DOC_SUFFIX1)=Command to include a list of external interfaces# Diagram of external entities and interfacesEXT_IF_DIAG_GET=@EXECUTE($TOOL_DIR/$DP_TYPE/picture.sh dfd $CSCI_GROUP Context-Diagram $DOC_NAME header "External Interface Diagram" $TEMP_DIR $CONFIG_FILE > $TEMP_DIR/ext_if_diag.$DOC_SUFFIX1)=Command to extract a figure depicting the external interfacesEXT_IF_DIAG_PUT=@INCLUDE($TEMP_DIR/ext_if_diag.$DOC_SUFFIX1)=Command to include a figure depicting the external interfaces# Diagrams of capabilities and their relationshipsCAPABILITIES_GET=@EXECUTE($TOOL_DIR/bin/parse_dfd -model $CSCI_GROUP -object 0 -sl 2 -current_section -header -dp_type $DP_TYPE -build_dir $TEMP_DIR -c $CONFIG_FILE > $TEMP_DIR/capabilities.$DOC_SUFFIX1)=Command to extract diagrams depicting capabilities and their relationshipsCAPABILITIES_PUT=@INCLUDE($TEMP_DIR/capabilities.$DOC_SUFFIX1)=Command to include diagrams depicting capabilities and their relationshipsThe example .var_file supports Structured Analysis with Cayenne teamwork. The string on the left side of the left most equal sign (=) is a variable used in the document template (e.g., EXT_IF_DIAG_GET). The string between the equal sign (=)s is the definition of the variable (e.g., @EXECUTE($TOOL_DIR/$DP_TYPE/picture.sh ... $TEMP_DIR/ext_if_diag.$DOC_SUFFIX). The string on the right side of the right most equal sign (=) is optional and is the description of the variable (e.g., Command to extract a figure depicting the external interfaces). The right most equal sign (=) must be present irrespective of whether a description is present or not. Comment lines start with a pound sign ( # ). + Need an example for ObjectTeam6 Create a .template_type file in the new document template directory created in step 2 and step 3.7 An example of the .template_type file for the SRS of DOD-STD-2167A is shown below. #####################################################STANDARD=2167ADOCUMENT_TYPE=SRSThe string on the left side of the equal sign (=) is a keyword (e.g., DOCUMENT_TYPE). The string on the right side of the equal sign is used for the names of the directories for the standard and the document template (e.g., SRS). These must match the directory structure used for the Variable Sets created in step 4. and associated with this document template. Comment lines start with a pound sign ( # ).8 Modify the DocExpress menus as appropriate to add the new document template to the Document Template menu selections for the desired standard. See REFID="31424" TYPE="XREF-TEXTCOPY"Modifying the Document Templates List on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14.TERM1="Customization" TERM2="standards" TERM3="adding a standard"ID="rIBxk9dstei"Adding Support for Other StandardsIntroductionDocExpress provides document templates for a wide variety of military, commercial, and international standards. However, you may wish to add other standards to those supported by DocExpress such as company standards. How to add user-defined standardsΣ To add a user-defined standard:1 Create a directory for the new standard in $ATAHOME/doc/templates/dps. Where dps is one of ileaf, frame or msword. 2 For each document template of the new standard, follow the procedure in the section, REFID="6T9xk200stei" TYPE="XREF-TEXTCOPY"Adding a Template to an Existing Standard on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22.3 In the directory created in step 1, create a templates_list. An example of the templates_list file for DOD-STD-2167A is shown below. # CRISD - Computer Resources Integrated Support Document=CRISDCSOM - Computer System Operator's Manual=CSOMFSM - Firmware Support Manual=FSMIDD - Interface Design Document=IDDIRS - Interface Requirements Specification=IRSSDD - Software Design Document=SDDSDP - Software Development Plan=SDPSPM - Software Programmer's Manual=SPMSPS - Software Product Specification=SPSSRS - Software Requirements Specification=SRSSSDD - System/Segment Design Document=SSDDSSS - System/Segment Specification=SSSSTD - Software Test Description=STDSTP - Software Test Plan=STPSTR - Software Test Report=STRSUM - Software User's Manual=SUMVDD - Version Description Document=VDD#The string on the left side of the equal sign (=) is used for the menu selection (e.g., SRS - Software Requirements Specification). The string on the right side of the equal sign is used for the name of the directory which contains the parts of the document templates (e.g., SRS). An entry for each new document template should be included in this file.4 Modify the DocExpress menus as appropriate to add the new standard to the Standards Menu selections. SeeREFID="34375" TYPE="XREF-TEXTCOPY"Modifying the Standards Menu on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13.TERM1="Templates" TERM2="FrameMaker"TERM1="Templates" TERM2="FrameBuilder"ID="31242"FrameMaker TemplatesIntroductionThis section describes how the structure, format, and content requirements of the standards have been implemented in FrameMaker. This section lists all document parts, and the paragraph tags available in each part.Required paragraphsMany of the DocExpress utilities depend on the existence of specific paragraphs. For proper operation of DocExpress, each document template must contain the following paragraphs:n DDETitlen dden figuren list_eln list_startn paragraphn para_monon all section paragraphs (e.g., section.level_1, etc.)n tablen textNote: If definitions of these paragraphs are deleted from the DocExpress document templates, the default definition for a paragraph in the document publishing system will be used. If you are developing your own templates, you must define the above paragraphs for proper operation and formatting. FrameMaker document partsEach template directory consists of the following document part files:COLS="2"COLNAME="1" COLWIDTH="120p"COLNAME="2" COLWIDTH="328p"COLNAME="1" VALIGN="TOP" MOREROWS="0"File NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document PartCOLNAME="1" VALIGN="TOP" MOREROWS="0"a_tp.docCOLNAME="2" VALIGN="TOP" MOREROWS="0"Title PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"e_doc.docCOLNAME="2" VALIGN="TOP" MOREROWS="0"Main DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"e_docLOF.docCOLNAME="2" VALIGN="TOP" MOREROWS="0"List of FiguresCOLNAME="1" VALIGN="TOP" MOREROWS="0"e_docLOT.docCOLNAME="2" VALIGN="TOP" MOREROWS="0"List of TablesCOLNAME="1" VALIGN="TOP" MOREROWS="0"e_docTOC.docCOLNAME="2" VALIGN="TOP" MOREROWS="0"Table of ContentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"g_app.docCOLNAME="2" VALIGN="TOP" MOREROWS="0"AppendixCOLNAME="1" VALIGN="TOP" MOREROWS="0"g_appLOA.docCOLNAME="2" VALIGN="TOP" MOREROWS="0"List of AppendixesThe letter at the beginning of each file name determines the order in which the file will be displayed in the DocExpress Build window and the FrameMaker's Open Document window.Title PageTitle pageThe Title Page (a_tp.doc) identifies the document, system, contractor, and customer as well as other information relevant to the identification of the document such as its Document Control Number and version.Main DocumentIntroductionThe Main Document (e_doc.doc) contains the bulk of document's information. This file may be split into several files if desired. The following tables group the paragraphs available in the Main Document into paragraphs for boiler plate text, document guidance, section levels, and miscellaneous. Boiler plate paragraph tagsThe following table identifies and describes the boiler plate paragraphs defined in the Main Document. COLS="2"COLNAME="1" COLWIDTH="129p"COLNAME="2" COLWIDTH="319p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"describes interface, and data element attributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.bulletCOLNAME="2" VALIGN="TOP" MOREROWS="0"bulleted listsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.commandCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocExpress variables and commandsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.glossaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"glossary entriesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.headCOLNAME="2" VALIGN="TOP" MOREROWS="0"headingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.subheadCOLNAME="2" VALIGN="TOP" MOREROWS="0"subheadingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textDocument guidance paragraph tagsThe following table identifies and describes the document guidance paragraphs defined in the Main Document. COLS="2"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="300p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textSection levels paragraph tagsThe following table identifies and describes the paragraphs for section titles defined in the Main Document. COLS="2"COLNAME="1" COLWIDTH="147p"COLNAME="2" COLWIDTH="301p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 1, 3, 7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 1.3, 3.1, 7.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 1.3.1, 3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_4COLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 1.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_5COLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 1.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_6COLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 1.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_7COLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 1.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_8COLNAME="2" VALIGN="TOP" MOREROWS="0"eight level section title (e.g., 1.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_9COLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 1.3.1.7.2.4.5.3.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_10COLNAME="2" VALIGN="TOP" MOREROWS="0"tenth level section title (e.g., 1.3.1.7.2.4.5.3.1.8)Miscellaneous paragraph tagsThe following table identifies and describes the miscellaneous paragraphs defined in the Main Document. COLS="2"COLNAME="1" COLWIDTH="138p"COLNAME="2" COLWIDTH="310p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCNCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document control numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"ddeCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DDETitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"paraCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono-spaced paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"Rev_IndCOLNAME="2" VALIGN="TOP" MOREROWS="0"Revision IndicatorCOLNAME="1" VALIGN="TOP" MOREROWS="0"textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textFront MatterInroductionThe front matter of a document consists of the following parts:n Table of Contents (e_docTOC.doc)n List of Figures (e_docLOF.doc)n List of Tables (e_docLOT.doc)n List of Appendixes (g_appLOA.doc)This section describes the paragraphs in each of these documents.Table of ContentsThe Table of Contents (e_docTOC.doc) contains entries for each section title from the Main Document and lists the page number where it is located. Each paragraph in the Table of Contents template part defines the formatting for an associated paragraph in the Main Document (e_doc.doc). For example, section.level_4TOC in the Table of Contents template part defines the formatting for the section.level_4 paragraph in the Main Document. COLS="2"COLNAME="1" COLWIDTH="154p"COLNAME="2" COLWIDTH="292p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 1, 3, 7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 1.3, 3.1, 7.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 1.3.1, 3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_4TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 1.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_5TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 1.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_6TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 1.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_7TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 1.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_8TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"eight level section title (e.g., 1.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_9TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 1.3.1.7.2.4.5.3.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_10TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"tenth level section title (e.g., 1.3.1.7.2.4.5.3.1.8)List of FiguresThe List of Figures (e_docLOF.doc) contains entries for each figure title from the Main Document and lists the page number where it is located. The figureLOF paragraph defines the formatting for the figure paragraph in the Main Document. COLS="2"COLNAME="1" COLWIDTH="186p"COLNAME="2" COLWIDTH="261p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"figureLOFCOLNAME="2" VALIGN="TOP" MOREROWS="0"Figure title for graphics. List of TablesThe List of Tables (e_docLOT.doc) contains entries for each table from the Main Document and lists the page number where it is located. The tableLOT paragraph defines the formatting for the table paragraph in the Main Document. COLS="2"COLNAME="1" COLWIDTH="196p"COLNAME="2" COLWIDTH="253p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"tableLOTCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables. List of AppendixesThe List of Appendixes (g_appLOA.doc) contains entries for each section title from the appendix document and lists the page number where it is located. Each paragraph in the List of Appendixes template part defines the formatting for an associated paragraph in the Appendix (g_app.doc). For example, section.level_4.appTOC in the Table of Contents template part defines the formatting for the section.level_4 .app paragraph in the Appendix. COLS="2"COLNAME="1" COLWIDTH="145p"COLNAME="2" COLWIDTH="301p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.l1.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 10, 30, 70)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l2.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 10.3, 30.1, 70.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l3.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 10.3.1, 30.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l4.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 10.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l5.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 10.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l6.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 10.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l7.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 10.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l8.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"eight level section title (e.g., 10.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l9.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 10.3.1.7.2.4.5.3.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l10.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"tenth level section title (e.g., 10.3.1.7.2.4.5.3.1.8)AppendixIntroductionAppendixes may contain supplementary information for the main document. All DocExpress templates contain at least one appendix. Other appendixes may be added to a DocExpress templates by copying the file supplied (g_app.doc) and copying its List of Appendixes (g_appLOA.doc). The following tables group the paragraphs available in the Appendix into paragraphs for boiler plate text, document guidance, section levels, and miscellaneous. Boiler plate paragraph tagsThe following table identifies and describes the boiler plate paragraphs defined in the Appendix. COLS="2"COLNAME="1" COLWIDTH="121p"COLNAME="2" COLWIDTH="327p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"describes interface, and data element attributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.bulletCOLNAME="2" VALIGN="TOP" MOREROWS="0"bulleted listsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.commandCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocExpress variables and commandsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.glossaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"glossary entriesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.headCOLNAME="2" VALIGN="TOP" MOREROWS="0"headingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.subheadCOLNAME="2" VALIGN="TOP" MOREROWS="0"subheadingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textDocument guidance paragraph tagsThe following table identifies and describes the document guidance paragraphs defined in the Appendix. COLS="2"COLNAME="1" COLWIDTH="153p"COLNAME="2" COLWIDTH="294p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textSection levels paragraph tagsThe following table identifies and describes the paragraphs for section titles defined in the Appendix. COLS="2"COLNAME="1" COLWIDTH="120p"COLNAME="2" COLWIDTH="327p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.l1.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 10, 30, 70)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l2.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 10.3, 30.1, 70.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l3.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 10.3.1, 30.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l4.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 10.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l5.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 10.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l6.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 10.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l7.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 10.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l8.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"eight level section title (e.g., 10.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l9.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 10.3.1.7.2.4.5.3.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l10.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"tenth level section title (e.g., 10.3.1.7.2.4.5.3.1.8)Miscellaneous paragraph tagsThe following table identifies and describes the miscellaneous paragraphs defined in the Appendix. COLS="2"COLNAME="1" COLWIDTH="117p"COLNAME="2" COLWIDTH="334p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Paragraph TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCNCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document control numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"ddeCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DDETitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"paraCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono-spaced paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"Rev_IndCOLNAME="2" VALIGN="TOP" MOREROWS="0"Revision IndicatorCOLNAME="1" VALIGN="TOP" MOREROWS="0"textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textTERM1="Templates" TERM2="Interleaf"ID="33899"Interleaf TemplatesIntroductionThis section describes how the structure, format, and content requirements of the standards have been implemented in Interleaf. This section lists all document parts, and the components available in each part.Note: In order that DocExpress may process the document parts, they must be saved in Interleaf ASCII. Note: DocExpress makes extensive use of the Interleaf capabilities such as books and catalogs. To maximize the use of DocExpress, your license for Interleaf should be authorized for these capabilities. Required componentsMany of the DocExpress utilities depend on the existence of specific components. For proper operation of DocExpress, each document template must contain the following components:n DDETitlen dden figuren list_eln list_startn paragraphn para_monon all section components (e.g., section.level_1, etc.)n tablen textNote: If definitions of these components are deleted from the DocExpress document templates, the default definition for a component in the document publishing system will be used. If you are developing your own templates, you must define the above components for proper operation and formatting. Template partsEach document template is contained within a book and consists of several parts represented by documents within the book. Each document part and its corresponding document name is shown in the following table.COLS="2"COLNAME="1" COLWIDTH="174p"COLNAME="2" COLWIDTH="274p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Template PartCOLNAME="2" VALIGN="TOP" MOREROWS="0"File NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"Title PageCOLNAME="2" VALIGN="TOP" MOREROWS="0"a_tp.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"Table of Contents, List of Figures, List of Tables, and List of Appendixes CatalogCOLNAME="2" VALIGN="TOP" MOREROWS="0"b_toc_lof_lot_loa-template.styCOLNAME="1" VALIGN="TOP" MOREROWS="0"Table of Contents, List of Figures, List of Tables, and List of AppendixesCOLNAME="2" VALIGN="TOP" MOREROWS="0"c_toc_lof_lot_loa-template.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main Document CatalogCOLNAME="2" VALIGN="TOP" MOREROWS="0"d_doc-template.styCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main DocumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"e_doc.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"Appendix CatalogCOLNAME="2" VALIGN="TOP" MOREROWS="0"f_app-template.styCOLNAME="1" VALIGN="TOP" MOREROWS="0"AppendixCOLNAME="2" VALIGN="TOP" MOREROWS="0"g_app.docThe letter at the beginning of each file name determines the order in which the file will be displayed in the DocExpress Build window and how the icons are arranged within an Interleaf book. The Interleaf catalogs (i.e., all files with the sty file extension) are not displayed by DocExpress.The contents of the document template for the Software Requirements Specification (SRS) of DOD-STD-2167A is shown in the following figure. FILENAME="01044.tif" ORIGSEQ="11" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"Title PageIntroductionThe Title Page (a_tp.doc) identifies the document, system, contractor, and customer as well as other information relevant to the identification of the document such as its Document Control Number and version. TOC, LOF, LOT, LOA CatalogIntroductionThis Interleaf catalog contains the master definitions for all the components for the Table of Contents, List of Figures, List of Tables, and List of Appendixes. These components are identified and described in the following table. The catalog controls the formatting of the Table of Contents, List of Figures, List of Tables, and List of Appendixes file (c_toc_lof_lot_loa-template.doc). ComponentsCOLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="369p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 1, 3, 7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 1.3, 3.1, 7.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 1.3.1, 3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_4TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 1.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_5TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 1.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_6TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 1.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_7TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 1.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_8TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"eight level section title (e.g., 1.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_9TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 1.3.1.7.2.4.5.3.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_10TOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"tenth level section title (e.g., 1.3.1.7.2.4.5.3.1.8)COLNAME="1" VALIGN="TOP" MOREROWS="0"tableLOTCOLNAME="2" VALIGN="TOP" MOREROWS="0"Table title for tables. COLNAME="1" VALIGN="TOP" MOREROWS="0"figureLOFCOLNAME="2" VALIGN="TOP" MOREROWS="0"Figure title for graphics. COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l1.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title for appendix (e.g., 10., 30., 70.)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l2.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title for appendix (e.g., 10.3, 30.1, 70.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l3.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title for appendix (e.g., 10.3.1, 30.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l4.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title for appendix (e.g., 10.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l5.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title for appendix (e.g., 10.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l6.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title for appendix (e.g., 10.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l7.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title for appendix (e.g., 10.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l8.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"eigth level section title for appendix (e.g., 10.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l9.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title for appendix (e.g., 10.3.1.7.2.4.5.3.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l10.appTOCCOLNAME="2" VALIGN="TOP" MOREROWS="0"tenth level section title for appendix e.(g., 10.3.1.7.2.4.5.3.1.8)Each component in the catalog defines the formatting for an associated component in the Main Document (e_doc.doc) and the Appendix (g_app.doc). For example, figureLOF in the catalog defines the formatting for the figure component in the Main Document or Appendix. TOC, LOF, LOT, LOAThe Table of Contents, List of Figures, List of Tables, and List of Appendixes file (c_toc_lof_lot_loa-template.doc) contains entries for each section, figure title, and table title from the Main Document and Appendix. The page number for the location of each component is listed for each entry. This information constitutes the front matter of the document. Main Document CatalogIntroductionThe Main Document Interleaf catalog (d_doc-template.doc) contains the master definitions for all components used in the Main Document (e_doc.doc). The following tables group the components available in the Main Document catalog into components for boiler plate text, document guidance, section levels, and miscellaneous. Boiler Plate ComponentsThe following table identifies and describes the boiler plate components defined in the Main Document catalog. COLS="2"COLNAME="1" COLWIDTH="109p"COLNAME="2" COLWIDTH="339p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"describes interface, and data element attributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.bulletCOLNAME="2" VALIGN="TOP" MOREROWS="0"bulleted listsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.commandCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocExpress variables and commandsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.glossaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"glossary entriesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.headCOLNAME="2" VALIGN="TOP" MOREROWS="0"headingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.subheadCOLNAME="2" VALIGN="TOP" MOREROWS="0"subheadingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textDocument Guidance ComponentsThe following table identifies and describes the document guidance components defined in the Main Document catalog. COLS="2"COLNAME="1" COLWIDTH="169p"COLNAME="2" COLWIDTH="279p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textSection Levels ComponentsThe following table identifies and describes the components for section titles defined in the Main Document catalog. COLS="2"COLNAME="1" COLWIDTH="120p"COLNAME="2" COLWIDTH="328p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 1, 3, 7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 1.3, 3.1, 7.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 1.3.1, 3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_4COLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 1.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_5COLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 1.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_6COLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 1.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_7COLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 1.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_8COLNAME="2" VALIGN="TOP" MOREROWS="0"eight level section title (e.g., 1.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_9COLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 1.3.1.7.2.4.5.3.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_10COLNAME="2" VALIGN="TOP" MOREROWS="0"tenth level section title (e.g., 1.3.1.7.2.4.5.3.1.8)Miscellaneous ComponentsThe following table identifies and describes the miscellaneous components defined in the Main Document catalog. COLS="2"COLNAME="1" COLWIDTH="97p"COLNAME="2" COLWIDTH="351p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCNCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document control numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"ddeCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DDETitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"paraCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono-spaced paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"Rev_IndCOLNAME="2" VALIGN="TOP" MOREROWS="0"Revision IndicatorCOLNAME="1" VALIGN="TOP" MOREROWS="0"textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textMain DocumentThe Main Document (e_doc.doc) contains the bulk of document's information. This file may be split into several files if desired. Appendix CatalogIntroductionThe Appendix Interleaf catalog (f_doc-template.doc) contains the master definitions for all components used in the Appendix (g_app.doc). The following tables group the components available in the Appendix catalog into components for boiler plate text, document guidance, section levels, and miscellaneous. Boiler Plate ComponentsThe following table identifies and describes the boiler plate components defined in the Appendix catalog. COLS="2"COLNAME="1" COLWIDTH="109p"COLNAME="2" COLWIDTH="339p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"describes interface, and data element attributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.bulletCOLNAME="2" VALIGN="TOP" MOREROWS="0"bulleted listsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.commandCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocExpress variables and commandsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.glossaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"glossary entriesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.headCOLNAME="2" VALIGN="TOP" MOREROWS="0"headingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.subheadCOLNAME="2" VALIGN="TOP" MOREROWS="0"subheadingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textDocument Guidance ComponentsThe following table identifies and describes the document guidance components defined in the Appendix. COLS="2"COLNAME="1" COLWIDTH="169p"COLNAME="2" COLWIDTH="279p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textSection Levels ComponentsThe following table identifies and describes the components for section titles defined in the Appendix. COLS="2"COLNAME="1" COLWIDTH="114p"COLNAME="2" COLWIDTH="334p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.l1.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 10, 30, 70)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l2.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 10.3, 30.1, 70.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l3.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 10.3.1, 30.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l4.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 10.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l5.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 10.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l6.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 10.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l7.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 10.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l8.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"eigth level section title (e.g., 10.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l9.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 10.3.1.7.2.4.5.3.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"section.l10.appCOLNAME="2" VALIGN="TOP" MOREROWS="0"tenth level section title (e.g., 10.3.1.7.2.4.5.3.1.8)Miscellaneous ComponentsThe following table identifies and describes the miscellaneous components defined in the Main document. COLS="2"COLNAME="1" COLWIDTH="97p"COLNAME="2" COLWIDTH="351p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Component's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCNCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document control numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"ddeCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DDETitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"paraCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono-spaced paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"Rev_IndCOLNAME="2" VALIGN="TOP" MOREROWS="0"Revision IndicatorCOLNAME="1" VALIGN="TOP" MOREROWS="0"textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textAppendixAppendixes may contain supplementary information for the Main Document. All DocExpress templates contain at least one appendix. Other appendixes may be added to a DocExpress templates by copying the file supplied (g_app.doc). TERM1="Templates" TERM2="Microsoft Word"ID="11898"Microsoft Word TemplatesTemplate PartsIn this section, the purpose of each part of a DocExpress template for Microsoft Word is described and the styles available in each part of a template are identified and described. Each template directory consists of the template parts listed in the following table. and their corresponding files. The letter at the beginning of each file name determines the order in which the file will be displayed in the DocExpress Build window and how they are displayed in Microsoft Word's Open Document window. COLS="2"COLNAME="1" COLWIDTH="267p"COLNAME="2" COLWIDTH="181p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Template PartCOLNAME="2" VALIGN="TOP" MOREROWS="0"File NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"Title PageCOLNAME="2" VALIGN="TOP" MOREROWS="0"a_tp.rtfCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main DocumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"e_doc.rtfCOLNAME="1" VALIGN="TOP" MOREROWS="0"AppendixCOLNAME="2" VALIGN="TOP" MOREROWS="0"g_app.rtfThe contents of the document template directory for the Software Requirements Specification (SRS) of MIL-STD-498 are shown in the following figure.FILENAME="01045.tif" ORIGSEQ="12" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_tmpl.fm5.mif"Title pageThe Title Page (a_tp.rtf) identifies the document, system, contractor, and customer as well as other information relevant to the identification of the document such as its Document Control Number and version. Main DocumentIntroductionThe Main Document (e_doc.rtf) contains the bulk of document's information. This file may be split into several files if desired. The following tables group the styles available in the Main Document into styles for boiler plate text, document guidance, section levels, and miscellaneous. Boiler Plate StylesThe following table identifies the boiler plate styles defined in the Main Document and describes their use. COLS="2"COLNAME="1" COLWIDTH="109p"COLNAME="2" COLWIDTH="339p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Style's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"describes interface, and data element attributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.bulletCOLNAME="2" VALIGN="TOP" MOREROWS="0"bulleted listsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.commandCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocExpress variables and commandsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.glossaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"glossary entriesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.subheadCOLNAME="2" VALIGN="TOP" MOREROWS="0"subheadingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textDocument Guidance StylesThe following table identifies and describes the document guidance styles defined in the Main Document. COLS="2"COLNAME="1" COLWIDTH="169p"COLNAME="2" COLWIDTH="279p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Style's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textSection Levels StylesThe following table identifies and describes the paragraphs for section titles defined in the Main Document. COLS="2"COLNAME="1" COLWIDTH="93p"COLNAME="2" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Style's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 1, 3, 7)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 1.3, 3.1, 7.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 1.3.1, 3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 4COLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 1.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 5COLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 1.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 6COLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 1.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 7COLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 1.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 8COLNAME="2" VALIGN="TOP" MOREROWS="0"eight level section title (e.g., 1.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 9COLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 1.3.1.7.2.4.5.3.1)Miscellaneous StylesThe following table identifies and describes the miscellaneous paragraphs defined in the Main Document. COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="358p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Style's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCNCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document control numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"ddeCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DDETitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"paraCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono-spaced paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"Rev_IndCOLNAME="2" VALIGN="TOP" MOREROWS="0"Revision IndicatorCOLNAME="1" VALIGN="TOP" MOREROWS="0"textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textFront MatterIntroductionThe front matter of a document consists of the Table of Contents, List of Figures, List of Tables, and List of Appendixes. In Microsoft Word the Table of Contents, List of Figures, and List of Tables are located inside of the Main Document (e_doc.rtf). The List of Appendixes is located inside the Appendix document (g_app.rtf).Table of ContentsThe Table of Contents contains entries for each section title from the Main Document and lists the page number where it is located. List of FiguresThe List of Figures contains entries for each figure title from the Main Document and lists the page number where it is located. List of TablesThe List of Tables contains entries for each table from the Main Document and lists the page number where it is located. List of AppendixesThe List of Appendixes contains entries for each section title from the appendix document and lists the page number where it is located. AppendixIntroductionAppendixes may contain supplementary information for the main document. All DocExpress templates contain at least one appendix. Other appendixes may be added to a DocExpress templates by copying the file supplied (g_app.rtf). The following tables group the paragraphs available in the Appendix into paragraphs for boiler plate text, document guidance, section levels, and miscellaneous. Boiler Plate StylesThe following table identifies and describes the boiler plate paragraphs defined in the Appendix document. COLS="2"COLNAME="1" COLWIDTH="109p"COLNAME="2" COLWIDTH="339p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Style's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.attributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"describes interface, and data element attributesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.bulletCOLNAME="2" VALIGN="TOP" MOREROWS="0"bulleted listsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.commandCOLNAME="2" VALIGN="TOP" MOREROWS="0"DocExpress variables and commandsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.glossaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"glossary entriesCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.list.l2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.subheadCOLNAME="2" VALIGN="TOP" MOREROWS="0"subheadingsCOLNAME="1" VALIGN="TOP" MOREROWS="0"bp.textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textDocument Guidance StylesThe following table identifies and describes the document guidance paragraphs defined in the Appendix. COLS="2"COLNAME="1" COLWIDTH="169p"COLNAME="2" COLWIDTH="279p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Style's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list1_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the first level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list2_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of the second level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_list3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level list elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"guide.DID_textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textSection Levels StylesThe following table identifies and describes the paragraphs for section titles defined in the Appendix. COLS="2"COLNAME="1" COLWIDTH="93p"COLNAME="2" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Style's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 1COLNAME="2" VALIGN="TOP" MOREROWS="0"first level section title (e.g., 1, 3, 7)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 2COLNAME="2" VALIGN="TOP" MOREROWS="0"second level section title (e.g., 1.3, 3.1, 7.1)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 3COLNAME="2" VALIGN="TOP" MOREROWS="0"third level section title (e.g., 1.3.1, 3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 4COLNAME="2" VALIGN="TOP" MOREROWS="0"fourth level section title (e.g., 1.3.1.7)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 5COLNAME="2" VALIGN="TOP" MOREROWS="0"fifth level section title (e.g., 1.3.1.7.2)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 6COLNAME="2" VALIGN="TOP" MOREROWS="0"sixth level section title (e.g., 1.3.1.7.2.4)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 7COLNAME="2" VALIGN="TOP" MOREROWS="0"seventh level section title (e.g., 1.3.1.7.2.4.5)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 8COLNAME="2" VALIGN="TOP" MOREROWS="0"eight level section title (e.g., 1.3.1.7.2.4.5.3)COLNAME="1" VALIGN="TOP" MOREROWS="0"Heading 9COLNAME="2" VALIGN="TOP" MOREROWS="0"ninth level section title (e.g., 1.3.1.7.2.4.5.3.1)Miscellaneous StylesThe following table identifies and describes the miscellaneous paragraphs defined in the Main document. COLS="2"COLNAME="1" COLWIDTH="90p"COLNAME="2" COLWIDTH="358p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StyleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Style's UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCNCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document control numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"ddeCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DDETitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"title for tables containing data dictionary elementsCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"start of list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"paraCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono-spaced paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"Rev_IndCOLNAME="2" VALIGN="TOP" MOREROWS="0"Revision IndicatorCOLNAME="1" VALIGN="TOP" MOREROWS="0"textCOLNAME="2" VALIGN="TOP" MOREROWS="0"textChapter 5 Building Documents in ID="11998"DocExpressTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress User GuideThe Document TemplateThe first task in the document generation process is to load a Document Template. A Document Template establishes the pattern for the completed document. It consists of a title page, table of contents, main document, and appendixes. When you load a template, DocExpress copies protected template files from the DocExpress directories into your workspace where you can modify them. You only need to perform this task once for each instance of a document. For more details on templates, see REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress Templates.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24657" TYPE="XREF-TEXTCOPY"Loading a Template 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12393" TYPE="XREF-TEXTCOPY"Loading The Variable Set 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20696" TYPE="XREF-TEXTCOPY"Developing the Document's Contents 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36526" TYPE="XREF-TEXTCOPY"Building the Document 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15186" TYPE="XREF-TEXTCOPY"Completing the Document 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'22COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39517" TYPE="XREF-TEXTCOPY"Rebuilding Documents 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26161" TYPE="XREF-TEXTCOPY"Using DocExpress with User-Supplied ObjectTeam Systems 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'27ID="24657"Loading a TemplateHow to load a templateΣ To load a template:1 Select the Load Button in the DocExpress main window. The Load window appears.FILENAME="01046.unk" ORIGFILE="pics/load.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"2 Select the Documentation System popup button and select your document publishing system from the list.3 Select the Standard popup button and select the desired standard.A list of available templates for this standard is displayed in the Template scroll list.Note: In addition to the templates provided by DocExpress, you can develop your own templates. See REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress Templates, for details on how to configure DocExpress to access customized or user-defined templates.4 Select the desired document template from the Template list.DocExpress automatically sets the destination and the name of the user-selected template based on the documentation system selected previously. This default location is displayed in the Document Destination field and can be modified.5 To load the specified template, click the Load button.6 To close the Load window, select File | Close.+ Can you specify multiple template settings using Save Curent Settings, then load them all at the same time?How to save the default valuesΣ To save the default values for the Document Publishing System and Standard selections, select Options | Save Current Settings.TERM1="Loading Variables"TERM1="Variables" TERM2="loading a Variable Set"ID="12393"Loading The Variable SetVariable setsBefore you build a document, you must define any variables used in the document template in a Variable Set. All the variables used in a predefined DocExpress template are available in Variable Sets via the DocExpress Build Window. The second task of the document generation process is to load a default Variable Set.Note: This task need only to be performed once for each document. Characteristics of a Variable SetA default Variable Set is uniquely identified by the following:n Standardn Document type to be builtn CASE tool or tools used to develop the engineering informationn Software development method used (e.g., the Object Modeling Technique). Standard and document typeThe standard and document type are defined by the document template you loaded previously, as described in REFID="24657" TYPE="XREF-TEXTCOPY"Loading a Template on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2Development methodDocExpress supports Unified Modeling Language and Object Modeling Technique.Loading the Variable SetHow to load the variable setΣ To load a variable set:1 Select the Build button in the main DocExpress window. The Build Window appears. FILENAME="01047.unk" ORIGFILE="pics/build1.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"2 Select your document publishing system in the Documentation System list. If you choose FrameMaker, your home directory will be displayed in the Document list box. If you choose Interleaf, the desktop directory is displayed.3 In the Document list box, navigate to the directory where the document template was loaded. Double-clicking on a directory displays the contents of the directory. A directory is identified by the forward slash ("/") after its name. To go up a directory level, double-click on "../" (Go up one directory level). Double-clicking on a file will cause it to be opened in the selected document publishing system. 4 In the Document list box, locate and double-click on the name of the template you loaded previously (e.g., SRS.boo). The parts of the document template are displayed. FILENAME="01048.unk" ORIGFILE="pics/build.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"5 Select ObjectTeam from the CASE Tool list and Unified Modeling Language from the Method list.6 Select Options | Variables | Load.The Variable Set now exists within your workspace and is associated with the document template. You can modify it as necessary. This topic is discussed in REFID="34176" TYPE="XREF-TEXTCOPY"Modifying the Variable Set on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14. How to save your default valuesΣ To save your default values for the Document Publishing System, CASE tool and method selections, select Options | Save Current Settings.Reloading a variable setGenerally, it is not necessary to reload a default Variable Set unless you have made some modifications.To reload a Variable Set, repeat the operations in this section. If a Variable Set already exists for the selected document template, it will be overwritten. You will be prompted by DocExpress for confirmation.FILENAME="01049.unk" ORIGFILE="pics/loadq.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"Note: A Variable Set should only be overwritten if a previously loaded Variable Set and its modifications are no longer desired. TERM1="Document" TERM2="content" TERM3="developing"ID="20696"Developing the Document's ContentsIntroductionThe third task of the document generation process is to Develop the Document's Contents. This task will consume the majority of the developer's effort. Developing a document's contents involves the use of at least the following tools: COLS="2"COLNAME="1" COLWIDTH="157p"COLNAME="2" COLWIDTH="289p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ToolCOLNAME="2" VALIGN="TOP" MOREROWS="0"UseCOLNAME="1" VALIGN="TOP" MOREROWS="0"Document publishing systemCOLNAME="2" VALIGN="TOP" MOREROWS="0"Provides the formatting and structuring capabilities and a WYSIWYG view of the document. COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeam repositoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contains the engineering information for the documentCOLNAME="1" VALIGN="TOP" MOREROWS="0"DocExpress COLNAME="2" VALIGN="TOP" MOREROWS="0"The engine that extracts, assembles, and formats the engineering information and places it into the appropriate sections of a document. In this sectionMost of the time developing the document's will be spent using the document publishing system and the CASE tool(s). This section will discuss the relationship of DocExpress to these other tools in the following topics: COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15476" TYPE="XREF-TEXTCOPY"The Default Document Template 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'9COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34176" TYPE="XREF-TEXTCOPY"Modifying the Variable Set 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14ID="15476"The Default Document TemplateViewing the contents of the templateInterleaf UsersBy default, the document was placed on your desktop by the DocExpress load operation performed in the previous section. If Interleaf is not running, start it at this time. If Interleaf is already running, you may need to update your view by selecting View | Rescan (Interleaf 5), or View | Update (Interleaf 6) so that it is visible. Σ To view the contents of the template in Interleaf, open the SRS book icon.FrameMaker UsersBy default, the document has been placed in your home directory. If FrameMaker is not already running, start it with the "-api" option as follows: maker -apiΣ To view the contents of the template in FrameMaker, open the SRS.boo directory.Word Users: By default, the document has been placed in your home directory. Σ To view the contents of the template in MS-Word, open the SRS.boo directory.Template contentsEach template is located in its own directory which contains files for each of the following: n Title Pagen Table of Contentsn List of Figuresn List of Tablesn List of Appendixesn Main documentn Appendix AThe following sections describe how these document parts have been implemented in the FrameMaker, Interleaf and MS-Word document publishing systems. TERM1="Document" TERM2="parts" TERM3="Frame"Frame Document PartsIn FrameMaker, each document template is contained within a directory and consists of the following parts:COLS="2"COLNAME="1" COLWIDTH="130p"COLNAME="2" COLWIDTH="319p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DID PartCOLNAME="2" VALIGN="TOP" MOREROWS="0"File NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"Title PageCOLNAME="2" VALIGN="TOP" MOREROWS="0"a_tp.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"Table of ContentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"e_docTOC.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"List of TablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"e_docLOT.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"List of FiguresCOLNAME="2" VALIGN="TOP" MOREROWS="0"e_docLOF.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main DocumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"e_doc.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"List of AppendixesCOLNAME="2" VALIGN="TOP" MOREROWS="0"g_appLOA.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"AppendixCOLNAME="2" VALIGN="TOP" MOREROWS="0"g_app.docThe following figure shows the contents of the document template directory for the Software Requirements Specification (SRS) of MIL-STD-498.FILENAME="01050.unk" ORIGFILE="pics/opentemp.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"TERM1="Document" TERM2="parts" TERM3="Interleaf"Interleaf Document PartsIn Interleaf, each document template is contained within a book and consists of the following partsCOLS="2"COLNAME="1" COLWIDTH="190p"COLNAME="2" COLWIDTH="256p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Document PartCOLNAME="2" VALIGN="TOP" MOREROWS="0"File NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"Title PageCOLNAME="2" VALIGN="TOP" MOREROWS="0"a_tp.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"TOC, LOF, LOT, LOA catalogCOLNAME="2" VALIGN="TOP" MOREROWS="0"b_toc_lof_lot_loa_template.styCOLNAME="1" VALIGN="TOP" MOREROWS="0"TOC, LOF, LOT, LOACOLNAME="2" VALIGN="TOP" MOREROWS="0"c_toc_lof_lot_loa.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main Document catalogCOLNAME="2" VALIGN="TOP" MOREROWS="0"d_doc-template.styCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main DocumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"e_doc.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"Appendix catalogCOLNAME="2" VALIGN="TOP" MOREROWS="0"f_app-template.styCOLNAME="1" VALIGN="TOP" MOREROWS="0"AppendixCOLNAME="2" VALIGN="TOP" MOREROWS="0"g_app.docIn order for DocExpress to process the document parts, they must be saved in Interleaf ASCII. The following figure shows the contents of the document's book for the Software Requirements Specification (SRS) of MIL-STD-498.FILENAME="01051.unk" ORIGFILE="pics/ileaf_SRS.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"MS-Word Document PartsIn MS-Word, each document template is contained within a directory and consists of the following partsCOLS="2"COLNAME="1" COLWIDTH="111p"COLNAME="2" COLWIDTH="337p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Template PartCOLNAME="2" VALIGN="TOP" MOREROWS="0"File NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"Title PageCOLNAME="2" VALIGN="TOP" MOREROWS="0"a_tp.rtfCOLNAME="1" VALIGN="TOP" MOREROWS="0"Main DocumentCOLNAME="2" VALIGN="TOP" MOREROWS="0"e_doc.rtfCOLNAME="1" VALIGN="TOP" MOREROWS="0"AppendixCOLNAME="2" VALIGN="TOP" MOREROWS="0"g_app.rtfThe following figure shows the contents of the document template directory for the Software Requirements Specification (SRS) of MIL-STD-498.FILENAME="01052.unk" ORIGFILE="pics/wordtmpl.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"Opening the main documentΣ Open the main document of the SRS (i.e., the e_doc document icon for Interleaf, e_doc.doc file for FrameMaker and E_doc.rtf for MS-Windows). Notice the number of pages in the document. The size of the document will grow when it is built with DocExpress. An example of one page of the main document template for FrameMaker is shown in the following figure.FILENAME="01053.unk" ORIGFILE="pics/xmpl_SRS.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"TERM1="Variables" TERM2="editing Variable Set"ID="34176"Modifying the Variable SetIntroductionBefore you build your document, you must make sure all definitions of project-specific variables are correct. This may include the following information: n Company namen Agency namen Company addressn System namen Program nameMost importantly, DocExpress must be told the location of your engineering data. The default location points to engineering data provided with DocExpress and loaded during installation. The specific variable which refers to the engineering data depends on the document template loaded but always ends with the word GROUP (e.g., SYSTEM_GROUP, CSCI_GROUP, PROGRAM_GROUP, etc.).These variables are used as parameters to the DocExpress utilities. By changing their values to point to your project information (e.g., model, project, etc.), a document will be produced that contains your engineering data. Modifying other parameters of DocExpress utilities can change what and how information is extracted from the engineering repository and how it is formatted. Refer to the DocExpress Utilities Guide for details on the available utilities and their options. How to edit the variable setΣ To edit the variable set:1 Select Options | Variables | Edit. The Edit Variables window appears.FILENAME="01054.unk" ORIGFILE="pics/editvars.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"Note: If a Variable Set does not exist, the user is requested to load the variables before proceeding.FILENAME="01055.unk" ORIGFILE="pics/novars.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"Changing a variableΣ To change a variable's name, value, or description:1 Select the variable in the scroll list.Its attributes are displayed in their respective fields in the Variable Editor window. 2 Modify these fields as necessary. 3 When all modifications have been completed, press the Change button at the bottom of the "Edit Variables" window. Note: Changes to the variable's name creates a new variable. TERM1="Document Development" TERM2="building"ID="36526"Building the DocumentIntroductionThe fourth task in the document generation process is to assemble all the various text and diagrams that have been developed to describe the system. This task is referred to as building the document. Generally, this task and the Developing Document Contents task will be performed iteratively many times before the final version of the document is completed. When the template and variables have been tailored to your satisfaction, and engineering information is available, you are ready to build the document. Document partsDocExpress builds a document in parts by processing a file (a part of the document) and resolving all variables it encounters. In the scrolling list on the Build Window, all the documents parts (i.e., e_doc.doc, g_app.doc, etc.) should be displayed. In this lesson, the following document parts will be generated: n Main document (i.e., e_doc.doc)n Appendix (i.e., g_app.doc)Building the Main DocumentHow to build the main documentΣ To build the main document:1 From the DocExpress Build Window, double-click on the desired document template (e.g., SRS.boo). DocExpress will display the various parts of the document template. Select the main document (e.g., e_doc.doc).FILENAME="01056.unk" ORIGFILE="pics/build.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"Note: When the Variable Set has been loaded, the CASE tool and Method selections are no longer necessary for building the document. However, if a new Variable Set is desired, the CASE tool and Method should be selected again.2 Select the Build button.DocExpress will ask for confirmation. By default the new document will have the name of the template (e.g., e_doc.doc) with a system generated time-stamp (e.g., e_doc_1016125707.doc). The default name and location for the output document may be modified by the user on the "Build" Confirmation Form.FILENAME="01057.unk" ORIGFILE="pics/buildq.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_proc.fm5.mif"3 Select OK to continue.DocExpress builds the new document. Note: FrameMaker will automatically save and open the generated document. DocExpress reports on the status of the build process by displaying messages in the Message Pad. When DocExpress has completed the building process, it notifies you of the location and name of the generated document. Examining the Generated DocumentOpening the documentInterleaf Users: The generated document has been placed on your desktop within the book loaded previously. If Interleaf is already running, you may need select View | Rescan (Interleaf 5) or View | Update (Interleaf 6). FrameMaker Users: The generated document should already be open. Word Users: Open the generated document if it is not already open.Examining the documentNotice how many pages (82) have been generated. Go to Section 3.3.1 where the External Interface Diagram has been placed. Identify the list of generated external interfaces (Section 3.3.1). Notice the order that was used to place the information into the document, i.e., Object Model, Dynamic Model, Functional Model and annotations. Temporary filesDuring the build process, DocExpress generates many temporary files. These temporary files are located in a temporary directory defined by the the DocExpress variable $TEMP_DIR. You can re-define the location of the temporary directory by changing the value of the $TEMP_DIR variable. By default, this variable is defined as follows: $HOME/.ata/tmpThis directory should be purged of all temporary files periodically. Note: If you are using Interleaf, you should save your generated documents before purging the temporary directory of its files. This action will permanently resolve the references to the generated files. If the generated documents are not saved, Interleaf will be unable to find the temporary files and error messages will be issued to this effect. Building the AppendixHow to build the appendixFrameMaker UsersIf FrameMaker is in use, exit it first. Σ To build the appendix:1 If you closed the Build Window, select the Build button on the DocExpress Main Window. The Build window is displayed.2 In the scroll area of the Build Window, select the appendix document of the SRS (i.e., g_app.doc). 3 Select the Build Button.The confirmation dialog is displayed.4 Select OK.The document is built. Wait for DocExpress to notify you that the document generation has completed. All messages are displayed in the Message Pad; therefore, keep it open. FrameMaker UsersFrameMaker will automatically save and open the generated document. Examining the Generated DocumentOpening the documentInterleaf Users: The generated document has been placed on your desktop within the book loaded previously. If Interleaf is already running, you may need to select View | Rescan (Interleaf 5) or View | Update (Interleaf 6). FrameMaker Users: The generated document should already be open. Word Users: Open the generated document if it is not already open.Examining the documentThe appendix contains tables that have been generated for all the system's interfaces (see example in tab1) for the interfaces are "true" FrameMaker, Interleaf and MS-Word tables, that is, DocExpress uses the table editors for both tools. Table 1. fine (Data Flow)COLS="2"COLNAME="1" COLWIDTH="100p"COLNAME="2" COLWIDTH="348p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"fineCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data FlowCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Not ApplicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Not ApplicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"TextCOLNAME="2" VALIGN="TOP" MOREROWS="0" COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Member (Actor)COLNAME="1" VALIGN="TOP" MOREROWS="0"DestinationCOLNAME="2" VALIGN="TOP" MOREROWS="0"return Product (Data Process)TERM1="Completing the Document"ID="15186"Completing the DocumentIntroductionAfter a document has been built using DocExpress, several other operations may be necessary. The fifth task in the document generation process is complete the document. This task may include a variety of activities performed primarily with your document publishing system. Most of these activities are outside the scope of this document. Those activities that may be impacted by the use of DocExpress are discussed in this section. In this sectionThis section describes the following activities:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Activity PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24368" TYPE="XREF-TEXTCOPY"Generate the Title Page 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'23COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38335" TYPE="XREF-TEXTCOPY"Enter Additional Information 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25TERM1="generating the title page"TERM1="Title Page" TERM2="generation"ID="24368"Generate the Title PageProject Specific VariablesThe default Title Page in the document template has variables for company and customer information. These variables are listed in the following table. At this time, you may wish to modify these variables using the DocExpress Variable Editor to customize the generated Title Page to your project. COLS="2"COLNAME="1" COLWIDTH="166p"COLNAME="2" COLWIDTH="279p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Company NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_ADDRESS1COLNAME="2" VALIGN="TOP" MOREROWS="0"Company's street addressCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_ADDRESS2COLNAME="2" VALIGN="TOP" MOREROWS="0"Company's city, state, ZIP, or postal codeCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_ADDRESS3COLNAME="2" VALIGN="TOP" MOREROWS="0"Company's countryCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_DPT_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Department nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"CONTRACT_NUMBERCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contract numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"CSCI_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the Computer Software Configuration Item (MIL-STD-498).COLNAME="1" VALIGN="TOP" MOREROWS="0"CUSTOMER_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Customer's nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"CUST_ADDRESS1COLNAME="2" VALIGN="TOP" MOREROWS="0"Customer's street addressCOLNAME="1" VALIGN="TOP" MOREROWS="0"CUST_ADDRESS2COLNAME="2" VALIGN="TOP" MOREROWS="0"Customer's city, state, ZIP, or postal codeCOLNAME="1" VALIGN="TOP" MOREROWS="0"CUST_ADDRESS3COLNAME="2" VALIGN="TOP" MOREROWS="0"Customer's countryCOLNAME="1" VALIGN="TOP" MOREROWS="0"DOCUMENT_VERSIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version of generated documentCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCNCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document Control NumberCOLNAME="1" VALIGN="TOP" MOREROWS="0"REVISIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"Revision of generated documentCOLNAME="1" VALIGN="TOP" MOREROWS="0"SYSTEM_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the systemCOLNAME="1" VALIGN="TOP" MOREROWS="0"PROGRAM_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Program NameFor more information on the activation and use of the Variable Editor, see REFID="34176" TYPE="XREF-TEXTCOPY"Modifying the Variable Set on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14. Generating the Title pageFrameMaker UsersExit FrameMaker if it is running. Σ To generate the Title Page: 1 If you closed the Build Window, select the Build button on the DocExpress main window. The Build window appears.2 In the Scroll Box, select the a_tp.doc file. 3 Select the Build button. The confirmation dialog appears.4 Select OK. The document is generated.Wait for DocExpress to notify you that the document generation has completed. Opening the documentInterleaf UsersThe generated document has been placed on your desktop within the book loaded previously. If Interleaf is already running, you may need to select View | Rescan (Interleaf 5) or View | Update (Interleaf 6). FrameMaker UsersThe generated document should already be open. Word Users: Open the generated document if it is not already open.ID="38335"Enter Additional InformationIntroductionSome necessary information is not readily captured by CASE tools such as human engineering requirements. DocExpress provides several alternatives for incorporating this information into the final document. The information may be entered into: 1 The CASE tool2 Another document3 A text file4 The document template5 The document built by DocExpressDynamic informationOptions 1 through 3 are appropriate if the information is dynamic (i.e., changes often). For more information on including text files or files created with a document publishing system, see REFID="10670" TYPE="XREF-TEXTCOPY"Including FrameMaker Files on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18 or REFID="27418" TYPE="XREF-TEXTCOPY"Including Interleaf Files on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19. For guidance on extracting information from ObjectTeam, see the DocExpress Utilities Guide. Non-dynamic informationIf the information is not expected to change often, option 4 is the appropriate choice. Create the information using the WYSIWYG (What-You-See-Is-What-You-Get) capabilities of the document publishing system. Static informationIf the document is nearly complete, option 5 may be a viable alternative. In this option, text and graphics are entered directly into the document using the the document publishing system. However, remember that in a document built by DocExpress, all Mapping Information (i.e., DocExpress variables and commands) has been replaced by the engineering information. Thus, the engineering information cannot be updated or "re-built" by DocExpress. If you wish to "re-build" the document, one of the other options may be more efficient. For more information on this subject, see REFID="39517" TYPE="XREF-TEXTCOPY"Rebuilding Documents on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'26.TERM1="Document" TERM2="rebuilding"ID="39517"Rebuilding DocumentsWhere to make changesEngineering information changes often. There are two basic places where the changes can be made: n In the generated documentn In the information source (e.g., ObjectTeam)Cayenne recommends that all modifications should be made to the source information. For example, if ObjectTeam was used to develop a particular diagram, then any changes to that diagram should be made within ObjectTeam. The original document template is then used to generate an updated version of the document that incorporates the latest engineering information. DocExpress accepts as input any file created using a supported document publishing system. Therefore, a document built by DocExpress may also be "rebuilt." However, when a document is built by DocExpress, all Mapping Information that can be resolved is resolved, thus removing it from the generated document. Note: Variables that cannot be resolved are left as-is in the document built by DocExpress. Also, text files and objects may contain DocExpress variables or commands. These are not resolved when the file or object is first included, but may be resolved on subsequent builds. To rebuild a document built by DocExpress, it should contain Mapping Information (i.e., DocExpress variables and commands). Otherwise, no additional information will be extracted from the repositories. Note: The document publishing system may be used to compare the differences between two versions of a document and generate revision markings. TERM1="UserSupplied StP Systems" TERM2="use with DocEXPRESS"ID="26161"Using DocExpress with User-Supplied ObjectTeam SystemsIntroductionThe demonstrations described in this manual used an example system supplied with ObjectTeam. This section describes how to use your own ObjectTeam system to produce an SRS or a PS. ObjectTeam system preparationsMake sure you have fully checked your ObjectTeam system for both syntax and balancing in the ObjectTeam editors before attempting to generate the document with DocExpress. Note: DocExpress will issue errors and warnings if the ObjectTeam system is not legal.For best results, Cayenne recommends that you follow the general guidelines listed in REFID="35482" TYPE="XREF-TEXTCOPY"Chapter 3, Development Guidelines for ObjectTeam.Document generationDocument generation from your ObjectTeam system is accomplished by simply modifying just one DocExpress variable, CSCI_GROUP for the SRS in MIL-STD-498 or FUNCTION_GROUP for the PS in ISO 9000-3/6592, and then performing the steps in REFID="36526" TYPE="XREF-TEXTCOPY"Building the Document on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16. Chapter 6 Completing ID="15623"Documents in FrameMakerTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress User GuideIntroductionThis chapter describes how to complete the generated document, for example, by generating front matter and adding formatting.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19220" TYPE="XREF-TEXTCOPY"Generating Front Matter 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20721" TYPE="XREF-TEXTCOPY"Resizing Diagrams 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29119" TYPE="XREF-TEXTCOPY"Modifying the Document's Format 6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18TERM1="Front Matter" TERM2="generating" TERM3="using FrameMaker"TERM1="Document" TERM2="front matter" TERM3="generating"TERM1="FrameMaker" TERM2="generating front matter"ID="19220"Generating Front MatterIntroductionDocExpress provides templates for the front matter of the document including the Table of Contents (TOC), List of Figures (LOF), List of Tables (LOT) and List of Appendixes (LOA). FrameMaker is used to produce this information automatically. This section describes how this information is represented and generated.For additional information on producing generated documents, see the FrameMaker documentation.Note: The following sections assume you have built e_doc.doc and g_app.doc using DocExpress and the generated documents are e_doc_<time_stamp>.doc and g_app_<time_stamp>.doc respectively. Your template parts and the generated documents may be named differently. Generating the Front MatterThe Front Matter consists of a Table of Contents, List of Figures, List of Tables, and List of Appendices. You will use FrameMaker to generate this information into separate files. The files that contain the Front Matter are named the same as the document for which the information is generated with the addition of a specified suffix. For example, the Table of Contents for e_doc.doc is e_docTOC.doc. DocExpress provides all the files for the front matter in the default document template. These files contain all the necessary formatting information for the front matter. When the main document (i.e., e_doc.doc) and the appendix (i.e., g_app.doc) were generated using DocExpress, it also copied the files for the front matter. DocExpress used the output file name of the main document and appendix (plus an appropriate extension) as the names for the files containing the front matter. For example, when e_doc.doc was generated it became e_doc_1045032394.doc and the table of contents file, e_docTOC.doc became e_doc_1045032394TOC.doc. TERM1="Table of Contents" TERM2="generation" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="generating Table of Contents"Generating the Table of ContentsTERM1="Table of Contents" TERM2="generation with FrameMaker"How to generate a Table of ContentsΣ To generate a Table of Contents:1 In FrameMaker, open e_doc_<time_stamp>.doc (e.g., e_doc_1045032394.doc). 2 Select File | Generate | Book.The Generate/Book window appears.3 Select Table of Contents from the List popup if it isn't already selected, and select OK.The Set Up Table of Contents window appears. FILENAME="01058.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"4 Make sure that the filename suffix is TOC. The DocExpress templates are set up to include the section paragraphs (i.e., section.level_1, section.level_2, ... section.level_10) as shown in Figure 2-7. 5 Include any additional section paragraphs. 6 If desired, select the Create Hypertext Links option. This option automatically creates hypertext links between the Table of Contents entries and the sections in the document. 7 Select Generate. DocExpress provides a document template for the TOC, named e_docTOC.doc. Paragraphs for all sections have been defined for the Table of Contents in e_docTOC.doc. When DocExpress is used to build e_doc.doc, it creates e_doc_<time_stamp>.doc and e_doc_<time_stamp>TOC.doc. Thus, the generated document and the template for the TOC are kept in sync. FrameMaker will use this document template and its paragraphs to generate the TOC. When the TOC has been generated by FrameMaker, one more step is necessary to ensure that the header and footers of the TOC document are consistent with the other document parts within the document template. Frame generates the table of contents document e_doc_<time_stamp>TOC.doc , and automatically opens it upon completion.8 Once the TOC document has been opened, select File | Import | Formats. The Import Formats window appears.9 Select e_doc_<time_stamp>.doc in the Import From Document popup list.10 In the Import and Update area, select only "Variable Definitions" and deselect everything else. 11 Select Import.All of the Frame variables used by DocExpress are updated.12 Close the file e_doc_<time_stamp>TOC.doc. FILENAME="01059.tif" ORIGSEQ="4" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"TERM1="List of Figures" TERM2="generation" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="generating List of Figures"Generating the List of FiguresTERM1="List of Figures" TERM2="generation with FrameMaker"How to generate a List of FiguresΣ To generate a List of Figures:1 Select File | Generate/Book. The Generate/Book window appears.2 Select List of Figures from the List popup and select OK. The Set Up List of Figures window appears. 3 If necessary, include the figure paragraph tag and select the Create Hypertext Links option. 4 Select Generate. Frame generates the List of Figures document called e_doc_<time_stamp>LOF.doc, and automatically opens it upon completion.5 Once the LOF document has been opened, select File | Import | Formats.The Import Formats window appears.6 Select e_doc_<time_stamp>.doc in the Import From Document popup list.7 In the Import and Update area, select only "Variable Definitions" and deselect everything else. 8 Select Import.All of the Frame variables used by DocExpress are updated. 9 Close the file e_doc_<time_stamp>LOF.doc. In e_doc_<time_stamp>.doc select File | Generate/Book. This option will open the Generate/Book window as shown in the following figure. Select the list option and the List of Figures in the list pop-up menu. Then click the Generate button.FILENAME="01060.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"The Set Up List of Figures window will be opened. In this window, ensure that the filename suffix is LOF. The templates have been set up to include the figure paragraphs (i.e., figure) as shown in the following figure. Include any additional figure paragraphs. Then, select the Create Hypertext Links. This option will create hypertext links between the LOF entries and the figure paragraphs of the document. Finally, click the Generate button.FILENAME="01061.tif" ORIGSEQ="6" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"DocExpress provides a document template for the LOF named e_docLOF.doc. A paragraph for figure titles has been defined for the List of Figures in e_docLOF.doc. When DocExpress is used to generate e_doc.doc, it creates e_doc_<time_stamp>.doc and e_doc_<time_stamp>LOF.doc. Thus, the generated document and the template for the LOF are kept in sync. FrameMaker will use this document template and its paragraphs to generate the LOF. Next, import variable definitions. Using FrameMaker, open e_doc_<time_stamp>.doc and e_doc_<time_stamp>LOF.doc. In e_doc_<time_stamp>LOF.doc under the File Menu, select Import Formats menu. Then on the Import Formats form in the Import Documents window, select e_doc_<time_stamp>.doc and select Variable Definitions as shown in the following figure. This operation will use the variable definitions defined in e_doc_<time_stamp>.doc for the header/footer information in e_doc_<time_stamp>LOF.doc. FILENAME="01062.tif" ORIGSEQ="7" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"TERM1="List of Tables" TERM2="generation" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="generating List of Tables"Generating the List of TablesTERM1="List of Tables" TERM2="generation with FrameMaker"How to generate a List of TablesΣ To generate a List of Tables:1 Select File | Generate/Book. The Generate/Book window appears.2 Select List of Tables from the List popup and select OK. The Set Up List of Tables window appears. 3 If necessary, include the table paragraph tag and select the Create Hypertext Links option. 4 Select Generate. Frame generates the List of Tables document called e_doc_<time_stamp>LOT.doc, and automatically opens it upon completion.5 Once the LOT document has been opened, select File | Import | Formats.The Import Formats window appears.6 Select e_doc_<time_stamp>.doc in the Import From Document popup list.7 In the Import and Update area, select only "Variable Definitions" and deselect everything else. 8 Select Import.All of the Frame variables used by DocExpress are updated. 9 Close the file e_doc_<time_stamp>LOT.doc. In e_doc_<time_stamp>.doc select File | Generate/Book. This option will open the Generate/Book window as shown in the following figure. Select the list option and the List of Tables in the list pop-up menu. Then click the Generate button. FILENAME="01063.tif" ORIGSEQ="8" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"The Set Up List of Tables window will be opened. In this window, ensure that the filename suffix is LOT. The templates have been set up to include the table paragraphs (i.e., table) as shown in Figure 2-13. Include any additional table paragraphs. Then, select the Create Hypertext Links. This option will create hypertext links between the LOT entries and the sections of the document. Finally, click the Generate button. FILENAME="01064.tif" ORIGSEQ="9" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"DocExpress provides a document template for the LOT named e_docLOT.doc. A paragraph for table titles has been defined for the List of Tables in e_docLOT.doc. When DocExpress is used to generate e_doc.doc, it creates e_doc_<time_stamp>.doc and e_doc_<time_stamp>LOT.doc. Thus, the generated document and the template for the LOT are kept in sync. FrameMaker will use this document template and its paragraphs to generate the LOT. Next, import variable definitions. Using FrameMaker, open e_doc_<time_stamp>.doc and e_doc_<time_stamp>LOT.doc. In e_doc_<time_stamp>.doc under the File Menu, select Import Formats menu. Then on the Import Formats form in the Import Documents window, select e_doc_<time_stamp>.doc and select Variable Definitions as shown in the following figure. This operation will use the variable definitions defined in e_doc_<time_stamp>.doc for the header/footer information in e_doc_<time_stamp>LOT.doc. FILENAME="01065.tif" ORIGSEQ="10" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"TERM1="List of Appendixes" TERM2="generation" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="generating List of Appendixes"Generating the List of AppendixesTERM1="List of Appendixes" TERM2="generation with FrameMaker"How to generate a List of AppendixesThe List of Appendixes is a Table of Contents for an Appendix. In DocExpress templates, g_app.doc is the Appendix. Thus, the g__app<time_stamp>.doc document must be used to generate the List of Appendixes. Σ To generate a List of Appendixes:1 Select File | Generate/Book. The Generate/Book window appears.2 Select Table of Contents from the List popup and select OK. The Set Up List of Tables window appears. 3 Include all section paragraph tags and select the Create Hypertext Links option. FILENAME="01066.unk" ORIGFILE="pics/LOA.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"4 Select Generate. Frame generates the List of Appendixes document called e_doc_<time_stamp>LOA.doc, and automatically opens it upon completion.5 Once the LOA document has been opened, select File | Import | Formats.The Import Formats window appears.6 Select e_doc_<time_stamp>.doc in the Import From Document popup list.7 In the Import and Update area, select only "Variable Definitions" and deselect everything else. 8 Select Import.All of the Frame variables used by DocExpress are updated. 9 Close the file g_app_<time_stamp>LOA.doc. In g_app_<time_stamp>.doc select the Generate/Book... option under the File pull-down menu. This option will open the Generate/Book window as shown in the following figure. Select the list option and the Table of Contents in the list pop-up menu. Then click the Generate button.FILENAME="01067.tif" ORIGSEQ="11" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"The Set Up Table of Contents window will be opened. In this window, ensure that the filename suffix is LOA. The template has been set up to include the appendix section level paragraphs (i.e., section.l1.app, section.l2.app, ... section.l10.app) as shown in the following figure. Include any additional appendix section paragraphs. Then, select the Create Hypertext Links. This option will create hyper-text links between the LOA entries and the sections of the document. Finally, click the Generate... button.FILENAME="01068.tif" ORIGSEQ="12" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"DocExpress provides a document template for the LOA named g_appLOA.doc. Paragraphs for appendix sections has been defined for the List of Appendixes in appLOA.doc. When DocExpress is used to generate g_app.doc, it creates g_app_<time_stamp>.doc and g_app_<time_stamp>.doc. Thus, the generated document and the template for the LOA are kept in sync. FrameMaker will use this document template and its paragraphs to generate the LOA. Next, import variable definitions. Using FrameMaker, open g_app_<time_stamp>.doc and g_app_<time_stamp>LOA.doc. In g_app_<time_stamp>LOA.doc under the File Menu, select Import Formats menu. Then on the Import Formats form in the Import Documents window, select g_app_<time_stamp>.doc and select Variable Definitions as shown in the following figure. This operation will use the variable definitions defined in g_app_<time_stamp>.doc for the header/footer information in g_app_<time_stamp>LOA.doc.FILENAME="01069.tif" ORIGSEQ="13" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"TERM1="Diagrams" TERM2="resizing" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="diagram resizing"ID="20721"Resizing DiagramsIntroductionThe appearance of some diagrams in the document may not be satisfactory. For example, some objects may appear closer together, text may over-run objects and other text, text may be too small to be legible, etc. as shown in the following figure. FILENAME="01070.tif" ORIGSEQ="14" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"Many of these problems are the result of shrinking the diagram from its size in ObjectTeam to its presentation in the document. Other undesirable features are caused by differences in the graphical representations of ObjectTeam and the document publishing system. ObjectTeam diagrams can be much larger than the space available in a document. For a document with a page size of 8.5" by 11" the maximum available space for a figure is only 6.5" by 8.5" after accounting for margins, header, footer, and the figure's title. The orientation of a diagram can also affect how much the diagram is shrunk to fit into the document. Typically, ObjectTeam diagrams are developed in landscape orientation. That is, the diagram's width is greater than its height. However in a document, the diagram is presented in a portrait orientation. That is, the height of the diagram is greater than its width. These limitations must be taken into account when preparing graphical objects in ObjectTeam for documentation. Many of these difficulties can be resolved by following the diagram layout guidance in REFID="35482" TYPE="XREF-TEXTCOPY"Chapter 3, Development Guidelines for ObjectTeam. FrameMaker may also be used to resize these diagrams to make them more legible. Note: Changes to diagrams using FrameMaker will not affect these objects in ObjectTeam. Thus, these changes will be discarded when the automated process is repeated. TERM1="Diagrams" TERM2="rotating" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="rotating diagrams"ID="24468"Rotating and Scaling a DiagramIntroductionSome diagrams may only have small problems (i.e., text overlaps other objects and graphical objects are too small) as a result of their compression. The steps below will create a larger presentation area for these diagrams by changing their orientation from portrait to landscape and/or rescaling them.How to rotate a diagramΣ To rotate a diagram:1 In FrameMaker, use the text cursor to select the Objects Bounding Rectangle around the diagram.2 Select Graphics | Rotate. 3 In the Rotate Frame dialog, select the 90 degrees counter-clockwise option and click Rotate. How to scale a diagramΣ To scale a diagram:1 In FrameMaker, select the Objects Bounding Rectangle around the diagram.2 Select Graphics | Scale. 3 In the Scale dialog, set the width of the Object Bounding Rectangle to 8.5 inches and the height to 6.25 inches. Click the Scale button. 4 Select the Anchored Frame.5 Select Graphics | Scale. In the Scale dialog, set the width of the Anchored Frame to 8.5 inches and the height to 6.25 inches. Click the Scale button. 6 Select the figure, then select Graphics | Scale. 7 In the Scale window, set the width of the figure to 8.25 inches and the height to 6.0 inches. Click the Scale button. TERM1="Diagrams" TERM2="Foldout Pages" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="foldout pages for diagrams"Creating an Oversized Page for a DiagramIntroductionSome diagrams may have more severe problems requiring very large presentation areas. For these diagrams, a separate document for the oversized diagram is necessary to enable oversized pages (i.e., fold out pages). Many standards recommend that all over-sized pages be contained within an appendix. Therefore, this approach follows this guidance. Note: This approach should only be used as a last measure.How to create an oversized pageΣ How to create an oversized page:1 Using FrameMaker, create an appendix for all oversized diagrams in the directory for the document template. You can copy and modify the formats of the appendix generated by DocExpress (i.e., g_app.doc) such that it provides the necessary paragraphs and page formats. 2 Open the new appendix in FrameMaker. 3 Import the formats from the appendix generated by DocExpress.4 Change the auto-numbers for sections, figures, and pages as appropriate. 5 Change the page properties to 17 inches wide and 11 inches tall.6 Open the document that contains the over-sized diagram. Cut the frame from this document and paste it into the new appendix. 7 Follow the procedure in REFID="24468" TYPE="XREF-TEXTCOPY"Rotating and Scaling a Diagram on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'6name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16 to resize the diagram. TERM1="Document" TERM2="format modifications" TERM3="FrameMaker"TERM1="FrameMaker" TERM2="format modifications"ID="29119"Modifying the Document's FormatThe format of a document template is defined by its paragraphs. Each paragraph has a font family, style, size and other characteristics. These characteristics may be modified using the FrameMaker Paragraph Designer.ID="38625"Document CleanupIntroductionDocExpress provides many facilities for automatically formatting the generated document. However, some manual cleanup may still be necessary, such as: n Remove Development Guidancen Cleanup Diagramsn Modify Document's FormatHow these operations are performed using FrameMaker is described in the following sections. Removing Development GuidanceIn the final document, the Development Guidance should not be included. The document templates have been structured so that this instructional text is readily identified and can be easily removed. How to remove Development GuidanceΣ To remove Development Guidence:1 Place the FrameMaker cursor in the Paragraph Tag to be removed (e.g., guide.DID_text). 2 Select Edit | Find/Change. The Find/Change window appears.3 In the Find/Change window, select Paragraph Tag for the Find option. This will set the selected Paragraph Tag (e.g., guide.DID_text) as the object to be found . 4 Select the Document option then select Change All In. FILENAME="01071.unk" ORIGFILE="pics/devgidfr.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_fram.fm5.mif"TERM1="Diagram" TERM2="cleanup in document"TERM1="Document" TERM2="cleanup diagrams"Cleaning up diagramsThe appearance of some diagrams extracted from the CASE tool may not be acceptable in the document. For example, some objects may appear closer together, text may over-run objects and other text, text may be too small to be legible, etc. Generally, these problems occur because the allocated area for the diagram in the document is much smaller than its size in the CASE tool. DocExpress sizes the diagram to fit within the available space within the document. Many of these difficulties can be resolved by following the diagram layout guidance in REFID="35482" TYPE="XREF-TEXTCOPY"Chapter 3, Development Guidelines for ObjectTeam. Also, you can use FrameMaker to re-size these diagrams to make them more legible. For information on how to re-size diagrams, see the FrameMaker manuals. Note: For the sake of efficiency, Cayenne does not recommend changing the appearance of a diagram using FrameMaker. However, in the FINAL document, large diagrams may be re-sized. TERM1="Document" TERM2="modify format"Modifying the document's formatSometimes the format of the document or some of its Paragraphs may not have the desired properties. You can modify the properties of any Paragraph using the FrameMaker. For information and guidance on when and how to change the Paragraph properties, refer to REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress Templates. Chapter 7 Completing ID="41357"Documents in InterleafTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress User GuideIntroductionID="21178"Generate Front Matter for InterleafIntroductionDocExpress provides templates for the front matter of the document including the Table of Contents (TOC), List of Figures (LOF), List of Tables (LOT) and List of Appendixes (LOA). The capabilities of the document publishing systems are used to automatically produce this information. This section describes how this information is represented and generatedTERM1="Table of Contents" TERM2="generation with Interleaf"TERM1="List of Figures" TERM2="generation with Interleaf"TERM1="List of Tables" TERM2="generation with Interleaf"TERM1="List of Appendixes" TERM2="generation with Interleaf"Generating the Front MatterThe Front Matter consists of a Table of Contents, List of Figures, List of Tables, and List of Appendices. This information is contained in a single Interleaf file, c_toc_lof_lot_loa.doc. DocExpress must first be used to resolve variables used in the header of this Interleaf file. Then Interleaf will be used to complete the generation of this information. DocExpress OperationsΣ To generate the front matter:1 If you closed the Build Window, select the Build button on the DocExpress main window. The Build window appears.2 In the Scroll Box in the Build Window, select the document for the front matter of the SRS (i.e., c_toc_lof_lot_loa.doc). 3 Select the Build button.The Confirmation dialog appears.4 Select OK. The document is generated. Wait for DocExpress to notify you that the document generation has completed. Interleaf OperationsΣ To complete generation:1 In the Interleaf desktop, select View | Rescan (Interleaf 5) or View | Update (Interleaf 6) to show the generated document. 2 Select and move all of the generated documents into the proper positions.3 Select Book | Toc to generate the toc, lof, lot, and loa documents.FILENAME="01072.unk" ORIGFILE="pics/ilef_gen.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"4 Copy the contents of the generated toc, lof, lot, and loa documents to the table of contents document (i.e., c_toc_lof_lot_loa with the time-stamp as a suffix) built by DocExpress. In the c_toc_lof_lot_loa document copy the contents of: - toc after the Table of Contents title,- lof after the List of Figures title,- lot after the List of Tables title,- loa after the List of Appendixes title.TERM1="Front Matter" TERM2="generating" TERM3="using Interleaf"TERM1="Document" TERM2="front matter" TERM3="generating"TERM1="Interleaf" TERM2="generating front matter"Generating Front MatterThe facilities of Interleaf are used to generate the TERM1="Interleaf" TERM2="generating Table of Contents"TERM1="Table of Contents" TERM2="generation" TERM3="Interleaf"Table of Contents (TOC), TERM1="Interleaf" TERM2="generating List of Figures"TERM1="List of Figures" TERM2="generation" TERM3="Interleaf"List of Figures (LOF), TERM1="Interleaf" TERM2="generating List of Tables"TERM1="List of Tables" TERM2="generation" TERM3="Interleaf"List of Tables (LOT) and TERM1="Interleaf" TERM2="generating List of Appendixes"TERM1="List of Appendixes" TERM2="generation" TERM3="Interleaf"List of Appendixes (LOA). DocExpress provides a catalog for the TOC, LOF, LOT, and LOA named toc_lof_lot_loa. Components for all section titles, figures, and tables have been defined for the Table of Contents, List of Figures, List of Tables, and List of Appendixes in toc_lof_lot_loa_template. Note: The following sections assume that c_toc_lof_lot_loa.doc, e_doc.doc, and g_app.doc have been built DocExpress and the generated documents are c_toc_lof_lot_loa_time_stamp.doc, e_doc_time_stamp.doc and g_app_time_stamp.doc. Your template parts and the generated documents may be named differently. The use of Interleaf in conjunction with the catalogs provided by DocExpress to generate the TOC, LOF, LOT, and LOA is described below. For additional information see the Interleaf User's Guide. Select the Main Document and the Appendix (i.e., e_doc_time_stamp and g_app_time_stamp) and execute the Book -> TOC Interleaf command as shown in Figure 3-6. FILENAME="01073.tif" ORIGSEQ="4" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"This operation will generate the toc document for the Table Of Contents, the lof document for the List Of Figures, the lot document for the List of Tables, and the loa document for the List of Appendixes as shown in Figure 3-7. FILENAME="01074.tif" ORIGSEQ="3" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"Note: All entries for the Table of Contents, List of Figures, List of Tables, and List of Appendixes should be deleted from c_toc_lof_lot_loa_time_stamp prior to the following step. Open these documents and copy their contents into c_toc_lof_lot_loa_time_stamp under the appropriate titles in the document. The resulting Table of Contents is shown in Figure 3-8. FILENAME="01075.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"TERM1="Diagrams" TERM2="resizing" TERM3="Interleaf"TERM1="Interleaf" TERM2="diagram resizing"Resizing DiagramsThe appearance of some diagrams in the document may not be satisfactory. For example, some objects may appear closer together, text may over-run objects and other text, text may be too small to be legible, etc. Many of these problems are the result of shrinking the diagram from its size in the CASE tool to its presentation in the document. Other undesirable features are caused by differences in the graphical representations of CASE tools and the document publishing system. Typically, diagrams can be developed with CASE tools that are much larger than the space available in a document. Sometimes as large as 24" by 24". For a document with a page size of 8.5" by 11" the maximum available space for a figure is only 6.5" by 8.5" after accounting for margins, header, footer, and the figure's title. The orientation of a diagram can also affect how much the diagram is shrunk to fit into the document. Typically, diagrams are developed in landscape orientation with CASE tools. That is, the diagram's width is greater than its height. However in a document, the diagram is presented in a portrait orientation. That is, the height of the diagram is greater than its width. These limitations must be taken into account when preparing graphical objects in the CASE tool for documentation. Many of these difficulties can be resolved by following the diagram layout guidance in the DocExpress manual for the appropriate CASE tool. Interleaf may also be used to resize these diagrams to make them more legible. Note: FILENAME="01076.tif" ORIGSEQ="6" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"NOTE: Changes to diagrams using Interleaf will not affect these objects in the CASE tool. Thus, these changes will be discarded when the automated process is repeated. TERM1="Diagrams" TERM2="rotating" TERM3="Interleaf"TERM1="Interleaf" TERM2="rotating diagrams"Rotating a DiagramSome diagrams may only have small problems (i.e., text overlaps other objects and graphical objects are too small) as a result of their compression. The steps below will create a larger presentation area for these diagrams by changing their orientation from portrait to landscape. 5 Using Interleaf , open the document that contains the over-sized diagram. 6 Select the frame that contains the oversized diagram and open its property sheet. 7 Change the height and width of the frame to page in its property sheet for the oversized diagram as shown in Figure 3-9. This will reserve an entire page for the diagram. FILENAME="01077.tif" ORIGSEQ="7" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"8 All the parts of the diagram are placed into the Interleaf document as a group. The next step requires that the group be edited. Therefore, select the figure and edit the contents of the group as shown in Figure 3-10. FILENAME="01078.tif" ORIGSEQ="8" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"9 Select all the pieces of the diagram and clear the locks on the text as shown in Figure 3-11. This will allow the text to be rotated in the following steps. Close the group edit. FILENAME="01079.tif" ORIGSEQ="9" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"10 Select the diagram and rotate a negative ninety (-90) degrees as shown in Figure 3-12. The figure is now in a landscape orientation as shown in Figure 3-13. FILENAME="01080.tif" ORIGSEQ="10" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"11 Select the diagram and size it to the full page frame as shown in Figure 3-13. FILENAME="01081.tif" ORIGSEQ="11" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"TERM1="Diagrams" TERM2="Foldout Pages" TERM3="Interleaf"TERM1="Interleaf" TERM2="foldout pages for diagrams"Creating an Over-sized Page for a DiagramSome diagrams may have more severe problems requiring very large presentation areas. For these diagrams, a separate document for the oversized diagram is necessary to enable oversized pages (i.e., fold out pages). Many standards recommend that all over-sized pages be contained within an appendix. Therefore, this approach follows this guidance. Note: This approach should only be used as a last measure.12 Using Interleaf, create an appendix for all oversized diagrams in the book generated by DocExpress. The appendix catalog provided by DocExpress (i.e., f_app-template) may be modified such that it provides the necessary components and page formats. Note: Remember to change the auto-numbers for sections, figures, and pages. 13 Open the new appendix (or the new catalog) and change the page properties to Landscape as shown in Figure 3-14. 14 Change the size of the page to create a fold out page (i.e.., Ledger) as shown in Figure 3-14. FILENAME="01082.tif" ORIGSEQ="12" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"15 Open the document that contains the over-sized diagram. Cut the frame from this document and paste it into the new appendix. 16 Open the property sheet of the frame and change its height and width to page as shown in step 7 in the above procedure. 17 Select the diagram and size it diagonally to the frame as described in step 11 of the previous procedure. The completed diagram is shown in Figure 3-15. FILENAME="01083.tif" ORIGSEQ="13" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"Note: You may wish to reposition the header and footer information to be centered on the larger page. TERM1="Document" TERM2="format modifications" TERM3="Interleaf"TERM1="Interleaf" TERM2="format modifications"Modifying the Document's FormatThe format of a document template is defined by its components in the appropriate catalog. Each component has a font family, style, size and other characteristics. These characteristics may be modified using the Interleaf Component Properties editor shown in Figure3-16. FILENAME="01084.tif" ORIGSEQ="14" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"ID="38625"Document CleanupIntroductionDocExpress provides many facilities for automatically formatting the generated document. However, some manual cleanup may still be necessary, such as: n Remove Development Guidancen Cleanup Diagramsn Modify Document's FormatHow these operations are performed using Interleaf is described in the following sections. Removing Development GuidanceIn the final document, the Development Guidance should not be included. The document templates have been structured so that this instructional text is readily identified and can be easily removed. How to remove Development GuidanceΣ To remove Development Guidence:1 Select all instances of one of the Development Guidance components (e.g., guide.DID_text) using Select | All of....FILENAME="01085.unk" ORIGFILE="pics/devgid.gif" ORIGTYPE="X" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"2 Cut the selected instances of the component from the document. 3 Repeat steps 1 and 2 for all Development Guidance components.TERM1="Diagram" TERM2="cleanup in document"TERM1="Document" TERM2="cleanup diagrams"Cleaning up diagramsThe appearance of some diagrams extracted from the CASE tool may not be acceptable in the document. For example, some objects may appear closer together, text may over-run objects and other text, text may be too small to be legible, etc. Generally, these problems occur because the allocated area for the diagram in the document is much smaller than its size in the CASE tool. DocExpress sizes the diagram to fit within the available space within the document. Many of these difficulties can be resolved by following the diagram layout guidance in REFID="35482" TYPE="XREF-TEXTCOPY"Chapter 3, Development Guidelines for ObjectTeam. Also, the document publishing system may also be used to re-size these diagrams to make them more legible. For information on how to re-size diagrams, see your document publishing system manuals. Note: For the sake of efficiency, Cayenne does not recommend changing the appearance of a diagram using the document publishing system. However, in the FINAL document, large diagrams may be re-sized. TERM1="Document" TERM2="modify format"Modifying the document's formatSometimes the format of the document or some of its Paragraphs/Components may not have the desired properties. You can modify the properties of any Paragraph/Component using the document publishing system. For information and guidance on when and how to change the Paragraph/Component properties, refer to the appropriate document publishing system chapter in the DocExpress Templates Guide. TERM1="Interleaf" TERM2="restarting lists"Restarting ListsDocExpress automatically generates lists using autonumbers for some types of information required in the document. If more than one list with the same autonumber stream is generated in an Interleaf document the autonumbering sequence may need to be restarted. Select the autonumber of the first list element and set the restart option the Autonumber Properties sheet to Yes as shown in Figure 3-17.FILENAME="01086.tif" ORIGSEQ="15" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_ilef.fm5.mif"Chapter 8 Completing ID="15623"Documents in WordIntroductionAfter a document has been built using DocExpress, several other operations may be necessary. These operations are briefly described in this chapterTERM1="Front Matter" TERM2="generating" TERM3="using FrameMaker"TERM1="Document" TERM2="front matter" TERM3="generating"TERM1="FrameMaker" TERM2="generating front matter"Generating Front MatterIntroductionDocExpress provides templates for the front matter of the document including the Table of Contents (TOC), List of Figures (LOF), List of Tables (LOT) and List of Appendixes (LOA). The facilities of Word are used to automatically produce this information. For information on how to generate the TOC, LOF, LOT, and LOA, see the Microsoft Word User's Guide and Word's On-Line Help. ID="38625"Document CleanupIntroductionDocExpress provides many facilities for automatically formatting the generated document. However, some manual cleanup may still be necessary, such as: n Remove Development Guidancen Cleanup Diagramsn Modify Document's FormatHow these operations are performed using Word is described in the following sections. Removing Development GuidanceIn the final document, the Development Guidance should not be included. The document templates have been structured so that this instructional text is readily identified and can be easily removed. How to remove Development GuidanceΣ To remove Development Guidence, run the rmguide macro available from the Tools Macro... option.Alternatively, the guidance text may be removed manually following the procedure outlined below.1 Place the Microsoft Word cursor in the document.2 Under the Edit menu on the Microsoft Word menu bar, select the Replace menu option. 3 On the Replace window, enter "*" in the Find What field and leave the Replace With field empty as shown below.FILENAME="01087.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxw_mswd.fm5.mif"4 Select Format | Style. 5 Select the appropriate style, e.g., guide.DID_text.6 Select Replace All option.7 Repeat steps 5 through 6 for all other guidance styles.TERM1="Diagram" TERM2="cleanup in document"TERM1="Document" TERM2="cleanup diagrams"Cleaning up diagramsThe appearance of some diagrams extracted from the CASE tool may not be acceptable in the document. For example, some objects may appear closer together, text may over-run objects and other text, text may be too small to be legible, etc. Generally, these problems occur because the allocated area for the diagram in the document is much smaller than its size in the CASE tool. DocExpress sizes the diagram to fit within the available space within the document. Many of these difficulties can be resolved by following the diagram layout guidance in REFID="35482" TYPE="XREF-TEXTCOPY"Chapter 3, Development Guidelines for ObjectTeam. Use Microsoft Word facilities to create a larger presentation area for these diagrams by changing their orientation from portrait to landscape. For additional information on how to rotate the diagrams in Microsoft Word, see the Microsoft Word User's Guide and Word's On-Line Help.Note: For the sake of efficiency, Cayenne does not recommend changing the appearance of a diagram using the Word. However, in the FINAL document, large diagrams may be re-sized. TERM1="Document" TERM2="modify format"Modifying the document's formatSometimes the format of the document or some of its styles may not have the desired properties. You can modify the properties of any styles using Word. For information and guidance on when and how to change the styles, refer to REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress Templates. For additional information on how to change the formatting styles in Microsoft Word, see the Microsoft Word User's Guide and Word's On-Line Help.Chapter 9 Customizing ID="37519"DocExpressTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress User GuideIntroductionDocExpress was designed to be tailored to a customer's individual needs. It may be customized to support other standards and development methods, and to link with other engineering repositories. The sections below describe the customization possible with DocExpress. This chapter provides guidelines for customization of the DocExpress 2.3 installation. Contact a Cayenne Software representative if there are any problems with the customization.In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13896" TYPE="XREF-TEXTCOPY"DocExpress 2.3 and X Window System Resources 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30757" TYPE="XREF-TEXTCOPY"DocExpress Message Pad 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="10388" TYPE="XREF-TEXTCOPY"Interleaf Executable Directory 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18169" TYPE="XREF-TEXTCOPY"Changing the Defaults 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37491" TYPE="XREF-TEXTCOPY"Error Log 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'11COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26820" TYPE="XREF-TEXTCOPY"Modifying the Documentation System Menu 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'12COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38642" TYPE="XREF-TEXTCOPY"Modifying an Existing Document Template 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'16COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14812" TYPE="XREF-TEXTCOPY"Adding a Template to an Existing Standard 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34949" TYPE="XREF-TEXTCOPY"Adding Support for Other Standards 9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19TERM1="X Resources"ID="13896"DocExpress 2.3 and X Window System ResourcesIntroductionThis section applies to DocExpress on UNIX-based systems only.Default Motif settingsDocExpress uses the default Motif settings for colors and fonts used in its windows and menus. The appearance of the DocExpress windows and fonts may be changed by modifying the default Motif settings. Personal X resourcesYour default X window settings are contained in the .Xdefaults file. If you want to change your personal settingsm you can edit the .Xdefaults file or load another X window resource database to override these defaults.DocExpress appends default X resource settings to your personal .Xdefaults file when you run the user_install script. The default resources are located in the file TERM1="DocEXPRESS" TERM2="fonts"TERM1="X Resources" TERM2="DocEXPRESS sample"TERM1=".Doc_resources"$ATAHOME/doc/samples/.Doc_resources. The .Xdefaults file is loaded each time you start the X Window System. If you use another resource database, you will need to load that database each time you want to use those resources. TERM1="X Resources" TERM2="personal"How to change resources for personal useΣ To set resources in a resource database, use one of the two methods described below:n Set the resources you want to override in the $HOME/.Xdefaults file.n Modify and merge the $ATAHOME/doc/samples/.Doc_resources file with the existing resource database. To merge the sample X resources file with the existing resource database, type: xrdb -merge $ATAHOME/doc/samples/.Doc_resourcesApplying your changesFor the changes to take effect, you must quit and restart DocExpress. If you have modified the .Xdefaults file, you must restart the X Window System or use the xrdb program to merge the changed resource file. For more information about the xrdb program, see your X Window System documentation. TERM1="X Resources" TERM2="HP VUE"Changing Personal Resources when using HP VUEHP VUE reads personal resources from the vue.resources file, not .Xdefaults file. If your session is set to restore the home session, modify the file:~/.vue/machine_name:0/home/vue.resourcesOtherwise, modify:~/.vue/sessions/current/vue.resourcesFor more information, see your HP VUE documentation.How to change your HP VUE resourcesΣ To change your resources when using HP VUE: 1 Set the resources you want to override in the vue.resources file.2 Load the resource database. xrdb -load vue.resources3 Make sure the settings will be saved for the next session.If your session is set to restore the home session, you must run vuestyle and set the home session. If your current session is set to restart the current session, the current resource database (the one you loaded) is automatically saved for the next session.TERM1="X Resources" TERM2="resource files"Editing Resource FilesResource files are text files. You can edit them with any standard UNIX text editor. The easiest way to edit resource files is to copy an existing resource file.In the resource file, each resource must be on a separate line. The resource setting consists of a resource label, a colon (:), space (actually one or more spaces or tabs), and the resource value.The DocExpress resource label must appear exactly as shown above. As with all X Window System resources, you can change the capitalization of the first letter of the resource label to specify precedence. Resources that begin with an uppercase letter take precedence over those that begin with a lowercase letter. For more information, see your X Window System documentation.TERM1="DMP"TERM1="DocEXPRESS Message Pad"ID="30757"DocExpress Message PadIntroductionThis section applies to DocExpress on UNIX-based systems only.Message PadThe DocExpress Message Pad is an xterm that displays error messages and other useful information. The width, height, font and location of the Message Pad may be specified as well as how many off-window scroll lines will be saved. docexpress [-width #characters] [-height #lines] [-xoff #pixels] \ [-yoff #pixels] [-scroll_lines #lines] [-fn font] [-help]For complete description of options and their syntax see the DocExpress Utilities Guide. TERM1="ILEAF_BIN"ID="10388"Interleaf Executable DirectoryIntroductionThis section applies to DocExpress on UNIX-based systems only.You can open Interleaf documents from within the DocExpress Build window. Before you can do this, you must set the DocExpress configuration variable ILEAF_BIN to the full path of the Interleaf application executable file.How to set the ILEAF_BIN variableΣ To set the ILEAF_BIN configuration variable:1 Open the DocExpress Configuration File editor.FILENAME="01088.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"2 Select ILEAF_BIN and enter a value. For example, for Interleaf 5 it could be:/interleaf/ileaf5/bin/ileafFor Interleaf 6 it could be:/apps/ileaf6/bin/ileaf6How to open Interleaf documentsΣ To open any Interleaf document from within DocExpress:1 Double-click on the document name in the scroll box of the Build window.The Interleaf desktop is launched and the selected file is opened.FILENAME="01089.tif" ORIGSEQ="2" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"TERM1="Customization" TERM2="user interface" TERM3="changing defaults"TERM1="User Interface" TERM2="changeing defaults"ID="18169"Changing the DefaultsIntroductionDocExpress maintains default settings for many of the items available through its user interface. The following sections describe two ways to modify these default settings. n Changing the DocExpress Configurationn Saving the desired settings on the Build and Load windows.TERM1="DocEXPRESS" TERM2="configuration" TERM3="customization"TERM1="User Configuration" TERM2="customization"DocExpress ConfigurationEach user may personalize the DocExpress user interface for their own needs by modifying their default configuration. The default configuration is automatically set during the setup process. Some aspects of the user interface that are controlled by the configuration are: n The default Document Publishing System on the Load windown The default Standard on the Load windown The default directory for the "Other" option on the Standard's List on the Load window pull down menun The default document publishing systems shown on the Build window. n The CASE Tool on the Build windown The default Method for the CASE Tool on the Build windowHow to change the default DocExpress configurationΣ To modify the DocExpress configuration, select Options | Configurations File | Edit in the Build or Load window.The Configuration Editor is displayed. FILENAME="01090.tif" ORIGSEQ="3" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"Each aspect of DocExpress that may be configured is controlled by a variable. For more information on these variables and their valid options, see REFID="12393" TYPE="XREF-TEXTCOPY"Loading The Variable Set on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4Note: Do NOT modify the values of the following variables unless instructed to do so: INPUT_DOC, VAR_FILE, and FRAME_BUILDER_FREE. These variable are modified automatically by DocExpress.Users may Add, Change, and Delete configuration variables. Variables may be added by selecting the <New Variable> in the scroll list and entering the variables name, value, and description in the respective fields at the top the Configuration Editor window. The values entered are saved by pressing the Add button. The value of a variable is changed by selecting the variable in the scroll list. When a variable is selected, its name and value are displayed in the corresponding fields at the top of the Configuration Editor's window. The user's modifications are saved by pressing the Change button. Changing a variable's name creates a new variable. FILENAME="01091.tif" ORIGSEQ="4" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"To delete a variable, select the variable in the scroll list and press the Delete button. Note: Users should not add or delete configuration variables. By default, DocExpress only recognizes the predefined variables. Deleting existing variables may have adverse effects on the operation of DocExpress. For assistance with the use of the Configuration Editor, press the Help button at any time. DocExpress will display the Configuration Editor Help window. FILENAME="01092.tif" ORIGSEQ="5" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"To exit the Configuration Editor, press the Done button. TERM1="Customization" TERM2="user interface" TERM3="changing defaults"TERM1="User Interface" TERM2="Save Current Settings... Menu"TERM1="Menus" TERM2="Save Current Settings... Menu"The Save Current Settings... MenuDocExpress also provides the Save Current Settings... menu option for the user to set the default values of the Document Publishing System and Standard options on the Load window and the Document Publishing System, CASE Tool, and Method on the Build window. Once the desired settings have been saved, the Load or Build window will use those settings as defaults upon activation. To display the new values, exit DocExpress, restart DocExpress, and select the desired Load or Build button from the main DocExpress window. TERM1="Configuration" TERM2="error log"TERM1="Error Log"ID="37491"Error LogIntroductionMost DocExpress errors and warnings are automatically placed into an error log. The name and location of the error log can be set by selecting the Set.. option on either the Load or Build windows.FILENAME="01093.tif" ORIGSEQ="6" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"DocExpress will display the Set Error Log window. The current name and location of the error log may be modified by placing the cursor into the file name field and editing as necessary. When the modifications are completed, press the OK button. FILENAME="01094.tif" ORIGSEQ="7" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"TERM1="Customization" TERM2="user interface" TERM3="Document Publishing System Menu"TERM1="User Interface" TERM2="Document Publishing System Menu" TERM3="customization"TERM1="Menus" TERM2="Document Publishing System Menu" TERM3="customization"ID="26820"Modifying the Documentation System MenuIntroductionThe values for the Documentation System menu are defined in n UNIX: $ATAHOME/doc/templates/doc_system_listn Windows: %ATAHOME%\doc\templates\docsysFILENAME="01095.tif" ORIGSEQ="8" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"In the file, the string on the left side of the equal sign (=) is used for the menu selection (e.g., Interleaf). The string on the right side of the equal sign (=) is used for the name of the directory which contains the templates in the format of the specified document publishing system (e.g., ileaf). Comment lines start with a pound sign ( # ). # FrameMaker=makerFrameBuilder=builderInterleaf=ileaf#The doc_system_list/docsys file may be modified with a text editor. Individual entries may be effectively removed by changing them to comment lines. Adding menus or modifying the directory name in this file should correspond to changes in the DocExpress directory structure. For a current list of supported documentation publishing systems, refer to the ObjectTeam Certification matrix on the CD.TERM1="Customization" TERM2="user interface" TERM3="Standards Menu"TERM1="User Interface" TERM2="Standards Menu" TERM3="customization"TERM1="Menus" TERM2="Standards Menu" TERM3="customization"ID="34375"Modifying the Standards MenuIntroductionThe values for the Standards Menu are defined in n UNIX: $ATAHOME/doc/templates/dps/TERM1="Customization" TERM2="user interface" TERM3="standards_list file"standards_listn Windows: %ATAHOME%\doc\templates\dps\standardwhere dps is one of frame, ileaf, or msword. FILENAME="01096.tif" ORIGSEQ="9" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"In the standards_list file, the string on the left side of the equal sign (=) is used for the menu selection (e.g., DOD-STD-2167A). The string on the right side of the equal sign (=) is used for the name of the directory which contains the document templates for the standard (e.g., 2167A). Comment lines start with a pound sign ( # ). #ANSI/IEEE=IEEEDOD-STD-2167A=2167AMIL-STD-490A=490AISO 9000-3/6592=ISOMIL-STD-498=498Other=other#The standards_list file may be modified with a text editor. Individual entries may be effectively removed by changing them to comment lines. Adding menus or modifying the directory name in this file should correspond to changes in the DocExpress directory structure. See REFID="34949" TYPE="XREF-TEXTCOPY"Adding Support for Other Standards on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19. Note: In the standards_list file, the other on the right side of the equal sign (=) is not a directory, but rather a directive for DocExpress to examine the configuration file for the name of the appropriate directory. This entry should not be modified. TERM1="Customization" TERM2="user interface" TERM3="Document Templates List"TERM1="User Interface" TERM2="Document Templates List" TERM3="customization"TERM1="Menus" TERM2="Document Templates List" TERM3="customization"ID="31424"Modifying the Document Templates ListIntroductionThe Document Templates available for a particular standard and document publishing system are shown in a Document Templates scroll list. The Document Templates scroll lists are generated from:n UNIX: $ATAHOME/doc/templates/dps/standard/templates_listn Windows: %ATAHOME%\doc\templates\dps\standard\templswhere dps is frame, ileaf, or msword and standard is 1521B, 2167A, 2168, 490A, 7935A, 973, and 498 for MIL-STD-1521B, DOD-STD-2167A, DOD-STD-2168, MIL-STD-490A, DOD-STD-7935A, MIL-STD-973, and MIL-STD-498 respectively. FILENAME="01097.tif" ORIGSEQ="10" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"In the templates_list file for DOD-STD-2167A shown below, the string on the left side of the equal sign (=) is used for an entry in the scroll list (i.e., IDD - Interface Design Document). The string on the right side of the equal sign (=) is used for the name of the directory which contains the parts of the document templates (e.g., IDD). Comment lines start with a pound sign ( # ). # CRISD - Computer Resources Integrated Support Document=CRISDCSOM - Computer System Operator's Manual=CSOMFSM - Firmware Support Manual=FSMIDD - Interface Design Document=IDDIRS - Interface Requirements Specification=IRSSDD - Software Design Document=SDDSDP - Software Development Plan=SDPSPM - Software Programmer's Manual=SPMSPS - Software Product Specification=SPSSRS - Software Requirements Specification=SRSSSDD - System/Segment Design Document=SSDDSSS - System/Segment Specification=SSSSTD - Software Test Description=STDSTP - Software Test Plan=STPSTR - Software Test Report=STRSUM - Software User's Manual=SUMVDD - Version Description Document=VDD#The templates_list file may be modified with a text editor. Individual entries may be effectively removed by changing them to comment lines. Adding menus or modifying the directory name in this file should correspond to changes in the DocExpress directory structure. See REFID="14812" TYPE="XREF-TEXTCOPY"Adding a Template to an Existing Standard on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17. TERM1="Customization" TERM2="document templates" TERM3="supplied with DocEXPRESS"ID="38642"Modifying an Existing Document TemplateIntroductionGreat care has been taken to provide high quality predefined document templates for DocExpress. However, not all the needs of our customers can be anticipated. Therefore, the predefined templates have been developed such that they may be easily modified by the user. Modifications to an existing Document Template, including its structure, format, and content, may be performed using the appropriate document publishing system in conjunction with the DocExpress Variable Editor. The modifications may be performed on a personal copy of the template after using the DocExpress Load capability or directly on the default templates provided in the DocExpress directories. For more information on modifying document templates, see REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress TemplatesThe customized templates may be placed in a single directory and accessed via the DocExpress user interface by selecting the Other menu option on the Standards menu shown in the figure below. The default directory for this menu option is $HOME. To change the default directory, see the REFID="18169" TYPE="XREF-TEXTCOPY"Changing the Defaults on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'7. FILENAME="01098.tif" ORIGSEQ="11" ORIGTYPE="I" ORIGDOC="../../sources/dx_ug/dxu_cust.fm5.mif"Alternatively, the user may prefer access to tailored document templates directly from the standards and templates list. For more information on this alternative, see REFID="34949" TYPE="XREF-TEXTCOPY"Adding Support for Other Standards on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19.TERM1="Customization" TERM2="document templates" TERM3="adding a template"ID="14812"Adding a Template to an Existing StandardIntroductionDocExpress provides all of the required document templates for each of the standards it supports. However, a user may wish to add custom document templates to those provided. How to add a templateΣ To add user-defined document templates to the predefined templates supported by DocExpress: 1 Create the Document Template. The predefined document templates provided with DocExpress may be modified to meet the requirements of a new document template or the template may be developed from scratch using the appropriate document publishing system. For more information on modifying templates, see REFID="32776" TYPE="XREF-TEXTCOPY"Chapter 4, Customizing DocExpress TemplatesNote: If using Interleaf, save the new document template in Interleaf ASCII format. 2 Create a directory for the new document template in:- UNIX: $ATAHOME/doc/templates/dps/standard- Windows: %ATAHOME%\doc\templates\dps\standardWhere dps is ileaf, frame, or msword, and standard is 2167A, 490A, IEEE, ISO, and 498 for DOD-STD-2167A, MIL-STD-490A, ANSI/IEEE, ISO 9000-3/6592, and MIL-STD-498 respectively. 3 Copy the parts of the document template created in step 1 into the directory created in step 2. 4 Create Variable Sets for the new document template. A Variable Set is added to DocExpress for every CASE tool and development method that provides information for the document. Adding a Variable Set is not necessary, if the CASE tool provides no information for a particular document. DocExpress provides a default Variable Set for every document which is not mapped to a development method. The default Variable Set is:- UNIX: $ATAHOME/doc/var_files/general/.var_file- Windows: %ATAHOME%\doc\var_files\general\varfile5 Create a varfile in:- UNIX: $ATAHOME/var_files/ot/standard- Windows: %ATAHOM%\var_files\ot\standard. Where standard is currently 2167A, 490A, IEEE, ISO, 498 for DOD-STD-2167A, MIL-STD-490A, ANSI/IEEE, ISO 9000-3/6592, MIL-STD-498 respectively. - The string on the left side of the leftmost equal sign (=) is a variable used in the document template (e.g., EXT_IF_DIAG_GET). - The string between the equal signs is the definition of the variable. - The string on the right side of the rightmost equal sign (=) is optional and is the description of the variable (e.g., Command to extract a figure depicting the external interfaces). The right most equal sign (=) must be present irrespective of whether a description is present or not. Comment lines start with a pound sign ( # ). 6 Create a .template_type file (UNIX) or templtyp file (Windows) in the new document template directory created in steps 2 and 3. 7 An example of the template type file for the SRS of DOD-STD-2167A is shown below. #########################################STANDARD=2167ADOCUMENT_TYPE=SRS8 The string on the left side of the equal sign (=) is a keyword (e.g., DOCUMENT_TYPE). The string on the right side of the equal sign (=) is used for the names of the directories for the standard and the document template (e.g., SRS). These must match the directory structure used for the Variable Sets created in step 4 and associated with this document template. Comment lines start with a pound sign ( # ). 9 Modify the DocExpress menus as appropriate to add the new document template to the Document Template menu selections for the desired standard. REFID="31424" TYPE="XREF-TEXTCOPY"Modifying the Document Templates List on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14. TERM1="Customization" TERM2="standards" TERM3="adding a standard"ID="34949"Adding Support for Other StandardsIntroductionDocExpress provides document templates for a wide variety of military, commercial, and international standards. However, a user may wish to add other standards to those supported by DocExpress such as company standards. User-defined standards may be added to the predefined standards supported by DocExpress using the steps below: 1 Create a directory for the new standard in:- UNIX: $ATAHOME/doc/templates/dps. - Windows: %ATAHOME%\doc\templates\dps. where dps is one of ileaf, frame, or msword. 2 For each document template of the new standard, follow the procedure in REFID="14812" TYPE="XREF-TEXTCOPY"Adding a Template to an Existing Standard on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17. 3 In the directory created in step 1, create the file templates_list (UNIX) or templs (Windows). An example of the templates list file for DOD-STD-2167A is shown below. # CRISD - Computer Resources Integrated Support Document=CRISDCSOM - Computer System Operator's Manual=CSOMFSM - Firmware Support Manual=FSMIDD - Interface Design Document=IDDIRS - Interface Requirements Specification=IRSSDD - Software Design Document=SDDSDP - Software Development Plan=SDPSPM - Software Programmer's Manual=SPMSPS - Software Product Specification=SPSSRS - Software Requirements Specification=SRSSSDD - System/Segment Design Document=SSDDSSS - System/Segment Specification=SSSSTD - Software Test Description=STDSTP - Software Test Plan=STPSTR - Software Test Report=STRSUM - Software User's Manual=SUMVDD - Version Description Document=VDD#The string on the left side of the equal sign (=) is used for the menu selection (e.g., SRS - Software Requirements Specification). The string on the right side of the equal sign (=) is used for the name of the directory which contains the parts of the document templates (e.g., SRS). An entry for each new document template should be included in this file.4 Modify the DocExpress menus as appropriate to add the new standard to the Standards Menu selections. REFID="34375" TYPE="XREF-TEXTCOPY"Modifying the Standards Menu on pagename='nbsp' font=courier charset=iso8859-1 code=160 descr='[nbsp]'9name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13 Appendix A Documentation ID="41657"RequirementsIntroductionThis appendix provides a brief description of the general documentation requirements for the DoD-type documents, including DOD-STD-2167A, MIL-STD-490A, and MIL-STD-498 Data Items.In this appendixThis appendix contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38770" TYPE="XREF-TEXTCOPY"Style, Format and Identification of Specifications Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34543" TYPE="XREF-TEXTCOPY"Changes and Revisions Aname='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19ID="38770"Style, Format and Identification of SpecificationsGeneralThis section covers the subjects of style, format and a general discussion of preparing specifications with a document preparation system to comply with requirements for military documents.TERM1="Specifications" TERM2="sections of"Sectional Arrangement of SpecificationsFor the most part, the specifications consist of six numbered sections and appendixes as required. Some of the numbering and titles depend on a specific Data Item Description, but generally adhere to the following pattern:n Section 1 name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Scopen Section 2 name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Applicable Documentsn Section 3 name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Requirementsn Section 4 name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Quality Assurance Provisionsn Section 5 name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Preparation For Deliveryn Section 6 name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Notesn Appendix and IndexEach section contains only the subject matter which is within its scope. Except for appendixes, if there is no information pertinent to a section, the following statement should be made after the section heading:"This section is not applicable to this specification"TERM1="Language" TERM2="style"Language StyleIntroductionThe essence of the specification is its technical content, and it should be presented in a language free from ambiguity and vagueness. The selection of words and phrases used in the specification should be as simple as possible and still convey the intended meaning. What does this all mean?n Consistency in terminology and organization of material contributes to the clarity and usefulness of the specification.n Sentences should be as short and concise as possible.n Punctuation should be used to aid in reading the material:- Well planned word order requires a minimum of punctuation- If extensive punctuation is necessary for clarity, it is better to rewrite the sentence into several smaller ones.n Sentences with compound clauses, such as multiple requirement statements, must be converted into short concise ones.Capitalization, Spelling, etc.The US Government Printing Office Style Manual should be used as a guide for capitalization, spelling, punctuation, syllabification, etc. Merriam-Webster's New International dictionary (latest revision) should be consulted when the Style Manual does not provide the necessary guidance. Abbreviations Only the applicable standard abbreviations should be used throughout the specification document. These abbreviations are listed in the latest version of MIL-STD-12. Some exceptions are permitted in the titles of specifications which are defined in another Government document name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Cataloging Handbook H6-1. Any other abbreviations in a specification must be in common usage so that it cannot be misinterpreted.The first time an abbreviation is used in the text, it must be placed in parentheses following the fully spelled out word or a term it abbreviates; e.g., miles per hour (mph). However, an abbreviation used in a table, figure or equation must be explained in the footnote text.SymbolsSymbols are not accepted in text, but could be used in tables, equations and figures. Graphic symbols must be in accordance with the military standards.Commonly Used Words and PhrasingThere are certain words and phrases that are frequently used in a specification. It is important that the following rules are adhered to when those phrases and words are used:n Referenced documents must be cited in the following manner:- conforming to ... - as specified in ... - in accordance with ... n Unless otherwise specified is used to indicate an alternative. The phrase must always be at the beginning of the sentence, and, if possible, at the beginning of the paragraph. The meaning of this phrase must be clarified by providing a reference such as to the Notes Section.n If there are alternatives in phrases, such as ... to determine compliance with ... or ... to determine conformance to ..., the same wording should be used throughout the document.n The positive limitations must be stated in the following manner: ... shall be no greater than ... n The emphatic form of the verb must be used throughout the specification document; e.g., shall process, shall be turned, etc. However, for specific test procedures, the imperative (e.g. turn, process, etc.) form may be used provided the entire method is preceded by the following tests shall be performed, or related wording.n The capitalization of such words as drawing, data flow diagram, structure chart, etc., is done only when they are used immediately preceding the number of a document (chart, diagram, drawing, etc.). An example of this is Data Flow Diagram 0, or Structure Chart SC-1.n Federal and military standards and handbooks must be identified in the text only by their symbol and number; e.g. DOD-STD-2167A and not DOD-STD-2167A standard.Use of "Shall", "Will", "Should", and "May"The following rules apply when using the shall, will, should and may words:n Use shall whenever a specification is expressing a provision that is binding, i.e., a requirement.n Use should and may whenever it is necessary to express non-mandatory provisions.n Will may be used to express a declaration of purpose such as a design goal. However, it may be necessary to use will in cases where the simple future tense is required, i.e., the power to the system will be supplied by the aircraft's APU.TERM1="Paragraphs" TERM2="numbering"Paragraph NumberingNumberingEach paragraph and subparagraph must be numbered consecutively within each section of the specification. The period is used to separate the number representing each breakdown. For example:3. REQUIREMENTS3.1 First Paragraph 3.1.1 First Subparagraph3.2 Second Paragraph 3.2.1 First Subparagraph 3.2.2 Second SubparagraphItemization within a paragraph or subparagraph should be identified by lower case letters to avoid any possible confusion with paragraph numerals. Additionally, paragraph numbering must be limited to seven levels. This last requirement is introduced to promote clarity of text. If a specification requires more than seven levels, it is possible that the Configuration Item (CI) it describes is too complex, and may be necessary to subdivide it into several smaller CIs.TERM1="Paragraphs" TERM2="identifications"Paragraph IdentificationIdentificationEach paragraph should be given a subject identification, e.g., 3.4.1.1 Inputs. The paragraph's subject identification must be capitalized on the first letter of the first word only. Additionally, primary paragraph identifications should be boldfaced type and subparagraphs italicized. If neither boldfaced nor italic type is available, the paragraph identification must be underlined. Thus, the above example may be presented in one of the two ways:3. REQUIREMENTS3.1 First paragraph 3.1.1 First subparagraph3.2 Second paragraph 3.2.1 First subparagraph 3.2.2 Second subparagraph... or ...3. REQUIREMENTS3.1 First paragraph 3.1.1 First subparagraph3.2 Second paragraph 3.2.1 First subparagraph 3.2.2 Second subparagraphNotice that the section identification is fully capitalized. Additionally, it should be bolded. At the same time, section, paragraph and subparagraph numbers may be bolded or italicized. Thus, the above example may be presented as follows:3. REQUIREMENTS3.1 First paragraph 3.1.1 First subparagraph3.2 Second paragraph 3.2.1 First subparagraph 3.2.2 Second subparagraphTERM1="Underlining"UnderliningUnderliningAs a rule one should not underline, bold, capitalize or italicize any portion of a paragraph for the sake of emphasis. The only exception being the paragraph identification. The reasoning for this is simple, all of the requirements are important in obtaining the desired system.TERM1="Cross References"Cross ReferencesCross-referencesCross references, that is references to parts within the specification, must be used only to clarify the relationship within the specification and to avoid inconsistencies and unnecessary repetition. When the cross reference is made, it should be to a specific paragraph number, and the word paragraph should not appear.TERM1="Figures"FiguresIntroductionA figure is considered to be a picture or a graph, and is an integral part of the specification. It must be consistent with, and related to, the text of the associated paragraph. It is important to note that figures should not be confused with dated and numbered drawings referenced in Section 2 and physically incorporated in the specification.Location of Figures in SpecificationEach figure should be placed within or following the paragraph containing a reference to it. If figures are numerous and may cause difficulty in understanding or interpretation of the specification, they may be placed in numerical sequence at the end of the specification before any appendix or index.Preparation of FiguresAll figures must be titled and numbered consecutively with Arabic numerals in the order in which they are initially referenced in the specification.TERM1="Tables"TablesIntroductionA table is an arrangement of data in rows and columns. It should be used within the specification when data can thus be presented more clearly than text. Elaborate and complicated tables should be avoided, if possible.Location of Tables in SpecificationJust as figures, each table should be placed within or following the paragraph containing a reference to it. If space does not permit, a table should be placed at the beginning of the next page, or if extensive, on a separate page. If tables are numerous and cause difficulty in understanding or interpreting the specification, they may be placed in numerical sequence at the end of the specification before any appendix or index.Preparation of TablesThe tables must be numbered consecutively with Roman numerals in the order in which they are initially referenced in the specification. The number and title shall be placed above the table. Data included in the text must not be repeated in the table. Tables must be boxed in and ruled. If a table is too wide to be placed in a normal position on the page, it should be rotated counterclockwise 90 degrees.TERM1="Foldouts"FoldoutsFoldoutsFoldouts should be avoided. Large figures or tables may be broken out so that they are printed on facing pages. When required, foldouts should be grouped in one place, preferably at the end of the specification in the same location as figures, with proper references in the text to their location.TERM1="Footnotes"FootnotesFootnotes to TextGenerally, footnotes to the text should be avoided. If needed, a footnote to the text should be placed at the bottom of the page containing the reference to it.Footnotes to Tables and FiguresFootnotes to a table or a figure should be placed below the table or the figure. The footnotes may contain the required information that cannot be presented as data in tables or graphically in figures. Footnotes must be numbered separately from the table or the figure. Where numerals in the footnote numbering schema may lead to ambiguity, e.g., chemical formulas, other symbols may be used.Contractual and Administrative RequirementsRequirementsGenerally, the specification should not contain any requirements that are properly part of the contract. These include such items as cost, time of delivery, method of payment, provisions for reworking rejected items, etc. Certain contractual and administrative information may be included in Section 6, however, that option must be exercised with caution, and limited to essential matters.TERM1="Definitions"Definitions in SpecificationsDefinitionsIf definitions for terms are needed in the specification, generally, they should be included in Section 6. When this is done, a parenthetical reference to the applicable paragraph in Section 6 must follow the terms to indicate the existence of a definition.TERM1="References" TERM2="to other documents"References to Other DocumentsReferencesReferencing is the acceptable method for including requirements in specifications where this eliminates the repetition of requirements and tests that are described elsewhere. Chain referencing should be avoided. The reference should be made to a title, specifically identified requirement, or other definitive designation, and not to the specific paragraph numbers in other documents. The reasoning for this is simple, other documents may change, and, thus possibly the paragraph numbering in them.TERM1="Security Markings"TERM1="Security Markings"Security Marking of SpecificationsSecurity markingsSpecifications containing classified information must be marked and handled in accordance with the security regulations specified in the latest revision of DOD 5220.22-MTERM1="Specifications" TERM2="identification"Identification of SpecificationsIntroductionWhen preparing a specification, it must be numbered and dated on each page. The identification number with the date below it must always appear at the top of the page opposite the binding edge.Identification of Government Activity SpecificationsThis series of specifications is uniquely identified by the code identification of the Government design agency as listed in Cataloging Handbook H4. This identification can be a combination of alphanumeric characters and dashes, and should not contain more than fifteen characters, excluding dashes and revision symbols.Identification of Contractor SpecificationsThis series of specifications is uniquely identified by the manufacturer's code identification of the design contractor as listed in Cataloging Handbook H4 and by an identification assigned by the contractor. This identification can be a combination of alphanumeric characters and dashes, and should not contain more than fifteen characters, excluding dashes and revision symbols.Revision SymbolsRevision symbols are upper case letters assigned alphabetically, starting with "A", for each succeeding revision, and must follow the specification identification. The letters "I", "O" and "Z" must not be used in the revision designation since they can be confused with numerals.TERM1="Changes"TERM1="Revisions"ID="34543"Changes and RevisionsGeneralWhen necessary, the specification must be corrected or updated by means of either change or revision. A change is accomplished by the issue of a Specification Change Notice (SCN) and attached change pages. A revision consists of a complete reissue of the entire specification, all pages identified by the same revision letter. As a general rule no more than five SCNs should be issued against a particular revision.ChangesSpecification Change Notice (SCN)The SCN is a document used to propose and record changes to a specification. The page changes are considered an integral part of the SCN.Changed PagesUpdated and reissued pages must be complete reprints of the old pages suitable for incorporation by removal of old pages and insertion of new ones. All portions affected by the change must be indicated by a symbol in the right hand margin adjacent to, and encompassing all changed portions. Change NumberingSCN numbers must be assigned in sequence, beginning with 1, against the current revision of a specification. Thus, when the specification is revised, the SCN numbers begin again with 1.Identification of Changed PagesEach changed page must be identified with the specification number and the applicable revision letter. The date under the specification identification must be the same as the one entered on the SCN form.Numbering of Changed PagesThe changed pages should contain the same number as the pages they replace. If it is necessary to replace one old page with several new ones, then the additional pages will contain the original page number plus a suffix lower case letter in alphabetical order beginning with "a". For example, if the old page 5 has been replaced with three new pages then the numbers of the new pages will be 5, 5a, and 5b. If a page has been deleted, then that number must be omitted in the current page sequence.TERM1="Revisions"RevisionsRevisionsA revision of a specification is a reissue of a complete specification and is prepared, issued, and identified in the same manner as the specification it supersedes. The difference is in the identification, the number is followed by an appropriate letter. As stated above, the revision letters must start with letter "A". Each revision must incorporate all of the outstanding proposed changes.Revisions of the specifications must include symbols in the right hand margins of the pages to indicate where changes have been made with respect to prior issue. If such symbols are used, then the following note must be incorporated into the Notes, Section 6, of the specifications:"The margins of this specification are marked with a ________ (describe or show symbol) to indicate where changes (additions, modifications, corrections, deletions) from the previous issue were made. This was done as a convenience only and the Government assumes no liability whatsoever for any inaccuracies in these notations. Bidders and contractors are cautioned to evaluate the requirements of this document based on the entire content irrespective of the marginal notation and relationship to the last previous issue."However, revisions generally occur when there are significant changes in the specification. In this case the following note may be used in lieu of the above."Symbols are not used in this revision to identify changes with respect to the previous issue, due to the extensiveness of the changes."Specification revisions must be issued in the same manner as the original issue, and do not require an SCN.ATTRNAME="MIFconds"GlossaryGlossaryATTRNAME="MIFconds"GlossaryGlossaryATTRNAME="MIFconds"GlossaryAppendix B GlossaryIntroductionThe liberal use of acronyms and abbreviations in standards and documents can sometimes be overwhelming. In addition, their terminology can also be confusing. This appendix contains the most commonly used acronyms, abbreviations and terms used throughout this manual, the standards and their associated documents.The list is by no means all-inclusive. It is expected that DocExpress users are familiar with most of acronyms, abbreviations, and terminology.TERM1="Abbreviations"TERM1="Acronyms"Acronyms and AbbreviationsANSI/IEEETERM1="Abbreviations" TERM2="ANSI/IEEE"TERM1="Acronyms" TERM2="ANSI/IEEE"COLS="2"COLNAME="1" COLWIDTH="106p"COLNAME="2" COLWIDTH="486p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Design DescriptionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SRSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Requirements SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"STCSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test-Case SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test-Design SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"STIRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test-Incident ReportCOLNAME="1" VALIGN="TOP" MOREROWS="0"STITRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test-Item Transmittal ReportCOLNAME="1" VALIGN="TOP" MOREROWS="0"STLCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test LogCOLNAME="1" VALIGN="TOP" MOREROWS="0"STPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"STPSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test-Procedure SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"STSRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test-Summary ReportISOTERM1="Abbreviations" TERM2="DOD-STD-2167A"TERM1="Acronyms" TERM2="DOD-STD-2167A"MIL-STD-498COLS="2"COLNAME="1" COLWIDTH="94p"COLNAME="2" COLWIDTH="498p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ACICOLNAME="2" VALIGN="TOP" MOREROWS="0"Allocated Configuration IdentificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"CASECOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer-Aided Software EngineeringCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDICOLNAME="2" VALIGN="TOP" MOREROWS="0"Contract Data ItemsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Critical Design ReviewCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDRLCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contract Data Requirements ListCOLNAME="1" VALIGN="TOP" MOREROWS="0"CFECOLNAME="2" VALIGN="TOP" MOREROWS="0"Contractor Furnished EquipmentCOLNAME="1" VALIGN="TOP" MOREROWS="0"CICOLNAME="2" VALIGN="TOP" MOREROWS="0"Configuration ItemCOLNAME="1" VALIGN="TOP" MOREROWS="0"CMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Configuration ManagementCOLNAME="1" VALIGN="TOP" MOREROWS="0"CRISDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer Resources Integrated Support DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"CSCCOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer Software ComponentCOLNAME="1" VALIGN="TOP" MOREROWS="0"CSCICOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer Software Configuration ItemCOLNAME="1" VALIGN="TOP" MOREROWS="0"CSDMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer System Diagnostic ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"CSOMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer System Operator's ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"CSUCOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer Software UnitCOLNAME="1" VALIGN="TOP" MOREROWS="0"DBMSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data Base Management SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"DICOLNAME="2" VALIGN="TOP" MOREROWS="0"Data ItemCOLNAME="1" VALIGN="TOP" MOREROWS="0"DIDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data Item DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DoDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Department of DefenseCOLNAME="1" VALIGN="TOP" MOREROWS="0"ECPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Engineering Change ProposalCOLNAME="1" VALIGN="TOP" MOREROWS="0"FCACOLNAME="2" VALIGN="TOP" MOREROWS="0"Functional Configuration AuditCOLNAME="1" VALIGN="TOP" MOREROWS="0"FCICOLNAME="2" VALIGN="TOP" MOREROWS="0"Functional Configuration IdentificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"FQRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Formal Qualification ReviewCOLNAME="1" VALIGN="TOP" MOREROWS="0"GFECOLNAME="2" VALIGN="TOP" MOREROWS="0"Government Furnished EquipmentCOLNAME="1" VALIGN="TOP" MOREROWS="0"GFSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Government Furnished SoftwareCOLNAME="1" VALIGN="TOP" MOREROWS="0"HOLCOLNAME="2" VALIGN="TOP" MOREROWS="0"Higher Order LanguageCOLNAME="1" VALIGN="TOP" MOREROWS="0"HWCICOLNAME="2" VALIGN="TOP" MOREROWS="0"Hardware Configuration ItemCOLNAME="1" VALIGN="TOP" MOREROWS="0"IDCOLNAME="2" VALIGN="TOP" MOREROWS="0"IdentificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"IDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Interface Design DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"IRSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Interface Requirements SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"MCCRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Mission-Critical Computer ResourcesCOLNAME="1" VALIGN="TOP" MOREROWS="0"MCCSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Mission-Critical Computer SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"PCACOLNAME="2" VALIGN="TOP" MOREROWS="0"Physical Configuration AuditCOLNAME="1" VALIGN="TOP" MOREROWS="0"PDRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Preliminary Design ReviewCOLNAME="1" VALIGN="TOP" MOREROWS="0"RFPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Request For ProposalCOLNAME="1" VALIGN="TOP" MOREROWS="0"RTMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Requirements Traceability MatrixCOLNAME="1" VALIGN="TOP" MOREROWS="0"SCMPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Configuration Management PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Design DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDFCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Development FileCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDLCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Development LibraryCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Development PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"SPMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Programmer's ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"SPSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Product SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"SQEPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Quality Evaluation PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"SRACOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Requirements AnalysisCOLNAME="1" VALIGN="TOP" MOREROWS="0"SRRCOLNAME="2" VALIGN="TOP" MOREROWS="0"System Requirements ReviewCOLNAME="1" VALIGN="TOP" MOREROWS="0"SRSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Requirements SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"SSDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"System/Segment Design DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"SSPMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Standards and Procedures ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"SSRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Specification ReviewCOLNAME="1" VALIGN="TOP" MOREROWS="0"SSSCOLNAME="2" VALIGN="TOP" MOREROWS="0"System/Segment SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"STPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"STRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test ReportCOLNAME="1" VALIGN="TOP" MOREROWS="0"SUMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software User's ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"TRRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Test Readiness ReviewCOLNAME="1" VALIGN="TOP" MOREROWS="0"VDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version Description DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"WBSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Work Breakdown StructureCOLS="2"COLNAME="1" COLWIDTH="114p"COLNAME="2" COLWIDTH="478p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ATPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Acceptance Test PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"ATRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Acceptance Test ReportCOLNAME="1" VALIGN="TOP" MOREROWS="0"DMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"FDBSCOLNAME="2" VALIGN="TOP" MOREROWS="0"File and Data Base SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"IPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Implementation PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"MRSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Manual Routines SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"PMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Program ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"PSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Program SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"SCRCOLNAME="2" VALIGN="TOP" MOREROWS="0"System Change ReportCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"System Design DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"SOMCOLNAME="2" VALIGN="TOP" MOREROWS="0"System Operations ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"STMCOLNAME="2" VALIGN="TOP" MOREROWS="0"System Technical ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"UMCOLNAME="2" VALIGN="TOP" MOREROWS="0"User ManualTERM1="Abbreviations" TERM2="MIL-STD-498"TERM1="Acronyms" TERM2="MIL-STD-498" UNIX only?COLS="2"COLNAME="1" COLWIDTH="106p"COLNAME="2" COLWIDTH="486p"COLNAME="1" VALIGN="TOP" MOREROWS="0"CASECOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer-Aided Software EngineeringCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDRLCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contract Data Requirements ListCOLNAME="1" VALIGN="TOP" MOREROWS="0"CFECOLNAME="2" VALIGN="TOP" MOREROWS="0"Contractor Furnished EquipmentCOLNAME="1" VALIGN="TOP" MOREROWS="0"CICOLNAME="2" VALIGN="TOP" MOREROWS="0"Configuration ItemCOLNAME="1" VALIGN="TOP" MOREROWS="0"CMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Configuration ManagementCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer Operation ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"CPMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer Programming ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"CSCICOLNAME="2" VALIGN="TOP" MOREROWS="0"Computer Software Configuration ItemCOLNAME="1" VALIGN="TOP" MOREROWS="0"DBDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data Base Design DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DICOLNAME="2" VALIGN="TOP" MOREROWS="0"Data ItemCOLNAME="1" VALIGN="TOP" MOREROWS="0"DIDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data Item DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DoDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Department of DefenseCOLNAME="1" VALIGN="TOP" MOREROWS="0"ECPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Engineering Change ProposalCOLNAME="1" VALIGN="TOP" MOREROWS="0"GFECOLNAME="2" VALIGN="TOP" MOREROWS="0"Government Furnished EquipmentCOLNAME="1" VALIGN="TOP" MOREROWS="0"GFSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Government Furnished SoftwareCOLNAME="1" VALIGN="TOP" MOREROWS="0"HOLCOLNAME="2" VALIGN="TOP" MOREROWS="0"Higher Order LanguageCOLNAME="1" VALIGN="TOP" MOREROWS="0"HWCICOLNAME="2" VALIGN="TOP" MOREROWS="0"Hardware Configuration ItemCOLNAME="1" VALIGN="TOP" MOREROWS="0"IDCOLNAME="2" VALIGN="TOP" MOREROWS="0"IdentificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"IDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Interface Design DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"IRSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Interface Requirements SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"IV&VCOLNAME="2" VALIGN="TOP" MOREROWS="0"Independent Verification and ValidationCOLNAME="1" VALIGN="TOP" MOREROWS="0"MCCRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Mission-Critical Computer ResourcesCOLNAME="1" VALIGN="TOP" MOREROWS="0"MCCSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Mission-Critical Computer SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"OCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Operational Concept DocumentCOLNAME="1" VALIGN="TOP" MOREROWS="0"QCRMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Qualification Cross Reference MatrixCOLNAME="1" VALIGN="TOP" MOREROWS="0"RAMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Requirements Allocation MatrixCOLNAME="1" VALIGN="TOP" MOREROWS="0"RFPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Request For ProposalCOLNAME="1" VALIGN="TOP" MOREROWS="0"RTMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Requirements Traceability MatrixCOLNAME="1" VALIGN="TOP" MOREROWS="0"SCOMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Center Operator ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Design DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDFCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Development FileCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDLCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Development LibraryCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Development PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"SIOMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Input/Output ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"SIPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Installation PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"SPSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Product SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"SRSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Requirements SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"SSDDCOLNAME="2" VALIGN="TOP" MOREROWS="0"System/Subsystem Design DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SSSCOLNAME="2" VALIGN="TOP" MOREROWS="0"System/Subsystem SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"STPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"STRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Test ReportCOLNAME="1" VALIGN="TOP" MOREROWS="0"STrPCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Transition PlanCOLNAME="1" VALIGN="TOP" MOREROWS="0"SUMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software User ManualCOLNAME="1" VALIGN="TOP" MOREROWS="0"SVDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Software Version DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SWCOLNAME="2" VALIGN="TOP" MOREROWS="0"SoftwareCOLNAME="1" VALIGN="TOP" MOREROWS="0"VCRMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Verification Cross Reference MatrixCOLNAME="1" VALIGN="TOP" MOREROWS="0"WBSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Work Breakdown StructureTERM1="Terminology"TerminologyTERM1="Terminology" TERM2="DOD-STD-2167A"DOD-STD-2167AAllocated Configuration Identification (ACI) name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The current approved performance oriented specification governing the development of a CSCI that is a part of a higher level CI. The specification (a) defines the functional characteristics that are allocated from those of the higher level CI; (b) establishes the tests required to demonstrate achievement of the allocated functional characteristics; (c) identifies and describes the necessary interface requirements with associated CSCIs and HWCIs; (d) establishes design constraints, if any. Allocated Baseline name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The initial approved Allocated Configuration Identification (ACI). Authentication name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The procedure used by the Government or its representatives in verifying that specification content is acceptable (meets the standards). It does not imply that the Government accepts responsibility for successful performance of the authenticated item.Baseline name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' A configuration identification document or a set of documents formally designated and fixed at a specific time of the configuration item's life cycle. The documents could be in electronic format.Certification name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' A process by which developers provide evidence to the Government that the product meets contractual requirements. This process can be incremental.Computer Software Component (CSC) name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' A functional or logically distinct part of the CSCI. Computer Software Configuration Item (CSCI) name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Computer software designated by the Government for configuration management. Computer software quality name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The degree to which the attributes of the software product enable it to perform its functions. Computer Software Unit (CSU) name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The smallest logical entity specified in the detailed design. It must completely describe a single function/capability in sufficient detail to allow its implementation in code and tested independently of other CSUs. CSUs are the actual physical entities implemented in code. Configuration Identification name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The current approved technical documentation for a configuration item as presented by the specifications, drawings and any other referenced documents. Configuration Item (CI) name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Hardware (HWCI) or Software (CSCI), or a combination of both which is designated by the Government for configuration management. Developmental Configuration name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The developer's software and the associated technical documentation that defines the evolving configuration of a CSCI during development. It describes the software configuration of the design, coding, and testing. Formal test name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' A test conducted in accordance with test plans and procedures approved by the Government and witnessed by its representatives. Its purpose is to show that the software satisfies a specified requirement. Functional Baseline name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The initial approved Functional Configuration Identification (FCI). Functional Configuration Identification (FCI) name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The current approved technical documentation for a CI which identifies (a) all necessary functional characteristics; (b) the tests required to demonstrate achievement of those functional characteristics; (c) the necessary interface characteristics with associated CIs; (d) CI's key functional characteristics and its CSCIs and HWCIs, if any; (e) design constraints, if any. Hardware Configuration Item name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Computer hardware designated by the Government for configuration management. Informal test name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Any test which is not a formal test. Modular Software name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Software that is organized into limited sets of data and code that perform specific functions. Product Baseline name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' The initial approved product configuration identification as specified in DOD-STD-480. Software Development Library name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' A controlled collection of software, documentation, any associated data, tools, and procedures used to develop and support a software product in an orderly manner. Top-down name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' An approach to the development which emphasizes starting with the highest level of a hierarchy and proceeding through progressively lower levels. Examples include top-down design, top-down coding and top-down testing. ATTRNAME="MIFconds"GlossaryGlossaryATTRNAME="MIFconds"GlossaryGlossaryATTRNAME="MIFconds"GlossaryDocExpress Utilities GuideChapter 1 SetupTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress Utilities GuideIntroductionThis chapter describes the configuration of the DocExpress link to the ObjectTeam editors. This chapter describes how to:n Load the default project provided with ObjectTeamn Configure the user's environment to point to the default projectn Modify DocExpress variables to incorporate user-defined engineering dataIn this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21145" TYPE="XREF-TEXTCOPY"Setting Up DocExpress for ObjectTeam 2ID="21145"Setting Up DocExpress for ObjectTeamTERM1="Default Systems" TERM2="installing"Installing the default ObjectTeam projectObjectTeam includes complete systems of engineering data developed with the ObjectTeam editors. These default systems permit a DocExpress user to generate and view sample documents quickly. By default, the DocExpress variable sets for ObjectTeam refer to these systems. When the default systems have been loaded into the ObjectTeam repository, documents may be immediately generated from this engineering data. Sufficient information has been provided in the systems to show the extent a system, developed with the ObjectTeam editors, can be used to satisfy the requirements of the various documentation standards. See the ObjectTeam installation manuals for instructions on installing the default ObjectTeam systems. Configuring the User's EnvironmentBefore running DocExpress, verify that the environment has been initialized to run both DocExpress and ObjectTeam. Furthermore, verify that the ObjectTeam environment variable, M4_levelpath has been set to point to the repository containing the default systems. See the appropriate DocExpress and ObjectTeam manuals for configuring the environment. TERM1="DocEXPRESS Variables" TERM2="modifications"DocExpress Variable ModificationsThe user may modify the DocExpress variable sets such that engineering data developed by the user is incorporated into the generated document rather than the default ObjectTeam projects provided with DocExpress. The variables may be modified using the DocExpress Variable Editor. For information on the use of the Variable Editor see the DocExpress User's Guide & Reference Manual. The names of the variables that reference an ObjectTeam project, configuration, and phase are PROJECT, CONFIG, and PHASE respectively. The name of the variable that references the ObjectTeam project varies depending on the standard and the type of information to be extracted. However, all variables that refer to the ObjectTeam projects generally end with the suffix GROUP. The following table provides the variable names and their default values used in some of the standards to refer to the engineering data.System variablesWINCOLS="3"COLNAME="1" COLWIDTH="151p"COLNAME="2" COLWIDTH="151p"COLNAME="3" COLWIDTH="151p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StandardCOLNAME="2" VALIGN="TOP" MOREROWS="0"System VariableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"ANSI/IEEECOLNAME="2" VALIGN="TOP" MOREROWS="0"CONFIGCOLNAME="3" VALIGN="TOP" MOREROWS="0"Prototype.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PHASECOLNAME="3" VALIGN="TOP" MOREROWS="0"Analysis.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROGRAM_DESIGNCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROJECTCOLNAME="3" VALIGN="TOP" MOREROWS="0"TrainingMaterialsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"REQ_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"DOD-STD-2167ACOLNAME="2" VALIGN="TOP" MOREROWS="0"CONFIGCOLNAME="3" VALIGN="TOP" MOREROWS="0"Prototype.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PHASECOLNAME="3" VALIGN="TOP" MOREROWS="0"Analysis.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROJECTCOLNAME="3" VALIGN="TOP" MOREROWS="0"TrainingMaterialsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"EIA IS 640COLNAME="2" VALIGN="TOP" MOREROWS="0"CONFIGCOLNAME="3" VALIGN="TOP" MOREROWS="0"Prototype.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PHASECOLNAME="3" VALIGN="TOP" MOREROWS="0"Analysis.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROJECTCOLNAME="3" VALIGN="TOP" MOREROWS="0"TrainingMaterialsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"IEEE P1498COLNAME="2" VALIGN="TOP" MOREROWS="0"CONFIGCOLNAME="3" VALIGN="TOP" MOREROWS="0"Prototype.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PHASECOLNAME="3" VALIGN="TOP" MOREROWS="0"Analysis.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROJECTCOLNAME="3" VALIGN="TOP" MOREROWS="0"TrainingMaterialsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"ISO 9000-3/6592COLNAME="2" VALIGN="TOP" MOREROWS="0"CONFIGCOLNAME="3" VALIGN="TOP" MOREROWS="0"Prototype.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PHASECOLNAME="3" VALIGN="TOP" MOREROWS="0"Analysis.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROGRAM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROJECTCOLNAME="3" VALIGN="TOP" MOREROWS="0"TrainingMaterialsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"J-STD-016COLNAME="2" VALIGN="TOP" MOREROWS="0"CONFIGCOLNAME="3" VALIGN="TOP" MOREROWS="0"Prototype.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PHASECOLNAME="3" VALIGN="TOP" MOREROWS="0"Analysis.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROJECTCOLNAME="3" VALIGN="TOP" MOREROWS="0"TrainingMaterialsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"MIL-STD-490ACOLNAME="2" VALIGN="TOP" MOREROWS="0"CONFIGCOLNAME="3" VALIGN="TOP" MOREROWS="0"Prototype.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PHASECOLNAME="3" VALIGN="TOP" MOREROWS="0"Analysis.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROJECTCOLNAME="3" VALIGN="TOP" MOREROWS="0"TrainingMaterialsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"MIL-STD-498COLNAME="2" VALIGN="TOP" MOREROWS="0"CONFIGCOLNAME="3" VALIGN="TOP" MOREROWS="0"Prototype.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PHASECOLNAME="3" VALIGN="TOP" MOREROWS="0"Analysis.1COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"PROJECTCOLNAME="3" VALIGN="TOP" MOREROWS="0"TrainingMaterialsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"BusinessObjects.1UNIXCOLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"StandardCOLNAME="2" VALIGN="TOP" MOREROWS="0"System VariableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="1" MOREROWS="1" VALIGN="TOP"ANSI/IEEECOLNAME="2" VALIGN="TOP" MOREROWS="0"PROGRAM_DESIGNCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"REQ_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="1" MOREROWS="3" VALIGN="TOP"DOD-STD-2167ACOLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="1" MOREROWS="3" VALIGN="TOP"EIA IS 640COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="1" MOREROWS="3" VALIGN="TOP"IEEE P1498COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="1" MOREROWS="1" VALIGN="TOP"ISO 9000-3/6592COLNAME="2" VALIGN="TOP" MOREROWS="0"PROGRAM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="1" MOREROWS="3" VALIGN="TOP"J-STD-016COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="1" MOREROWS="3" VALIGN="TOP"MIL-STD-490ACOLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="1" MOREROWS="3" VALIGN="TOP"MIL-STD-498COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_DD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"CSCI_PD_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1COLNAME="2" VALIGN="TOP" MOREROWS="0"SYSTEM_GROUPCOLNAME="3" VALIGN="TOP" MOREROWS="0"Ot4omtExample.1Project-specific variablesThe user may wish to modify other variables to customize the generated document to their specific project. Some of these project specific variables and their purpose are listed in the following table.COLS="2"COLNAME="1" COLWIDTH="193p"COLNAME="2" COLWIDTH="255p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Company NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_ADDRESS1COLNAME="2" VALIGN="TOP" MOREROWS="0"Company's street addressCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_ADDRESS2COLNAME="2" VALIGN="TOP" MOREROWS="0"Company's city, state, ZIP, or postal codeCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_ADDRESS3COLNAME="2" VALIGN="TOP" MOREROWS="0"Company's countryCOLNAME="1" VALIGN="TOP" MOREROWS="0"COMPANY_DPT_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Department nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"CONTRACT_NUMBERCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contract numberCOLNAME="1" VALIGN="TOP" MOREROWS="0"CSCI_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the Computer Software Configuration Item (DOD-STD-2167A) and Software Item (J-STD-016).COLNAME="1" VALIGN="TOP" MOREROWS="0"CUSTOMER_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Customer's nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"CUST_ADDRESS1COLNAME="2" VALIGN="TOP" MOREROWS="0"Customer's street addressCOLNAME="1" VALIGN="TOP" MOREROWS="0"CUST_ADDRESS2COLNAME="2" VALIGN="TOP" MOREROWS="0"Customer's city, state, ZIP, or postal codeCOLNAME="1" VALIGN="TOP" MOREROWS="0"CUST_ADDRESS3COLNAME="2" VALIGN="TOP" MOREROWS="0"Customer's countryCOLNAME="1" VALIGN="TOP" MOREROWS="0"DOCUMENT_VERSIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"Version of generated documentCOLNAME="1" VALIGN="TOP" MOREROWS="0"DCNCOLNAME="2" VALIGN="TOP" MOREROWS="0"Document Control NumberCOLNAME="1" VALIGN="TOP" MOREROWS="0"PROGRAM_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Program NameCOLNAME="1" VALIGN="TOP" MOREROWS="0"REVISIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"Revision of generated documentCOLNAME="1" VALIGN="TOP" MOREROWS="0"SYSTEM_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the projectChapter 2 Generic DocExpress UtilitiesTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress Utilities GuideTERM1="DocEXPRESS Utilities"TERM1="Utilities"IntroductionThis chapter provides detailed descriptions of the generic DocExpress utilities that may be used to further customize DocExpress output. The description of the utilities is in the format of UNIX "man pages".In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="24697" TYPE="XREF-TEXTCOPY"Admin Utilities 2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="38664" TYPE="XREF-TEXTCOPY"Generation Utilities 11ID="24697"Admin UtilitiesIntroductionDocExpress provides the following general utilities. COLS="2"COLNAME="1" COLWIDTH="162p"COLNAME="2" COLWIDTH="285p"COLNAME="1" VALIGN="TOP" MOREROWS="0"UtilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26681" TYPE="XREF-TEXTCOPY"ata_cleanupCOLNAME="2" VALIGN="TOP" MOREROWS="0"Displays and removes (if requested) any dangling licensing related processes.COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15137" TYPE="XREF-TEXTCOPY"docexpressCOLNAME="2" VALIGN="TOP" MOREROWS="0"Activates the DocExpress Message Pad and menu window. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12477" TYPE="XREF-TEXTCOPY"templates_installCOLNAME="2" VALIGN="TOP" MOREROWS="0"Installs the full set of DocExpress templates.COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="27845" TYPE="XREF-TEXTCOPY"user_installCOLNAME="2" VALIGN="TOP" MOREROWS="0"Install user's DocExpress environment.COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14558" TYPE="XREF-TEXTCOPY"verifyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Verifies user's DocExpress environment.TERM1="Utilities" TERM2="ata_cleanup"ID="26681"ata_cleanupNAMEata_cleanup name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Displays and removes (if requested) any dangling licensing related processes. LOCATIONata_cleanup is located in: $ATAHOME/doc/adminSYNOPSISata_cleanup [-f] [-u user_name] [-help]DESCRIPTIONThis utility displays and removes (if requested) any dangling licensing related processes (i.e., doc and ata_lm_exec). This utility is particularly useful when a failure has caused license processes to continue to execute even though the parent process has terminated. This situation can be detected by using lmstat to list all the licensing activities. OPTIONS[-f] Forces the removal of any dangling processes. If this option is not specified, the dangling processes are displayed. [-u user_name]Limits the application of this utility to the specified user. DEFAULT: All users[-help]The proper syntax for the utility is displayed. EXAMPLEDisplay all dangling license processes for all users: # $ATAHOME/doc/admin/ata_cleanupOUTPUT+ These must be updatedPlease select the Operating System in use 1. SunOS 4.1.x 2. Solaris 2.x 3. HP-UX 9.0.x 4. IBMAIX 3.2.xSelect option [1] : 1Dangling DocExpress related PIDs for all users are:19869 19868TERM1="Utilities" TERM2="docexpress"ID="15137"docexpressNAMEdocexpress name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Activates the DocExpress Message Pad and menu window. LOCATIONdocexpress is located in:$ATAHOME/doc/binSYNOPSISdocexpress [-width #characters] [-height #lines] [-xoff #pixels] [-yoff #pixels] [-scroll_lines #lines] [-fn font] [-help]DESCRIPTIONThis program first activates the DocExpress Message Pad and then the main DocExpress window. The DocExpress Message Pad is an xterm that displays error mesages and other useful information. The width, height, font and location of the Message Pad may be specified as well as how many off-window scroll lines can be saved. OPTIONS[-width #characters]Specifies the width of the window in number of characters. DEFAULT: Operating System dependent[-height #lines]Specifies the height of the window in number of lines. DEFAULT: Operating System dependent[-xoff #pixels]Specifies the distance between the left edge of the window and the left side of the display in pixels. DEFAULT: Operating System dependent[-yoff #pixels]Specifies the distance between the top edge of the window and the top of the display in pixels.DEFAULT: 200 pixels [-scroll_lines #lines]Specifies the number of lines scrolled off the top of the window to be saved name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' so those lines can be viewed.DEFAULT: 1024 lines[-fn font]Specifies the font. Any fixed-width font can be used.DEFAULT: Operating System dependent[-help]The proper syntax for the program is displayed. EXAMPLEActivates the DocExpress Message Pad with a width of 80 characters and 30 lines.% docexpress -width 80 -height 30TERM1="Utilities" TERM2="templates_install"ID="12477"templates_installNAMEtemplates_install name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Installs the full set of DocExpress templates.LOCATIONtemplates_install is located in: $ATAHOME/doc/adminSYNOPSIStemplates_installDESCRIPTIONThis utility automatically installs the complete distribution of DocExpress FrameMaker and Interleaf templates.For more information, see the ObjectTeam Installation Guide.EXAMPLE# cd /ata/doc/admin# ./templates_installTERM1="Utilities" TERM2="user_install"ID="27845"user_installNAMEuser_install name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Install user's DocExpress environment.LOCATIONuser_install is located in: $ATAHOME/installSYNOPSISverifyDESCRIPTIONThis utility must be run by any DocExpress user to setup their DocExpress environment.For more information, see the ObjectTeam Installation Guide.EXAMPLE% cd $ATAHOME/install% ./user_installOUTPUT./user_installCopyright (c) 1990-1995 by Cayenne Software, Incorporated.All Rights Reserved.ATAHOME installed in /home/anyuser/.cshrcATAHOME installed in /home/anyuser/.profile./user_install: Created '/home/anyuser/.ata' directory../user_install: '/home/anyuser/.ata/doc_config_file' created../user_install: Created '/home/anyuser/.ata/tmp' directory.Will DocExpress be used with FrameMaker [y|n] [y] ? ./user_install: Created '/home/anyuser/fminit/usenglish/APIArea/apiclients' file.Do you wish to append DocExpress resources to the end of your/home/anyuser/.Xdefaults [y|n] [y] ?************ User installation completed successfully ************NOTE:In order for the ATAHOME environment variable and the path settingto take effect, you must log out and log back in before executing"docexpress". If you have problems starting "docexpress"after you log back in, please refer to the DocExpress installationinstructions.TERM1="Utilities" TERM2="verify"ID="14558"verifyNAMEverify name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Verifies user's DocExpress environment.LOCATIONverify is located in: $ATAHOME/doc/adminSYNOPSISverifyDESCRIPTIONThis utility verifies a DocExpress user's environment setup. It reports on missing directories, files and environment variables.For more information, see the ObjectTeam Installation Guide.EXAMPLE% $ATAHOME/doc/admin/verifyOUTPUT**********************************************************************/ata/doc/admin/verifyCopyright (c) 1990-1995 by Cayenne Software, Incorporated.All Rights Reserved.**********************************************************************The environment variables, directories, and filesused by DocExpress are defined as followes:USER = anyuserHOME = /home/anyuserATAHOME = /home/anyuser/ataATA_USER_DIR = /home/anyuser/.ataUSER_CF = /home/anyuser/.ata/doc_config_fileTMP_DIR = /home/anyuser/.ata/tmpFMHOME = /trident_apps/frame_4_fullFMAPI_FILE = /home/anyuser/fminit/usenglish/APIArea/apiclientsSHELL = /bin/cshVERSION_DATE file OK.**********************************************************************The operating version and hardware platform are:|=> SunOS indra 4.1.4 2 sun4c <=|Your distribution of DocExpress contains the following software:***************************************************Copyright (c) 1990-1995 by Cayenne Software, Incorporated.All rights reserved.DocExpress 2.309/30/95This version of DocExpress is designed to workunder SunOS Release 4.1.x and OpenWindows 3.xon SPARC based computers.************************************************************************************************************************************* User installation verification has completed ************NOTE:If there are any ERROR messages, the installation for user "anyuser" was not successfull. You must repeat the user installation process for user "anyuser"before running DocExpress.If your distribution of DocExpress does NOT support yourOS version and/or hardware platform, notify Cayenne Software, Incorporated.**********************************************************************ID="38664"Generation UtilitiesIntroductionDocExpress provides the following utilities for document generation.COLS="2"COLNAME="1" COLWIDTH="172p"COLNAME="2" COLWIDTH="270p"COLNAME="1" VALIGN="TOP" MOREROWS="0"UtilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22538" TYPE="XREF-TEXTCOPY"ata_templatesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Converts DocExpress document templates for FrameMaker from the FrameMaker 4 format to FrameMaker 5 format. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37015" TYPE="XREF-TEXTCOPY"extractCOLNAME="2" VALIGN="TOP" MOREROWS="0"Extract text from the specified file. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="14466" TYPE="XREF-TEXTCOPY"frame_table (Frame)COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates a FrameMaker table from an ASCII delimited file. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="23816" TYPE="XREF-TEXTCOPY"frame_tables (Frame)COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates a set of FrameMaker tables from ASCII delimited files. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15088" TYPE="XREF-TEXTCOPY"ileaf_table (Interleaf)COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates an Interleaf table from an ASCII delimited file. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37472" TYPE="XREF-TEXTCOPY"parse_dirCOLNAME="2" VALIGN="TOP" MOREROWS="0"Parses a directory structure of a specified directory path and generates either an Interleaf or FrameMaker document with the contents of the directory tree. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="35591" TYPE="XREF-TEXTCOPY"special_crCOLNAME="2" VALIGN="TOP" MOREROWS="0"Replaces certain special characters in the specified file with their equivalent character codes in the desired document publishing system format. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="22609" TYPE="XREF-TEXTCOPY"user_docsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Converts FrameMaker files with the .doc extension in a target directory specified by the user from the FrameMaker 4 format to FrameMaker 5 format. TERM1="Utilities" TERM2="ata_templates"ID="22538"ata_templatesNAMEata_templates name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Converts DocExpress document templates for FrameMaker from the FrameMaker 4 format to FrameMaker 5 format.LOCATIONata_templates is located in:$ATAHOME/doc/utils/frame/fm4to5SYNOPSISata_templates [-help]DESCRIPTIONThe files for the document templates provided with DocExpress for FrameMaker are located in directories for each template (i.e., SRS.boo, PS.boo, etc.) within directories for each standard (i.e., 2167A, ISO, etc.) The standards directories are located in $ATAHOME/doc/templates/frame. This directory structure is shown in Figure 3-1..FILENAME="01099.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/dx_utils/dxu_utls2.fm5.mif"ata_templates converts all files with the .doc extension in the template directories from the FrameMaker 4 format to FrameMaker 5 format. ata_templates also creates a .doc.backup version for each file converted.OPTIONS[-help]The proper syntax for the utility is displayed. DIAGNOSTICSERROR: Too many arguments.Syntax is: ata_templates [-help]Improper command syntax was used. ERROR: Invalid argument: argument_nameSyntax is: ata_templates [-help]Improper command syntax was used.ERROR: FMHOME is not defined in your environment.Unable to execute ata_templates. Exiting...FrameMaker uses the environment variable FMHOME to refer to the path where it is installed. This variable must be defined.ERROR: fmbatch utility does not exist in directory $FMHOME/binUnable to execute ata_templates. Exiting...The FrameMaker utility "fmbatch" must be accessible.ERROR: fmbatch utility is not in executable format.Unable to execute ata_templates. Exiting...The FrameMaker utility "fmbatch" must be in an executable format.ERROR: ATAHOME is not defined in your environment.Unable to execute ata_templates. Exiting...DocExpress uses the environment variable ATAHOME to refer to the path where it is installed. This variable must be defined.ERROR: ATAHOME/doc/templates/frame directory does not exist.Unable to execute ata_templates. Exiting...The directories located beneath ATAHOME/doc/templates/frame must be accessible.EXAMPLE% ata_templatesThe files for the document templates are now in FrameMaker 5 format. Each original version has been saved in a .doc.backup file. TERM1="Utilities" TERM2="frame_table"ID="37015"extractNAMEextract name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extract text from the specified file.LOCATIONextract is located in:$ATAHOME/doc/utils/extract/binSYNOPSISextract -i input_file -o output_file (-all "string" | -start "start_string" -end "end_string") [-tag "tag_name"] [-dp_type ileaf | frame ] [-header | -no_header] [-help]DESCRIPTIONThe extract utility extracts text from any ASCII input file. This utility is intended to, but not limited to, extracting comments, header information and preambles from a program source code file.This utility accepts as input an ASCII file. It extracts all lines that contain the string, specified by the all option. Alternatively, it extracts all lines between the start_string and the end_string specified by the start and end options respectively.By default, the output_file generated by the extract utility is in ASCII format. If this file is to be opened in FrameMaker or Interleaf, the appropriate dp_type option should be selected. By specifying this option, characters with special meaning to the document publishing system are converted to acceptable formats. The special characters processed by this utility for FrameMaker and Interleaf are listed in Table 4-3 and Table 4-4 respectively.In addition, tag_name (i.e., paragraphs for FrameMaker, or components for Interleaf) known to the document publishing systems are used to format the output.OPTIONS-i input_fileSpecifies the file to be processed. The file must be in ASCII format.-o output_fileSpecifies the name of the file that will contain the lines extracted from the input_file. The output_file name should be specified with an appropriate extension, if it is to be opened by a document publishing system. Use .mml for FrameMaker and .doc for Interleaf.-all "string"Specifies a string to be matched within a line from the input_file. The utility extracts all line fragments that contain the string. The line fragment starts with the string and terminates at the end of the line. This option cannot be used with the start and/or end options.-start "start_string"Specifies a string to be matched within a line from the input_file. When used in conjunction with the end option, the utility extracts all lines between the start_string and end_string including the lines containing the start_string and end_string. Nesting of the textual blocks (delimited by the start_string and end_string) is not permitted.The start option must be used with the end option. This option cannot be used with the all option.-end "end_string"Specifies a string to be matched within a line from the input_file. When used in conjunction with the start option, the utility extracts all lines between the start_string and end_string including the lines containing the start_string and end_string. Nesting of the textual blocks (delimited by the start_string and end_string) is not permitted.The end option must be used with the start option. This option cannot be used with the all option.[-tag "tag_name"]Specifies the name of the document publishing system's paragraph/component tag. If the tag option is specified, each block of text (i.e., each match) extracted from the input_file will be formatted in accordance with the characteristics specified by the tag. By default, no tag is assigned. If the dp_type option is specified without this option, the default tag_name will be used.DEFAULT: paragraph[-dp_type ileaf | frame]Specifies the document publishing system format for the output file. Only two types are accepted: ileaf and frame. DEFAULT: ASCII[-header|-no_header]If the header option is specified, the Interleaf component or FrameMaker paragraph definitions are included in the output_file. These paragraph/component definitions are contained in their respective header files. For more information, see the HEADER FILE section below.DEFAULT: HEADERDEFAULT HEADER FILE: FrameMaker$ATAHOME/doc/utils/extract/frame/header.mmlDEFAULT HEADER FILE: Interleaf$ATAHOME/doc/utils/extract/ileaf/header.doc[-help]The proper syntax for the utility is displayed. EXAMPLEcommand line : % extract -i main.c -o test -start "/*" -end "*/"input_file :/* extract example source code header * * main.c */void main( ){ /* print greeting */ printf("Hello World\n"); return (0);}output_file :/* extract example source code header ** main.c *//* print greeting */HEADER FILESThe extract utility automatically includes default FrameMaker paragraph and Interleaf component definitions into the output file. These paragraph/component definitions are contained in their respective header files. Table 4-1 identifies and describes the paragraph tags defined in the default header file for FrameMaker. The default header file is located in the $ATAHOME/doc/utils/extract/frame directory.COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-1. Paragraph Tags defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 1COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 2COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3 .... up to 10COLNAME="2" VALIGN="TOP" MOREROWS="0"section titles for levels 3 up to 10COLNAME="1" VALIGN="TOP" MOREROWS="0"figureCOLNAME="2" VALIGN="TOP" MOREROWS="0"figure captionCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono spaced paragraphTable 4-2 identifies and describes the components defined in the default header file for Interleaf. The default header file is located in the $ATAHOME/doc/utils/extract/ileaf directory. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-2. Components defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listSPECIAL CHARACTERSTable 4-3 identifies and describes the special characters for FrameMaker.COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="222p"COLNAME="3" COLWIDTH="222p"NAMEST="1" NAMEEND="3" SPANNAME="S1T3"SPANNAME="S1T3" VALIGN="TOP" MOREROWS="0"Table 4-3. List of special characters for FrameMaker (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"SubstitutionCOLNAME="1" VALIGN="TOP" MOREROWS="0"'\n'COLNAME="2" VALIGN="TOP" MOREROWS="0"Carriage ReturnCOLNAME="3" VALIGN="TOP" MOREROWS="0"<HR>COLNAME="1" VALIGN="TOP" MOREROWS="0"' ' COLNAME="2" VALIGN="TOP" MOREROWS="0"spaceCOLNAME="3" VALIGN="TOP" MOREROWS="0"<HS>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\ ' COLNAME="2" VALIGN="TOP" MOREROWS="0"tabCOLNAME="3" VALIGN="TOP" MOREROWS="0"<Tab>COLNAME="1" VALIGN="TOP" MOREROWS="0"'<' COLNAME="2" VALIGN="TOP" MOREROWS="0"less thanCOLNAME="3" VALIGN="TOP" MOREROWS="0"<Character \\x3c>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\>' COLNAME="2" VALIGN="TOP" MOREROWS="0"greater thanCOLNAME="3" VALIGN="TOP" MOREROWS="0"<Character \\x3e>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\\\xd5 COLNAME="2" VALIGN="TOP" MOREROWS="0"back slashCOLNAME="3" VALIGN="TOP" MOREROWS="0"<Character \\x5c>Table 4-4 identifies and describes the special characters for Interleaf.COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="222p"COLNAME="3" COLWIDTH="222p"NAMEST="1" NAMEEND="3" SPANNAME="S1T3"SPANNAME="S1T3" VALIGN="TOP" MOREROWS="0"Table 4-4. List of special characters for Interleaf (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"SubstitutionCOLNAME="1" VALIGN="TOP" MOREROWS="0"'\n'COLNAME="2" VALIGN="TOP" MOREROWS="0"Carriage ReturnCOLNAME="3" VALIGN="TOP" MOREROWS="0"<HR>COLNAME="1" VALIGN="TOP" MOREROWS="0"' ' COLNAME="2" VALIGN="TOP" MOREROWS="0"spaceCOLNAME="3" VALIGN="TOP" MOREROWS="0"<SP>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\ ' COLNAME="2" VALIGN="TOP" MOREROWS="0"tabCOLNAME="3" VALIGN="TOP" MOREROWS="0"<tab>COLNAME="1" VALIGN="TOP" MOREROWS="0"'<' COLNAME="2" VALIGN="TOP" MOREROWS="0"less thanCOLNAME="3" VALIGN="TOP" MOREROWS="0"<#3c>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\>' COLNAME="2" VALIGN="TOP" MOREROWS="0"greater thanCOLNAME="3" VALIGN="TOP" MOREROWS="0"<#3e>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\\\xd5 COLNAME="2" VALIGN="TOP" MOREROWS="0"back slashCOLNAME="3" VALIGN="TOP" MOREROWS="0"<#5c>TERM1="Utilities" TERM2="frame_table"ID="14466"frame_table (Frame)NAMEframe_table name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Generates a FrameMaker table from an ASCII delimited file.LOCATIONframe_table is located in:$ATAHOME/doc/utils/frame/tblSYNOPSISframe_table -input ascii_file [-tbl_format table_format_file] [-table_title table_title] [-error_log error_log_file] [-header | -no_header] [-help]DESCRIPTIONThis utility accepts as input an ASCII delimited file and generates a FrameMaker table with the specified table title. The format of the ASCII delimited file is described in ASCII FILE Section below.The output is sent to stdout which can be redirected to a file. To view the output as a document in FrameMaker, redirect the output to a file with a .mif extension.OPTIONS-input ascii_fileSpecifies the name and location of the file which contains the ASCII delimited file. The format of ascii_file is described in the ASCII FILE Section below.[-table_title "table_title"]Permits the user to specify a title for the table. The table title must be contained within quotes. If not specified by the user, no title will be generated.DEFAULT: None.[-error_log error_log_file]Specifies the name and location of error_log_file to which all error messages from this utility will be written.DEFAULT: $ATAHOME/doc/error_log[-tbl_format table_format_file]Specifies the file to which the table formats should be written.The MIF information is contained within two separate files. One file contains the table format information, and the second file contains the textflow information. These files make up the complete table file, when grouped along with the header file that contains the formats and definitions.DEFAULT: $HOME/.ata/tmp/ata_tbl_format.doc[-header|-no_header]If -header is specified, the FrameMaker paragraph definitions are included in the output file. The paragraph definitions in the header file are listed in Table 4-5.DEFAULT: HEADERDEFAULT HEADER FILE: $ATAHOME/doc/utils/frame/tbl/header.mif[-help]The proper syntax for the utility is displayed.EXAMPLE% frame_table -input $ATAHOME/.ata/tmp/table.txtASCII FILEAn ascii_file is an ASCII delimited file where each line of the file represents a row in a table. Each line contains information for each cell of the row and the cell information is separated by a delimiter. The delimiter for cell information is a colon (:). The example ascii_file shown below will generate a three (3) column table with two (2) rows.abc:control in:twice per secondxyy:data in:every 15 secondsHEADER FILEThe frame_table utility automatically includes default FrameMaker paragraph and tables definitions into the output file. Table 4-5 identifies and describes the paragraph tags defined in the default header file for FrameMaker. The default header file is located in the $ATAHOME/doc/utils/frame/tbl directory.COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-5. Paragraph Tags defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 1COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 2COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3 .... up to 10COLNAME="2" VALIGN="TOP" MOREROWS="0"section titles for levels 3 up to 10COLNAME="1" VALIGN="TOP" MOREROWS="0"figureCOLNAME="2" VALIGN="TOP" MOREROWS="0"figure captionCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono spaced paragraphTERM1="Utilities" TERM2="frame_tables"ID="23816"frame_tables (Frame)NAMEframe_tables name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Generates a set of FrameMaker tables from ASCII delimited files.LOCATIONframe_tables is located in:$ATAHOME/doc/utils/frame/tblSYNOPSISframe_tables -input input_fname [-temp_dir temporary_directory] [-header | -no_header] [-help]DESCRIPTIONThis utility reads an input file which contains file path names, table titles and optionally table column sizes. The file path names specify the location and names of files which contain ASCII delimited tables. From these ASCII files, the utility generates FrameMaker tables with corresponding table title specified in the input_fname. The format of the input_fname is described in the INPUT FILE Section below. The ASCII delimited files are described in the ASCII FILE Section below.The output is sent to stdout which can be redirected to a file. To view the output as a document in FrameMaker, redirect the output to a file with a .mif extension.OPTIONS-input input_fnameSpecifies the name and location of the file which contains the file path names, table titles, and optionally column sizes. The file path names specify the location and names of files which contain ASCII delimited files. The format of input_fname is described in the INPUT FILE Section below. The format of the ASCII delimited files is described in the ASCII FILE Section below. [-temp_dir temporary_directory]Specifies the directory where temporary files are placed. DEFAULT: $ATAHOME/.ata/tmp[-header|-no_header]If -header is specified, the FrameMaker paragraph definitions are included in the output file. The paragraph definitions in the header file are listed in Table 4-6. DEFAULT: HEADERDEFAULT HEADER FILE: $ATAHOME/doc/utils/frame/tbl/header.mif[-help]The proper syntax for the utility is displayed. EXAMPLE% frame_tables -input $ATAHOME/.ata/tmp/tables.txtINPUT FILEThe input_fname file identifies files which contain ASCII delimited files (see the ASCII FILE Section below), provides titles for the generated tables, and optionally specifies the table's column sizes. Each line of the file has a file path name, table title, and optionally the column sizes for one of the ASCII tables. The file path name and table title must be separated by a blank space. The table title must be contained within quotes and the column sizes are proceeded with the keyword -col. Each column size is separated by a comma (,) and a blank space. The number of columns and their sizes may be different for each table identified in the input_fname file. The example of an input_fname shown below will generate two tables with three columns and titled Interface ABC and Interface XYZ respectively. $HOME/.ata/tmp/table1.txt "Interface ABC" -col 0.5, 1.5, 4.5$HOME/.ata/tmp/table2.txt "Interface XYZ" -col 0.5, 1.5, 4.5ASCII FILEIn an ASCII delimited file, each line of the file represents a row in a table. Each line contains information for each cell of the row and the cell information is separated by a delimiter. The delimiter for cell information is a colon (:). The example ascii_file shown below will generate a three (3) column table with two (2) rows. abc:control in:twice per secondxyy:data in:every 15 secondsHEADER FILEThe frame_table utility automatically includes default FrameMaker paragraph and tables definitions into the output file. Table 4-6 identifies and describes the paragraph tags defined in the default header file for FrameMaker. The default header file is located in the $ATAHOME/doc/utils/frame/tbl directory. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-6. Paragraph Tags defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 1COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 2COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3 .... up to 10COLNAME="2" VALIGN="TOP" MOREROWS="0"section titles for levels 3 up to 10COLNAME="1" VALIGN="TOP" MOREROWS="0"figureCOLNAME="2" VALIGN="TOP" MOREROWS="0"figure captionCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono spaced paragraphTERM1="Utilities" TERM2="ileaf_table"ID="15088"ileaf_table (Interleaf)NAMEileaf_table name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Generates an Interleaf table from an ASCII delimited file. LOCATIONileaf_table is located in:$ATAHOME/doc/utils/ileaf/tblSYNOPSISileaf_table -input ascii_file [-tbl_format table_format_file] [-table_title table_title] [-error_log error_log_file] [-header | -no_header] [-help]DESCRIPTIONThis utility accepts as input an ASCII delimited file and generates a Interleaf table with the specified table title. The format of the input file is describe below. The output is sent to stdout which can be redirected to a file. To view the output as a document in Interleaf, redirect the output to a file with a .doc extension. OPTIONS[-input ascii_file]Specifies the name and location of the file which contains the ASCII delimited table. The format of ascii_file is described in the ASCII FILE Section below. [-table_title "table_title"]Permits the user to specify a title for the table. The table title must be contained within quotes. If not specified by the user, no title will be generated. DEFAULT: None. [-error_log error_log_file]Specifies the name and location of error_log_file to which all error messages from this utility will be written. DEFAULT: $ATAHOME/doc/error_log[-tbl_format table_format_file]Specifies the file to which the table formats should be written. DEFAULT: $HOME/.ata/tmp/ata_tbl_format.doc[-header|-no_header]If -header is specified, the Interleaf component definitions are included in the output file. The component definitions in the header file are listed in Table 4-7. DEFAULT: HEADERDEFAULT HEADER FILE: $ATAHOME/doc/utils/ileaf/tbl/header.doc[-help]The proper syntax for the utility is displayed. EXAMPLE% ileaf_table -input $ATAHOME/.ata/tmp/table.txtASCII FILEIn an ASCII delimited file, each line of the file represents a row in a table. Each line contains information for each cell of the row and the cell information is separated by a delimiter. The delimiter for cell information is a colon (:). The example ascii_file shown below will generate a three (3) column table with two (2) rows. abc:control in:twice per secondxyy:data in:every 15 secondsHEADER FILEThe ileaf_table utility automatically includes default Interleaf component and table definitions into the output file. Table 4-7 identifies and describes the components defined in the default header file for Interleaf. The default header file is located in the $ATAHOME/doc/utils/ileaf/tbl directory. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-7. Components defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listCOLNAME="1" VALIGN="TOP" MOREROWS="0"paraCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"figureCOLNAME="2" VALIGN="TOP" MOREROWS="0"figure captionCOLNAME="1" VALIGN="TOP" MOREROWS="0"tableCOLNAME="2" VALIGN="TOP" MOREROWS="0"table titleCOLNAME="1" VALIGN="TOP" MOREROWS="0"cellCOLNAME="2" VALIGN="TOP" MOREROWS="0"table cellTERM1="Utilities" TERM2="parse_dir"ID="37472"parse_dirNAMEparse_dir name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Parses a directory structure of a specified directory path and generates either an Interleaf or FrameMaker document with the contents of the directory tree. LOCATIONparse_dir is located in:/ata/doc/utils/parse_dir/binSYNOPSISparse_dir -root_dir starting_directory_path -sl starting_section_level -dp_type documentation_system_name [-current_section] [-type_file type_file] [-dir_format_file dir_format_file] [-exclude_file exclude_file] [-header | -no_header] [-help]DESCRIPTIONGiven a starting directory path, this utility prints the directory and file information in accordance with various format files specified in the type_file. The format files are used to specify the actions parse_dir is to perform when a specified type of file is encountered. For example, you may wish to execute cflow for all files with a ".c" extension. For more information on the type_file and its associated format files see their descriptions below. The directory format file serves the same purpose as the format files when a directory is encountered. The output is sent to stdout which can be redirected to a file. To view the output as a document in FrameMaker, redirect the output to a file with a .mml extension. To view the output as a document in Interleaf, redirect the output to a file with a .doc extension. OPTIONS-root_dir starting_directory_pathSpecifies the name and the path of the starting directory for the parse process. -sl starting_section_levelThis option specifies the starting section level of the document. This value is assigned to the SECTION_LEVEL variable which is available for use within a format_file or dir_format_file.-dp_type documentation_system This option is required to specify the output format type. Only two types are accepted: ileaf and frame. This value is assigned to the DP_TYPE variable which is available for use within a format_file or dir_format_file. [-current_section]When this option is specified, the starting directory name is not printed as a section and the sub-directories/files are moved up one level. [-type_file type_file]The type_file contains the mappings of different file types to their corresponding format_files. Detailed descriptions of the type_file and the format_files are provided below in the sections TYPE FILE and HEADER FILE respectively. DEFAULT: $ATAHOME/doc/utils/parse_dir/format_files/type_file[-dir_format_file dir_format_file]This option specifies the name of the directory format file. The directory format file specifies the actions that parse_dir would take. For more information on the directory format file, see its description in Table 4-9 and Table 4-10. DEFAULT: $ATAHOME/doc/utils/parse_dir/format_files/dir_format_file[-exclude_file exclude_file]This option specifies the name of the exclude_file. The exclude_file contains the names of directories and files not to be included into the final document. DEFAULT: $ATAHOME/doc/utils/parse_dir/format_files/exclude_file[-header|-no_header]If -header is specified, the Interleaf component or FrameMaker paragraph definitions are included in the output file. These paragraph/component definitions are contained in their respective header files. For more information, see the HEADER FILE Section below. DEFAULT: HEADERDEFAULT HEADER FILE: FrameMaker $ATAHOME/doc/utils/parse_dir/frame/header.mmlDEFAULT HEADER FILE: Interleaf $ATAHOME/doc/utils/parse_dir/ileaf/header.doc[-help]The proper syntax for the utility is displayed. EXAMPLE % parse_dir -root_dir $ATAHOME/doc/utils/parse_dir/samples \ -sl 1 -dp_type ileaf -csTYPE FILEThe type_file contains the mappings of different file types to their corresponding format_files. The type of the file is determined by its suffix. For example, a file with the suffix ".c" is a C-type file, while ".h" is a header file type. Different file types may correspond to the same format_files. The type_file may be customized by specifying different format file names. Mappings of file types to format_files may be added or deleted from the type_file. If the format file field is left blank, the default /ata/doc/utils/parse_dir/format_files/format_file will be used. Sample type_file entries are listed in Table 4-8. COLS="2"COLNAME="1" COLWIDTH="297p"COLNAME="2" COLWIDTH="297p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-8. Type File Entries (sheet (Sheet of ))COLNAME="1" VALIGN="TOP" MOREROWS="0"EntryCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"*.c=$ATAHOME/doc/utils/parse_dir/format_files/format_file_cCOLNAME="2" VALIGN="TOP" MOREROWS="0"This entry specifies the corresponding format file for any ".c" file encountered.COLNAME="1" VALIGN="TOP" MOREROWS="0"*.h=$ATAHOME/doc/utils/parse_dir/format_files/format_file_hCOLNAME="2" VALIGN="TOP" MOREROWS="0"This entry specifies the corresponding format file for any ".h" file encountered.COLNAME="1" VALIGN="TOP" MOREROWS="0"Makefile=$ATAHOME/doc/utils/parse_dir/format_files/format_file_MakefileCOLNAME="2" VALIGN="TOP" MOREROWS="0"This entry specifies the corresponding format file for any "Makefile" encountered.The default type_file is $ATAHOME/doc/utils/parse_dir/format_files/type_file. FORMAT FILESWhen the parse_dir utility is executed, depending upon whether a directory or a file is encountered, different format files are used. The format files specify the order in which parse_dir processes the directories and files, permits automatic inclusion of various user-specified files, execution of any system or user-defined commands, and formatting of the included files. Default format files are provided with DocExpress to format common types of files (e.g., "c" files, header files, etc.). These default format files may be modified or new format files created by the user. The default format files are describe in Table 4-10 and located in /ata/doc/utils/parse_dir/format_files. In a format file, each entry is contained on a single line and has two fields separated by a colon (:). A keyword is to the left of the colon. Keywords must be lower-case and left justified. Comment lines begin with a pound sign (#) or a blank, and are ignored by DocExpress. Keyword values are to the right of the colon. Values may contain variables which are uppercase strings that begin with a dollar sign ($). The legal entries for a format file are shown in Table 4-9. The valid variables are described in Table 4-11. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-9. Format File Entries (sheet (Sheet of ))COLNAME="1" VALIGN="TOP" MOREROWS="0"EntryCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"section: stringCOLNAME="2" VALIGN="TOP" MOREROWS="0"Creates a new numbered section in your document. The string (on the right side of colon) can be combination of any text and the run time variables listed in Table 4-11. If nothing follows the section command the name of the current node, specified by CURRENT_NODE run-time variable, is used. COLNAME="1" VALIGN="TOP" MOREROWS="0"execute:stringCOLNAME="2" VALIGN="TOP" MOREROWS="0"Executes an operating system, or user-defined command. The string must consist of the full path to the command and its necessary parameters. The command is executed with a "/bin/sh" shell. Both the command and the parameters can contain run time variables listed in Table 4-11. The output is placed at the current location in your document.COLNAME="1" VALIGN="TOP" MOREROWS="0"component:stringCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies a FrameMaker or Interleaf paragraph/component tag such as paragraph, body, etc. Predefined paragraph/component tags are defined in the header file for the respective document publishing system. See the HEADER FILES Section below. COLNAME="1" VALIGN="TOP" MOREROWS="0"include:stringCOLNAME="2" VALIGN="TOP" MOREROWS="0"Includes the specified file. The file string must be a full path to the file. The string may contain run time variables in Table 4-11. Text files may be included into Interleaf and FrameMaker. FrameMaker files in MML format may be included into FrameMaker. Interleaf ASCII files may be included into Interleaf. DEFAULT FORMAT FILESThe default format files for a directory (dir_format_file), for ".c" files (format_file_c), for header files (format_file_h), etc. are shown in Table 4-10. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-10. Default Format Files (sheet (Sheet of ))SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"dir_format_fileNote: Unlike the other format files, this format file cannot be specified in the type_file. Instead, it is specified in the parse_dir options. SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"section:SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"format_file_oSPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"section:$CURRENT_FILE_NAMESPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"format_file_hSPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"section:$CURRENT_FILE_NAMEexecute: $ATAHOME/doc/utils/parse_dir/bin/special_cr -input_file $CURRENT_NODE -dp_type $DP_TYPE > $HOME/.ata/tmp/$CURRENT_FILE_NAME.$DP_SUFFIXcomponent: paragraphinclude:$HOME/.ata/tmp/$CURRENT_FILE_NAME.$DP_SUFFIXSPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"format_file_cSPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"section:$CURRENT_FILE_NAMEexecute: $ATAHOME/doc/utils/parse_dir/bin/special_cr -input_file $CURRENT_NODE -dp_type $DP_TYPE > $HOME/.ata/tmp/$CURRENT_FILE_NAME.$DP_SUFFIXcomponent: paragraphinclude:$HOME/.ata/tmp/$CURRENT_FILE_NAME.$DP_SUFFIXSPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"format_file_MakefileSPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"section:$CURRENT_FILE_NAMEexecute: $ATAHOME/doc/utils/parse_dir/bin/special_cr -input_file $CURRENT_NODE -dp_type $DP_TYPE > $HOME/.ata/tmp/$CURRENT_FILE_NAME.$DP_SUFFIXcomponent: paragraphinclude:$HOME/.ata/tmp/$CURRENT_FILE_NAME.$DP_SUFFIXSPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"format_file (default)SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"section:$CURRENT_FILE_NAMESTATIC AND RUN-TIME VARIABLESTable 4-11 identifies and describes the static and runtime variables available to parse_dir through the format files. These variables may be used in the format files to customize the document. When these variables are referenced they must be preceded by a $ sign (e.g., $ROOT_DIR, $DP_TYPE, etc.). COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-11. Static and Runtime Variables (sheet (Sheet of ))COLNAME="1" VALIGN="TOP" MOREROWS="0"Static VariablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Runtime VariablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ROOT_DIRCOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the starting directory path. COLNAME="1" VALIGN="TOP" MOREROWS="0"DP_TYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the document publishing system used. COLNAME="1" VALIGN="TOP" MOREROWS="0"TYPE_FILECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the type file which specifies the format files. COLNAME="1" VALIGN="TOP" MOREROWS="0"CURRENT_NODECOLNAME="2" VALIGN="TOP" MOREROWS="0"Full path of the current directory, including the current directory. COLNAME="1" VALIGN="TOP" MOREROWS="0"CURRENT_DIR_PATHCOLNAME="2" VALIGN="TOP" MOREROWS="0"Full path of the current directory, not including the current directory. COLNAME="1" VALIGN="TOP" MOREROWS="0"CURRENT_DIR_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the current directory, no path. COLNAME="1" VALIGN="TOP" MOREROWS="0"CURRENT_FILE_NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the current file, no path. COLNAME="1" VALIGN="TOP" MOREROWS="0"SECTION_LEVELCOLNAME="2" VALIGN="TOP" MOREROWS="0"The level of the directory based relative to the root directory. If starting directory is at SECTION_LEVEL 1 and a child directory is encountered its SECTION_LEVEL is 2. COLNAME="1" VALIGN="TOP" MOREROWS="0"DP_SUFFIXCOLNAME="2" VALIGN="TOP" MOREROWS="0""mml" for FrameMaker."doc" for Interleaf. COLNAME="1" VALIGN="TOP" MOREROWS="0"HOMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Same as the environment variable $HOME. COLNAME="1" VALIGN="TOP" MOREROWS="0"ATAHOMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Same as the environment variable $ATAHOME. HEADER FILESThe parse_dir utility automatically includes default FrameMaker paragraph and Interleaf component definitions into the output file. These paragraph/component definitions are contained in their respective header files. Table 4-12 identifies and describes the paragraph tags defined in the default header file for FrameMaker. The default header file is located in the $ATAHOME/doc/utils/parse_dir/frame directory. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-12. Paragraph Tags defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 1COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 2COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3 .... up to 10COLNAME="2" VALIGN="TOP" MOREROWS="0"section titles for levels 3 up to 10COLNAME="1" VALIGN="TOP" MOREROWS="0"figureCOLNAME="2" VALIGN="TOP" MOREROWS="0"figure captionCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono spaced paragraphTable 4-13 identifies and describes the components defined in the default header file for Interleaf. The default header file is located in the $ATAHOME/doc/utils/parse_dir/ileaf directory. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-13. Components defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listEXCLUDE FILEThe exclude_file contains the names of directories and files, referred to as "nodes," not to be processed by parse_dir. The legal entries for an exclude file are shown in Table 4-14. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-14. Exclude File Entries (sheet (Sheet of ))COLNAME="1" VALIGN="TOP" MOREROWS="0"EntryCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"*.COLNAME="2" VALIGN="TOP" MOREROWS="0"Excludes any node ending with a "." in any directory path (default). COLNAME="1" VALIGN="TOP" MOREROWS="0"*..COLNAME="2" VALIGN="TOP" MOREROWS="0"Excludes any node ending with a ".." in any directory path (default). COLNAME="1" VALIGN="TOP" MOREROWS="0"*COLNAME="2" VALIGN="TOP" MOREROWS="0"Excludes all nodes in all paths.COLNAME="1" VALIGN="TOP" MOREROWS="0"*.* COLNAME="2" VALIGN="TOP" MOREROWS="0"Excludes all nodes that contain one "." from all paths. COLNAME="1" VALIGN="TOP" MOREROWS="0"*.SUFFIXCOLNAME="2" VALIGN="TOP" MOREROWS="0"Excludes every node with the specified suffix. COLNAME="1" VALIGN="TOP" MOREROWS="0".*COLNAME="2" VALIGN="TOP" MOREROWS="0"Excludes all hidden files and directories. COLNAME="1" VALIGN="TOP" MOREROWS="0"PREFIX.*COLNAME="2" VALIGN="TOP" MOREROWS="0"Excludes all nodes with the specified prefix. COLNAME="1" VALIGN="TOP" MOREROWS="0"PREFIX.SUFFIXCOLNAME="2" VALIGN="TOP" MOREROWS="0"Excludes a node with the specified prefix and suffix. TERM1="Utilities" TERM2="special_cr"ID="35591"special_crNAMEspecial_cr name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Replaces certain special characters in the specified file with their equivalent character codes in the desired document publishing system format. LOCATIONspecial_cr is located in:/ata/doc/utils/special_cr/binSYNOPSISspecial_cr -input_file input_file_name -dp_type documentation_system [-header | -no_header] [-help]DESCRIPTIONSome ASCII characters have special meaning in the underlying document publishing system. This utility replaces these ASCII characters in acceptable FrameMaker or Interleaf character codes. The special characters that are processed by this utility for FrameMaker and Interleaf are listed in Table 4-15 and Table 4-16 respectively. The output is sent to stdout which can be redirected to a file. To view the output as a document in FrameMaker, redirect the output to a file with a .mml extension. To view the output as a document in Interleaf, redirect the output to a file with a .doc extension. OPTIONS-input_file input_file_nameThe file to be processed. -dp_type documentation_system This option is required to specify the output format type. Only two types are accepted: ileaf and frame. This value is assigned to the DP_TYPE variable.[-header|-no_header]If -header is specified, the Interleaf component or FrameMaker paragraph definitions are included in the output file. These paragraph/component definitions are contained in their respective header files. For more information, see the HEADER FILE Section below. DEFAULT: HEADERDEFAULT HEADER FILE: FrameMaker $ATAHOME/doc/utils/special_cr/frame/header.mmlDEFAULT HEADER FILE: Interleaf$ATAHOME/doc/utils/special_cr/ileaf/header.doc[-help]The proper syntax for the utility is displayed. HEADER FILESThe special_cr utility automatically includes default FrameMaker paragraph and Interleaf component definitions into the output file. These paragraph/component definitions are contained in their respective header files. Table 4-15 identifies and describes the paragraph tags defined in the default header file for FrameMaker. The default header file is located in the $ATAHOME/doc/utils/special_cr/frame directory. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-15. Paragraph Tags defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 1COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 2COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3 .... up to 10COLNAME="2" VALIGN="TOP" MOREROWS="0"section titles for levels 3 up to 10COLNAME="1" VALIGN="TOP" MOREROWS="0"figureCOLNAME="2" VALIGN="TOP" MOREROWS="0"figure captionCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono spaced paragraphTable 4-16 identifies and describes the components defined in the default header file for Interleaf. The default header file is located in the $ATAHOME/doc/utils/special_cr/ileaf directory. COLS="2"COLNAME="1" COLWIDTH="237p"COLNAME="2" COLWIDTH="355p"NAMEST="1" NAMEEND="2" SPANNAME="S1T2"SPANNAME="S1T2" VALIGN="TOP" MOREROWS="0"Table 4-16. Components defined in the header file (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listSPECIAL CHARACTERSTable 4-17 identifies and describes the special characters for FrameMaker. COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="222p"COLNAME="3" COLWIDTH="222p"NAMEST="1" NAMEEND="3" SPANNAME="S1T3"SPANNAME="S1T3" VALIGN="TOP" MOREROWS="0"Table 4-17. List of special characters for FrameMaker (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"SubstitutionCOLNAME="1" VALIGN="TOP" MOREROWS="0"'\n'COLNAME="2" VALIGN="TOP" MOREROWS="0"Carriage ReturnCOLNAME="3" VALIGN="TOP" MOREROWS="0"<HR>COLNAME="1" VALIGN="TOP" MOREROWS="0"' ' COLNAME="2" VALIGN="TOP" MOREROWS="0"spaceCOLNAME="3" VALIGN="TOP" MOREROWS="0"<HS>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\ ' COLNAME="2" VALIGN="TOP" MOREROWS="0"tabCOLNAME="3" VALIGN="TOP" MOREROWS="0"<Tab>COLNAME="1" VALIGN="TOP" MOREROWS="0"'<' COLNAME="2" VALIGN="TOP" MOREROWS="0"less thanCOLNAME="3" VALIGN="TOP" MOREROWS="0"<Character \\x3c>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\>' COLNAME="2" VALIGN="TOP" MOREROWS="0"greater thanCOLNAME="3" VALIGN="TOP" MOREROWS="0"<Character \\x3e>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\\\xd5 COLNAME="2" VALIGN="TOP" MOREROWS="0"back slashCOLNAME="3" VALIGN="TOP" MOREROWS="0"<Character \\x5c>Table 4-18 identifies and describes the special characters for Interleaf. COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="222p"COLNAME="3" COLWIDTH="222p"NAMEST="1" NAMEEND="3" SPANNAME="S1T3"SPANNAME="S1T3" VALIGN="TOP" MOREROWS="0"Table 4-18. List of special characters for Interleaf (sheet (Sheet of )) COLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"SubstitutionCOLNAME="1" VALIGN="TOP" MOREROWS="0"'\n'COLNAME="2" VALIGN="TOP" MOREROWS="0"Carriage ReturnCOLNAME="3" VALIGN="TOP" MOREROWS="0"<HR>COLNAME="1" VALIGN="TOP" MOREROWS="0"' ' COLNAME="2" VALIGN="TOP" MOREROWS="0"spaceCOLNAME="3" VALIGN="TOP" MOREROWS="0"<SP>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\ ' COLNAME="2" VALIGN="TOP" MOREROWS="0"tabCOLNAME="3" VALIGN="TOP" MOREROWS="0"<tab>COLNAME="1" VALIGN="TOP" MOREROWS="0"'<' COLNAME="2" VALIGN="TOP" MOREROWS="0"less thanCOLNAME="3" VALIGN="TOP" MOREROWS="0"<#3c>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\>' COLNAME="2" VALIGN="TOP" MOREROWS="0"greater thanCOLNAME="3" VALIGN="TOP" MOREROWS="0"<#3e>COLNAME="1" VALIGN="TOP" MOREROWS="0"'\\\xd5 COLNAME="2" VALIGN="TOP" MOREROWS="0"back slashCOLNAME="3" VALIGN="TOP" MOREROWS="0"<#5c>TERM1="Utilities" TERM2="user_docs"ID="22609"user_docsNAMEuser_docs name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Converts FrameMaker files with the .doc extension in a target directory specified by the user from the FrameMaker 4 format to FrameMaker 5 format. LOCATIONuser_docs is located in: $ATAHOME/doc/utils/frame/fm4to5SYNOPSISuser_docs -r target_directory [-help]DESCRIPTIONuser_docs converts all files with the .doc extension in a target directory specified by the user from the FrameMaker 4 format to FrameMaker 5 format. user_docs also creates .doc.backup versions of the original files. Note: FILENAME="01100.tif" ORIGSEQ="3" ORIGTYPE="I" ORIGDOC="../../sources/dx_utils/dxu_utls2.fm5.mif"NOTE: If you already have .doc.backup versions of these files, user_docs will create .doc.backup.backup versions of these backup files, as well.OPTIONS-r target_directorySpecifies the directory where the FrameMaker files to be converted reside. [-help]The proper syntax for the utility is displayed. DIAGNOSTICSERROR: Unknown option "-option"Improper command syntax was used. ERROR: Too few argumentsImproper command syntax was used. ERROR: FMHOME is not defined in your environment.Unable to execute user_docs. Exiting...FrameMaker uses the environment variable FMHOME to refer to the path where it is installed. This variable must be defined.ERROR: fmbatch utility does not exist in directory $FMHOME/binUnable to execute user_docs. Exiting...The FrameMaker utility "fmbatch" must be accessible.ERROR: fmbatch utility is not in executable format.Unable to execute user_docs. Exiting...The FrameMaker utility "fmbatch" must be in an executable format.ERROR: target_directory is not a valid directory.Unable to execute user_docs. Exiting...The target directory specified by the user must be valid.EXAMPLE% user_docs -r /home/lucy/frame_filesFiles with the .doc extension in the directory /home/lucy/frame_files are now in FrameMaker 5 format. The original version of each file has been saved in a .doc.backup file.Chapter 3 Derived Component ConceptsTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress Utilities GuideIntroductionIn this chapter the concepts of a Derived Component and a Derived Component Specification are described. The first section defines some terms that will be used throughout the chapter. The next section contains an overview of the operation of the parse_dcs. Subsequent sections describe in detail how a user instructs parse_dcs to extract the desired Derived Component from the ObjectTeam repository using a Derived Component Specification (DCS). In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15105" TYPE="XREF-TEXTCOPY"Definition of Terms 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="13537" TYPE="XREF-TEXTCOPY"Overview 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37323" TYPE="XREF-TEXTCOPY"Meta-Class 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="39373" TYPE="XREF-TEXTCOPY"Derived Component Specification 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'6COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="26980" TYPE="XREF-TEXTCOPY"Directives 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16457" TYPE="XREF-TEXTCOPY"System Specification 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20709" TYPE="XREF-TEXTCOPY"Super Type Specification 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'38COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19581" TYPE="XREF-TEXTCOPY"Meta-Type Specification 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="17283" TYPE="XREF-TEXTCOPY"Meta-Type Scoping 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'40COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="31504" TYPE="XREF-TEXTCOPY"Table Definitions 3name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'41ID="15105"Definition of TermsIntroductionThis section defines terms that are used throughout this chapter. Derived Component A collection of information extracted from the ObjectTeam repository. Users determine the collection of information and its format through the use of a Derived Component Specification. Derived Component SpecificationA set of Specifications (see REFID="39373" TYPE="XREF-TEXTCOPY"Derived Component SpecificationDirectiveInstructions to the utility for traversing, extracting, or formatting information in the ObjectTeam repository (see REFID="39373" TYPE="XREF-TEXTCOPY"Derived Component Specification). ObjectA uniquely identified entity. In the ObjectTeam repository an Object is uniquely identified by an identification number generated by the tool. Meta-ClassOne of: Attribute, Diagram, Connector, Component, Property, or Table (see REFID="37323" TYPE="XREF-TEXTCOPY"Meta-Class). Meta-Class Specification A collection of Directives for extracting, and formatting information associated with a Meta-Class. Meta-Type The types of Objects defined for a particular method. For a list of Meta-Types for a particular method, see the utilities description for that method of interest. Meta-Type Scoping Scoping the output such that all information extracted is related to a Object or a set of Objects of the same Meta-Type (see REFID="17283" TYPE="XREF-TEXTCOPY"Meta-Type Scoping). Meta-Type Specification A collection of Directives for extracting, and formatting information associated with a Meta-Type. Specification A collection of Directives that determine what information is extracted from the ObjectTeam repository, the order it is extracted, and how it is formatted (seeREFID="39373" TYPE="XREF-TEXTCOPY"Derived Component Specification). Super Type A set of Meta-Types of the same Meta-Class with similar characteristics. Super Type Specification A collection of Directives for extracting, and formatting information associated with a Super Type. System Specification A collection of Directives for extracting, and formatting information associated with the system. ID="13537"Overviewparse_dcsparse_dcs enables users to extract and format a Derived Component from an ObjectTeam system. To accomplish this extraction, the utility relies on five sources of information. These sources, as well as the Derived Component generated by the utility, are shown in the following figure and described in the sections below. FILENAME="01101.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/dx_utils/dxu_fdcs.fm5.mif"In order to create the Derived Component, the utility uses the Derived Component Specification for details regarding what information the Derived Component will consist of and how it will be formatted. The Meta-Type Scoping parameters determine at which Object(s) the extraction should start. The Tags File, Header File, and Defaults File provide specific formatting information to the utility for the output of text, diagrams, and tables. Once the Derived Component Specification has been verified, extraction of information from the ObjectTeam repository proceeds, resulting in the output of the Derived Component. For a good understanding of the workings of parse_dcs, the following sections should be studied in the order listed below: n REFID="37323" TYPE="XREF-TEXTCOPY"Meta-Classn REFID="39373" TYPE="XREF-TEXTCOPY"Derived Component Specificationn REFID="17283" TYPE="XREF-TEXTCOPY"Meta-Type ScopingTERM1="MetaClass"ID="37323"Meta-ClassMeta-ClassesMethod elements (e.g., Class, Process, Data Flow, Class Diagram, etc.) that have properties and behavior in common have been grouped into Meta-Classes. Each Meta-Class is identified and described in the following table. COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Part of a Component. COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Relationship between Components. COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"An analysis or design element. COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Container for Attributes, Connectors, and Components. COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"Part of a Component. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Associated with Attributes, Connectors, Components, Diagrams, and Methods. The Meta-Types for each Meta-Class are identified in the META-TYPES section of parse_dcs in the Utilities Chapter. + add refTERM1="Derived Component Specifications"ID="39373"Derived Component SpecificationThe Derived Component Specification is the "itinerary for a journey" through the ObjectTeam repository. At every point along the journey (i.e., an Object), the itinerary includes instructions for what information is be collected, how it is to be formatted for presentation, and where to go next. These instructions are based on the Object's Meta-Class and Meta-Type and is called its Specification. The total set of information collected is known as a Derived Component. The collection of Specifications is the Derived Component Specification (DCS). DocExpress provides predefined DCSs to extract various sets of information. The DCSs available for each method are documented in the Derived Component Specification section of the applicable utility. The user may modify the predefined DCSs as well as develop their own. The rest of this chapter provides the necessary information for the user to modify or develop their own Derived Component Specifications. The Derived Component Specification may contain the following Specification types: n System Specification name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' used when Objects of more than one Meta-Type is desired as a starting point.n Meta-Class Specifications name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' permits formatting a set of Objects as a list, or table.n Super Type Specifications name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' useful when formatting the Objects of a Super Type is desired. They may also be used to develop standard formats for any of the Meta-Types of the Super Type, and/or n Meta-Type Specifications name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' used to format the Objects of a specific Meta-Type. See REFID="19581" TYPE="XREF-TEXTCOPY"Meta-Type SpecificationTERM1="Derived Component Specifications" TERM2="specification rules"Specification RulesEach type of specification is a text file that may contain the following: n Comment linesn Blank linesn DirectivesThe following figure is an example of a Meta-Type Specification. # Class Format File## This file defines what Class information is processed, how it is processed,# and the order it is processed. This file may be specified as the starting# Specification or referenced by another Specification.Type= Class = =Specifies the type of Specification# Generate a sectionSection= $NAME $TYPE# Process the Class' PropertiesProperty = $ATAHOME/doc/case_tools/ot/specs/uml/ClassTree/Property.txt# Process the Class Diagram for the ClassClassTable = $ATAHOME/doc/case_tools/ot/specs/uml/ClassTree/CD.txt# Process the State Transition Diagram for the ClassStateDiag = $ATAHOME/doc/case_tools/ot/specs/uml/ClassTree/STD.txtTERM1="Derived Component Specifications" TERM2="comment and blank lines"Comment and Blank LinesComment and blank lines are ignored by the utility but, may contain useful information and improve the readability of the Specification. Comment lines begin with a pound sign (#). The comment lines in the default Specifications provided with DocExpress contain general information about the file, syntax rules for the Specification, and a list of valid Directives that may be used within the Specification. TERM1="Derived Component Specifications" TERM2="directives"ID="26980"DirectivesDirectives are instructions to parse_dcs regarding what information to extract and how this information will be formatted. Lines in a Specification which are neither blank nor comments, must consist of four (4) fields where each field is delimited by a equals sign (=) as follows:directive=value=reserved field=descriptionThe first field is the directive and the second field its value. These two fields are required; the third and fourth fields are optional. In the previous figure, the the first uncommented and non-blank line is TYPE, the value is Class, the reserved field is blank, and the description is "Specifies the type of Specification." There are six categories of Directives: n TYPE Directives name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' identify the Specification's type. n General Directivesn Scoping Directives name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' control which Objects will be included in the output.n Formatting Directives name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' control how the repository information will appear in the document.n Property Directivesn Traversal Directives name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' determine which Objects will be visited next.Each of these Directive categories is described in the following sections. TERM1="Directives" TERM2="type"TERM1="Type Directives"ID="37148"Type DirectivesA TYPE Directive identifies a Specification's type and thus, determines all other Directives which may be used in the Specification. The value field of a TYPE directive must be one of the following: n Systemn A Meta-Class Specification Type, n A valid Meta-Type for the method, orn A valid Super Type for the method. Meta-Class Specification TypesThe valid Meta-Class Specification Types are identified and described in the following table. The valid Meta-Types and Super Types are identified and described in the META-TYPES section of parse_dcs in the Utilities Chapter. COLS="3"COLNAME="1" COLWIDTH="115p"COLNAME="2" COLWIDTH="127p"COLNAME="3" COLWIDTH="348p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"TYPEDirectiveCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Attribute Class as Containers.COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Attribute Class as a list.COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Attribute Class as a table.COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Diagram Class as Containers.COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"DiagramListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Diagram Class as a list.COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"DiagramTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Diagram Class as a table.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Connector Class as Containers.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"ConnectorListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Connector Class as a list.COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"ConnectorTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Connector Class as a table.COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Component Class as Containers.COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"ComponentListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Component Class as a list.COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"ComponentTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Component Class as a table.COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Property Class as Containers.COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Property Class as a list.COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Property Class as a table.COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Method Class as Containers.COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Method Class as a list.COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"Format Objects of the Method Class as a table.TERM1="Directives" TERM2="general"TERM1="General Directives"ID="11386"General DirectivesGeneral Directives include directives to execute a system process and include a file located in the system or network file system. The value of a General Directive must be a full-path name to a file. Variables may be included in the value to reference the file. (See REFID="16163" TYPE="XREF-TEXTCOPY"Variables.)COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ExecuteCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to execute the command specified in the Directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"IncludeFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to include the file specified in the Directive's value. TERM1="Variables" TERM2="in directives"ID="16163"VariablesVariables may be included in the value of some Directives. Variables are identified by a dollar sign ($) before a character string. For example, the value of the Section directive in the example below contains several variables (i.e., $NAME, and $TYPE) identified by a dollar sign ($) followed by an alphanumeric string. # Class SpecificationType= Class# Generate a sectionSection= $NAME $TYPEVariables in Text ValuesThe following table identifies and describes the variables available to the user in the value fields of Directives for all Meta-Classes. COLS="2"COLNAME="1" COLWIDTH="169p"COLNAME="2" COLWIDTH="304p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"Environment VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Any variable defined in the user's environment. COLNAME="1" VALIGN="TOP" MOREROWS="0"DocExpress VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"Any variable defined in the current DocExpress Variable Set or Configuration File. COLNAME="1" VALIGN="TOP" MOREROWS="0"$CONFIGURATIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current configuration nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$CORPORATECOLNAME="2" VALIGN="TOP" MOREROWS="0"Current Corporate database nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$DATECOLNAME="2" VALIGN="TOP" MOREROWS="0"Equivalent to $MONTH $DAY, $YEARCOLNAME="1" VALIGN="TOP" MOREROWS="0"$DAYCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current day as a two digit decimalCOLNAME="1" VALIGN="TOP" MOREROWS="0"$DECIMALDATECOLNAME="2" VALIGN="TOP" MOREROWS="0"Equivalent to $MONTHDEC/$DAY/$SHORTYEARCOLNAME="1" VALIGN="TOP" MOREROWS="0"$HOUR12COLNAME="2" VALIGN="TOP" MOREROWS="0"Current hour using a 12 hour clockCOLNAME="1" VALIGN="TOP" MOREROWS="0"$HOUR24COLNAME="2" VALIGN="TOP" MOREROWS="0"Current hour using a 24 hour clockCOLNAME="1" VALIGN="TOP" MOREROWS="0"$MINUTECOLNAME="2" VALIGN="TOP" MOREROWS="0"Current minuteCOLNAME="1" VALIGN="TOP" MOREROWS="0"$MONTHCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current monthCOLNAME="1" VALIGN="TOP" MOREROWS="0"$MONTHDECCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current month as a decimalCOLNAME="1" VALIGN="TOP" MOREROWS="0"$PHASECOLNAME="2" VALIGN="TOP" MOREROWS="0"Current phase nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$PHASEVERSIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current phase versionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$PROJECTCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current projectCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SECONDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current secondCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SECTIONLEVELCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current Section LevelCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SHORTDATECOLNAME="2" VALIGN="TOP" MOREROWS="0"Equivalent to $SHORTMONTH $DAY, $YEARCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SHORTMONTHCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current month with three (3) lettersCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SHORTYEARCOLNAME="2" VALIGN="TOP" MOREROWS="0"Last two digits of the current yearCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SYSTEMCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current system nameCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SYSTEMVERSIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current system versionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$TIMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Current timeCOLNAME="1" VALIGN="TOP" MOREROWS="0"$YEARCOLNAME="2" VALIGN="TOP" MOREROWS="0"Current yearVariables in Section DirectivesThe following table identifies and describes the variables available to the user in the value field of a Section Directive for all Meta-Classes in addition to the variables in the previous table. COLS="2"COLNAME="1" COLWIDTH="169p"COLNAME="2" COLWIDTH="288p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$DECREMENTCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to decrement the current Section Level. Only valid in the Section directive. COLNAME="1" VALIGN="TOP" MOREROWS="0"$INCREMENTCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to increment the current Section Level. Only valid in the Section directive. Attribute VariablesThe Attribute Meta-Class has the variables identified and described in the following table in addition to those in the first two tables.COLS="2"COLNAME="1" COLWIDTH="175p"COLNAME="2" COLWIDTH="271p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$ATTRIBUTETYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"The Attribute's typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"$INITVALUECOLNAME="2" VALIGN="TOP" MOREROWS="0"The Attribute's initial value. COLNAME="1" VALIGN="TOP" MOREROWS="0"$MODIFIERSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Attribute's modifiers. COLNAME="1" VALIGN="TOP" MOREROWS="0"$NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the ComponentCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SPECIFICATIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"The complete specification for the Attribute. COLNAME="1" VALIGN="TOP" MOREROWS="0"$TYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"Type of ComponentComponent VariablesThe Component Meta-Class has the variables identified and described in the following table in addition to those in the first two tables. COLS="2"COLNAME="1" COLWIDTH="157p"COLNAME="2" COLWIDTH="289p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$ANCESTORSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Component's ancestors (i.e., the Component's parents and its parent's parents). COLNAME="1" VALIGN="TOP" MOREROWS="0"$ATTRIBUTESCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Component's attributes (if applicable). COLNAME="1" VALIGN="TOP" MOREROWS="0"$CHILDRENCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Component's children. COLNAME="1" VALIGN="TOP" MOREROWS="0"$DESCENDENTSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Component's descendents (i.e., its children and its children's children). COLNAME="1" VALIGN="TOP" MOREROWS="0"$METHODSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Component's Methods (if applicable). COLNAME="1" VALIGN="TOP" MOREROWS="0"$NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the ComponentCOLNAME="1" VALIGN="TOP" MOREROWS="0"$PARENTSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Component's parents. COLNAME="1" VALIGN="TOP" MOREROWS="0"$TEXTCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Component's Free Text. COLNAME="1" VALIGN="TOP" MOREROWS="0"$TYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"Type of ComponentConnector VariablesThe Connector Meta-Class has the variables identified and described in the following table in addition to those in the first two tables. COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$DESTINATIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"Destination of the Connector. COLNAME="1" VALIGN="TOP" MOREROWS="0"$NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the ConnectorCOLNAME="1" VALIGN="TOP" MOREROWS="0"$SOURCECOLNAME="2" VALIGN="TOP" MOREROWS="0"Source of the Connector. COLNAME="1" VALIGN="TOP" MOREROWS="0"$TYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"Type of ConnectorCOLNAME="1" VALIGN="TOP" MOREROWS="0"$VISIBILITYCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Connector's visibility (i.e., External or Internal). Diagram VariablesThe Diagram Meta-Class has the variables identified and described in the following table in addition to those in the first two tables. COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$COMPONENTSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Components on the Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"$CONNECTORSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Connectors on the Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"$HEIGHTCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Diagram's height. COLNAME="1" VALIGN="TOP" MOREROWS="0"$NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"$TYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"Type of Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"$VERSIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Diagram's version. COLNAME="1" VALIGN="TOP" MOREROWS="0"$WIDTHCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Diagram's width. Method VariablesThe Method Meta-Class has the variables identified and described in the following table in addition to those in the first two tables. COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$CONSTRAINTCOLNAME="2" VALIGN="TOP" MOREROWS="0"Any constraints on the Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"$MODIFIERSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Modifiers to the Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"$NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"$PARAMETERSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Method's parameters. COLNAME="1" VALIGN="TOP" MOREROWS="0"$SPECIFICATIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"The complete specification for the method. COLNAME="1" VALIGN="TOP" MOREROWS="0"$TYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"Type of Method. Property VariablesThe Property Meta-Class has the variables identified and described in the following table in addition to those in the first two tables. COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"$NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"Name of the Property. COLNAME="1" VALIGN="TOP" MOREROWS="0"$VALUECOLNAME="2" VALIGN="TOP" MOREROWS="0"Property's value. TERM1="Directives" TERM2="scoping"TERM1="Scoping Directives"ID="16846"Scoping DirectivesScoping Directives control which Objects out of a set of Objects will be included in the output. The value of a Scoping Directive may take the following forms: n Enumeration name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must contain specific valuesn Filename name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' is the full-path name to a file. Variables may be included in the value to reference the file. n List name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' String(s) separated by spacesn String name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Alphanumeric charactersn Sub-field name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' contains sub-records (see below)Meta-ClassesThe Scoping Directives for all Meta-Classes are identified and described in the following table. COLS="3"COLNAME="1" COLWIDTH="88p"COLNAME="2" COLWIDTH="88p"COLNAME="3" COLWIDTH="312p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the Object's name. The string may include the asterisk "*" wild card character. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the names of the desired Objects in a file, one per line. The names may include the asterisk "*" wild card character. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameListCOLNAME="2" VALIGN="TOP" MOREROWS="0"ListCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the names of the desired Objects in the value of the Directive separated by spaces. The names may include the asterisk "*" wild card character. COLNAME="1" VALIGN="TOP" MOREROWS="0"StartCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs an Object if its name is lexically greater than the string specified in the directive's value. The string may include the asterisk "*" wild card character. COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs an Object if its name is lexically less than the string specified in the directive's value. The string may include the asterisk "*" wild card character. Attribute, Component, Connector, Diagram, and Method Meta-ClassesThe Attribute, Component, Connector, Diagram, and Method Meta-Classes have the Scoping Directives identified and described in the following table in addition to those in the previous table. COLS="3"COLNAME="1" COLWIDTH="93p"COLNAME="2" COLWIDTH="93p"COLNAME="3" COLWIDTH="304p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AddCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sub-fieldCOLNAME="3" VALIGN="TOP" MOREROWS="0"Processes Objects which have Property with the value specified in the directive's value. See the following table for the valid sub-field directives. COLNAME="1" VALIGN="TOP" MOREROWS="0"PruneCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sub-fieldCOLNAME="3" VALIGN="TOP" MOREROWS="0"Does NOT process Objects which have the Property with the value specified in the directive's value. See the following table for the valid sub-field directives. COLNAME="1" VALIGN="TOP" MOREROWS="0"SkipCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sub-fieldCOLNAME="3" VALIGN="TOP" MOREROWS="0"Processes only Traversal Directives for Objects which have the Property and value. No information is output for the Object. See the following table for the valid sub-field directives. The Scoping Directives in the above table take the sub-field form. A Sub-field value contains sub-records. A sub-record has two (2) fields (i.e., sub-fields) delimited by a colon (:). Each sub-record is separated by a semi-colon (;) as follows: directive:value;directive:value;Sub-Field DirectivesThe following table identifies and describes the sub-field Directives available to the Add, Prune, and Skip Directives. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the name of the Property. COLNAME="1" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired value of the Property. Component Scoping DirectivesThe Component Meta-Class has the Scoping Directives identified and described in the following table in addition to those in the first two tables. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"RelationCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired relatives of the Object to be included in the output. Valid values are CHILDREN, PARENTS, DESCENDENTS or ANCESTORS. COLNAME="1" VALIGN="TOP" MOREROWS="0"RootCOLNAME="2" VALIGN="TOP" MOREROWS="0"BlankCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies that the desired Components have no Parents. Connector Scoping DirectivesThe Connector Meta-Class has the Scoping Directives identified and described in the following table in addition to those in first two tables. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Includes Connectors with the Direction specified in the directive's value. Valid values are IN, OUT, or BOTH. COLNAME="1" VALIGN="TOP" MOREROWS="0"VisibilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Includes Connectors which have the Visibility specified in the directive's value. Valid values are INTERNAL, EXTERNAL, or BOTH. In the following example, the Direction Directive has the value of IN which specifies that only Flows are desired that come into the associated Object (i.e., a Object whose Specification references this Specification). # Flow SpecificationType= FlowDirection=IN= =Directive to specify only incoming flowsTERM1="Directives" TERM2="formatting"TERM1="Formatting Directives"ID="28882"Formatting DirectivesIntroductionFormatting Directives control how the repository information will appear in the document. The value of a Formatting Directive may take the following forms:n Blank name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must be blankn Enumeration name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must contain specific valuesn Filename name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' is the full-path name to a file. Variables may be included in the value to reference the file.n Numeric name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must be a numbern String name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Alphanumeric charactersn Text name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' may contain alphanumeric characters and include variables. Meta-Class Formatting DirectivesThe Formatting Directives for all Meta-Classes are identified and described in the following table. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ListCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the text as an element of a list. COLNAME="1" VALIGN="TOP" MOREROWS="0"ParagraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generate a paragraph with the text in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generate a section title. COLNAME="1" VALIGN="TOP" MOREROWS="0"TableDefCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the Table Definitions file in the directive's value. See the REFID="31504" TYPE="XREF-TEXTCOPY"Table DefinitionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the name of a symbolic Document Publishing System tag. This tag is used for all subsequent text output with the Paragraph Directive within the Specification. Diagram Formatting DirectivesThe following table identifies and describes Formatting Directives for the Diagram Meta-Class in addition to those in first table. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired height of the Diagram (in inches). COLNAME="1" VALIGN="TOP" MOREROWS="0"OrientCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired orientation for the Diagram. The legal values are Portrait, Landscape and BestFit. COLNAME="1" VALIGN="TOP" MOREROWS="0"PrintCOLNAME="2" VALIGN="TOP" MOREROWS="0"BlankCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to output the Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the title for a Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"WidthCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired width of the Diagram (in inches). Property Formatting DirectivesThe following table identifies and describes Formatting Directives for the Property Meta-Class in addition to those in the first table. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DoubleReturnCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies how to treat two consecutive returns in the Property. The legal values are DoubleReturn, Paragraph, Return, and Space. See the following table for descriptions of these values. COLNAME="1" VALIGN="TOP" MOREROWS="0"ReturnCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies how to treat returns in the Property's text. Valid directives are DoubleReturn, Paragraph, Return, and Space. See the following table for descriptions of these values. Enumeration ValuesThe following table identifies and describes the valid values for the DoubleReturn and Return Directives. COLS="2"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="474p"COLNAME="1" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DoubleReturnCOLNAME="2" VALIGN="TOP" MOREROWS="0"Output two consecutive returns. COLNAME="1" VALIGN="TOP" MOREROWS="0"ParagraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"Output the document publishing tag for a paragraph. COLNAME="1" VALIGN="TOP" MOREROWS="0"ReturnCOLNAME="2" VALIGN="TOP" MOREROWS="0"Output a return. COLNAME="1" VALIGN="TOP" MOREROWS="0"SpaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Output a space. TERM1="Directives" TERM2="property"TERM1="Property Directives"Property DirectivesProperty Directives specify attributes of the Object to extract (e.g., Attributes, Source). The order in which these directives appear in the specification determines the order in which the information will be extracted from the repository. Property Directives are specific to the Meta-Type. The value of a Property Directive may take the following forms:n String name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Alphanumeric charactersn Text name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' may contain alphanumeric characters and include variables. Attribute Meta-Class Property DirectivesThe following table identifies and describes Property Directives for the Attribute Meta-Class. These Directives apply only to the generation of tables which contain Attribute information. COLS="3"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="85p"COLNAME="3" COLWIDTH="379p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the current Attribute. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the string. Component Meta-Class Property DirectivesThe following table identifies and describes Property Directives for the Component Meta-Class. These Directives apply only to the generation of tables which contain Component information. COLS="3"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="85p"COLNAME="3" COLWIDTH="379p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AncestorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Ancestors. COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Attributes. COLNAME="1" VALIGN="TOP" MOREROWS="0"ChildrenCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Children of the Component. COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component. COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Connectors. COLNAME="1" VALIGN="TOP" MOREROWS="0"DescendentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Ancestors. COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Methods. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the string. COLNAME="1" VALIGN="TOP" MOREROWS="0"ParentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Parents. Connector Meta-Class Property DirectivesThe following table identifies and describes Property Directives for the Connector Meta-Class. COLS="3"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="85p"COLNAME="3" COLWIDTH="379p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DestinationCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Connector's destination Component. COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for a Connector. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the string. COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Connector's source Component. Diagram Meta-Class Property DirectivesThe following table identifies and describes Property Directives for the Diagram Meta-Class. COLS="3"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="85p"COLNAME="3" COLWIDTH="379p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Diagram's Connectors. COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Diagram's Components. COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the string. Method Meta-Class Property DirectivesThe following table identifies and describes Property Directives for the Method Meta-Class. COLS="3"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="85p"COLNAME="3" COLWIDTH="379p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the string. Property Meta-Class Property DirectivesThe following table identifies and describes Property Directives for the Property Meta-Class. COLS="3"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="85p"COLNAME="3" COLWIDTH="379p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Property. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Object associated with the Property. The following example is a Meta-Class Specification to output Objects of type Connector in a table format (i.e., ConnectorTable). The PropertyName Directive in the Specification is a Property Directive which specifies that the table should include the Property Free Text associated with the Connector. # Connector Table SpecificationType= ConnectorTable = =Specifies the type of format fileTableDef= $ATAHOME/doc/case_tools/ot/tables/uml/ExtIF2Coltable.txtVisibility=ExternalConnector=$NAME ($TYPE)Description=FlowSource=$NAME ($TYPE)Destination=$NAME ($TYPE)PropertyName=Free TextTERM1="Directives" TERM2="traversal"TERM1="Traversal Directives"Traversal DirectivesTraversal directives determine which Objects will be visited next. The order in which these directives appear in the specification determines the order in which the traversal will occur through the repository. The value field of a Traversal Directive contains the file path name for an appropriate Specification for the Objects. That is, the TYPE Directive of the referenced Specification must be one of the following: n The Meta-Typen A Super Type which contains the Meta-Typen The Meta-Class which contains the Meta-TypeTraversal directivesTraversal directives are valid only in a System Specification and Meta-Type Specifications. The Traversal Directives available for a specific Meta-Type are dependent on the Meta-Type; therefore, refer to Meta-Type Specification section for the desired utility for more information. The following table describes the general form of the Traversal Directive. COLS="2"COLNAME="1" COLWIDTH="169p"COLNAME="2" COLWIDTH="423p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"<Meta-Type>COLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to process all Objects of the Meta-Type associated with the current Object in accordance with the Specification specified in the Directives value. The fourth directive in the following example instructs the utility to extract the Class Diagram (i.e., CD) associated with the Class in accordance with the Specification identified in the Directives value. The value of the directive is $ATAHOME/doc/case_tools/ot/spec/uml/ClassTree/CD.txt. # Class SpecificationType= Class = =Specifies the type of Specification# Generate a sectionSection= $NAME $TYPE# Process the Class' PropertiesProperty = $ATAHOME/doc/case_tools/ot/spec/uml/ClassTree/Property.txt# Process the Class Diagram for the ClassCD = $ATAHOME/doc/case_tools/ot/specs/uml/ClassTree/CD.txt# Process the State Transition Diagrams for the ClassSTD = $ATAHOME/doc/case_tools/ot/specs/uml/ClassTree/STD.txtTERM1="System Specifications"ID="16457"System SpecificationA System Specification may be used when more than one Meta-Type is desired as a starting point. The command-line Meta-Type Scoping parameters (i.e., -oname and -otype) are limited to one Meta-Type (see REFID="17283" TYPE="XREF-TEXTCOPY"Meta-Type Scoping). The user may specify multiple Meta-Types in the System Specification using the available Traversal Directives, thereby eliminating the restrictions of the Meta-Type Scoping parameters. The System Specification can be specified on the command line of parse_dcs with the -spec option. The value of the TYPE directive in a System Specification must be System. The valid Formatting Directives for the System Specification and their type are identified and described in the following table. For more information on the Directive, refer to the section for its type which may be found on the following pages: n REFID="37148" TYPE="XREF-TEXTCOPY"Type Directivesn REFID="11386" TYPE="XREF-TEXTCOPY"General Directivesn REFID="16846" TYPE="XREF-TEXTCOPY"Scoping Directivesn REFID="28882" TYPE="XREF-TEXTCOPY"Formatting DirectivesSystem Specification Formatting DirectivesThe following table does not identify the Traversal Directives. These are documented in REFID="30236" TYPE="XREF-TEXTCOPY"System Specification. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"<Meta-Type>COLNAME="2" VALIGN="TOP" MOREROWS="0"TraversalCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the type of Objects to be examine next. COLNAME="1" VALIGN="TOP" MOREROWS="0"ExecuteCOLNAME="2" VALIGN="TOP" MOREROWS="0"GeneralCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to execute the command specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"IncludeFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"GeneralCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to include the file specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"ParagraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to generate a paragraph with the text in the directive's value. Variables may be included in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to generate a section title. Variables may be included in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"The directive's value specifies the name of a document publishing tag. This tag is used for all subsequent text output with the Paragraph Directive.COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Identifies the Specification type. Must be System. The following example shows a System Specification which generates two document sections containing tables for external interfaces, and internal interfaces. # System SpecificationType = System# Generate a section for the External Interface Table(s)Section=External Interfaces# Generate table(s) for the External Interfaces of the system.Interface=$ATAHOME/doc/case_tools/ot/specs/uml/ExtIFtable/ExtIFtable.txt# Generate a section for the Internal Interface Table(s)Section=Internal Interfaces# Generate table(s) for the Internal Interfaces of the system.Interface=$ATAHOME/doc/case_tools/ot/specs/uml/IntIFtable/IntIFtable.txtTERM1="MetaClass Specifications"Meta-Class SpecificationIntroductionA Meta-Class Specification is a Specification that may be used to format the information of any Meta-Type in the Meta-Class. These Specifications come in three Presentation Types: Container, List, and Table. The Directives for each Presentation Type are identified and described in the following sections: n REFID="42453" TYPE="XREF-TEXTCOPY"Container Specificationsn REFID="15751" TYPE="XREF-TEXTCOPY"List Specificationsn REFID="20799" TYPE="XREF-TEXTCOPY"Table SpecificationsMeta-Class Specifications for the three Presentation Types are available for all Meta-Classes of the ObjectTeam repository (i.e., Attribute, Diagram, Connector, Component, Method). Default Meta-Class Specifications provided with DocExpress are located in the directory $ATAHOME/doc/case_tools/ot/spec/defaults. TERM1="Specifications" TERM2="Container Specifications"TERM1="Container Specifications"ID="42453"Container SpecificationsIntroductionThe Meta-Class Specifications for Containers may use the General, Scoping and Formatting DirectivesMeta-Class Specifications for ContainersThe default Meta-Class Specifications provided with DocExpress for Containers are identified in the following table. COLS="3"COLNAME="1" COLWIDTH="150p"COLNAME="2" COLWIDTH="150p"COLNAME="3" COLWIDTH="187p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Type Directive ValueCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="3" VALIGN="TOP" MOREROWS="0"attribute.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"diagram.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="3" VALIGN="TOP" MOREROWS="0"connector.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="3" VALIGN="TOP" MOREROWS="0"component.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"property.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"method.txtContainer DirectivesAll Container Specifications may contain the Directives identified and described in the following table. For more information on the Directive, refer to the section for its type. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AddCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Only process an Object which has the Property with the value specified. COLNAME="1" VALIGN="TOP" MOREROWS="0"ExecuteCOLNAME="2" VALIGN="TOP" MOREROWS="0"GeneralCOLNAME="3" VALIGN="TOP" MOREROWS="0"Execute the command specified. COLNAME="1" VALIGN="TOP" MOREROWS="0"IncludeCOLNAME="2" VALIGN="TOP" MOREROWS="0"GeneralCOLNAME="3" VALIGN="TOP" MOREROWS="0"Include the file specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the Object's name. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the names of the desired Objects in a file, one per line. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameListCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the names of the desired Objects in the value of the Directive separated by spaces. COLNAME="1" VALIGN="TOP" MOREROWS="0"ParagraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generate a paragraph with the specified text. Variables may be included in the text. COLNAME="1" VALIGN="TOP" MOREROWS="0"SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Generate a section title. Variables may be included in the text. COLNAME="1" VALIGN="TOP" MOREROWS="0"SkipCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Do NOT output the Object which has the Property with the value specified. COLNAME="1" VALIGN="TOP" MOREROWS="0"StartCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs an Object if its name is lexically greater than the string specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs an Object if its name is lexically less than the string specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies a symbolic formatting tag name. This tag is used for all subsequent text output with the Paragraph Directive in the current specification.COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Identifies the Specification's type. Must be Attribute. The following sections identify the directives that may be used in the Container Meta-Class Specifications for each of the ObjectTeam Meta-Classes. TERM1="Specifications" TERM2="Container" TERM3="Attribute"TERM1="Container Specifications" TERM2="Attribute"Attribute Container SpecificationsThe Attribute Specification for Containers (i.e., the TYPE directive set to Attribute) may only contain the Directives in the above table. The default Attribute Specification is Attribute.txt. TERM1="Specifications" TERM2="Container" TERM3="Component"TERM1="Container Specifications" TERM2="Component"Component Container SpecificationsThe Component Specification for Containers (i.e., the TYPE directive set to Component) may contain the directives identified and described in the following table in addition to those in the previous table. For more information on the Directive, refer to the section for its type. The default Component Specification is Component.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"RelationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired relatives of the Component Components to be included in the output. Valid values are CHILDREN, PARENTS, DESCENDENTS or ANCESTORS. TERM1="Specifications" TERM2="Container" TERM3="Connector"TERM1="Container Specifications" TERM2="Connector"Connector Container SpecificationsThe Connector Specification for Containers (i.e., the TYPE directive set to Connector) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, refer to the section for its type. The default Connector Specification is Connector.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Include Connectors with the Direction specified. Valid values are IN, OUT, or BOTH. COLNAME="1" VALIGN="TOP" MOREROWS="0"VisibilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Include Connectors with the Visibility specified. Valid values are INTERNAL, EXTERNAL, or BOTH. TERM1="Specifications" TERM2="Container" TERM3="Diagram"TERM1="Container Specifications" TERM2="Diagram"Diagram Container SpecificationsThe Diagram Specification for Containers (i.e., the TYPE directive set to Diagram) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, refer to the section for its type. The default Diagram Specification is diagram.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired height of the diagram (in inches). The default is specified in the defaults file. COLNAME="1" VALIGN="TOP" MOREROWS="0"PrintCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs the diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"The directive's value specifies the title for the diagram. Variables in the directive's value are resolved in terms of the diagram's information. COLNAME="1" VALIGN="TOP" MOREROWS="0"WidthCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired width of the diagram (in inches). The default is specified in the defaults file. TERM1="Specifications" TERM2="Container" TERM3="Method"TERM1="Container Specifications" TERM2="Method"Method Container SpecificationsThe Method Specification for Containers (i.e., the TYPE directive set to Method) may only contain the directives in the first table. The default Method Specification is Method.txt. TERM1="Specifications" TERM2="Container" TERM3="Property"TERM1="Container Specifications" TERM2="Property"Property Container SpecificationsThe Property Specification for Containers (i.e., the TYPE directive set to Property) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, refer to the section for its type. The default Property Specification is Property.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DoubleReturnCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies how to treat two consecutive returns in the Property. The legal values are DoubleReturn, Paragraph, Return, and Space. COLNAME="1" VALIGN="TOP" MOREROWS="0"ReturnCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies how to treat returns in the Property's text. The legal values are Paragraph, Return, and Space. TERM1="Specifications" TERM2="List Specifications"TERM1="List Specifications"ID="15751"List SpecificationsMeta-Class Specifications for ListsThe default Meta-Class Specifications provided with DocExpress for Lists are identified in the following table. COLS="3"COLNAME="1" COLWIDTH="186p"COLNAME="2" COLWIDTH="186p"COLNAME="3" COLWIDTH="186p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Type Directive ValueCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeListCOLNAME="3" VALIGN="TOP" MOREROWS="0"attributelist.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"DiagramListCOLNAME="3" VALIGN="TOP" MOREROWS="0"diagramlist.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"ConnectorListCOLNAME="3" VALIGN="TOP" MOREROWS="0"connectorlist.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"ComponentListCOLNAME="3" VALIGN="TOP" MOREROWS="0"componentlist.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyListCOLNAME="3" VALIGN="TOP" MOREROWS="0"propertylist.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodListCOLNAME="3" VALIGN="TOP" MOREROWS="0"methodlist.txtList SpecificationsAll List Specifications may contain the Directives identified and described in the following table. For more information on the Directive, refer to the section for its type. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the Object's name. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the names of the desired Objects in a file, one per line. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameListCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the names of the desired Objects in the value of the Directive separated by spaces. COLNAME="1" VALIGN="TOP" MOREROWS="0"StartCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs an Object if its name is lexically greater than the string specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs an Object if its name is lexically less than the string specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Identifies the Specification's type. Must be Attribute. The following sections identify the directives that may be used in the List Meta-Class Specifications for each of the ObjectTeam Meta-Classes. TERM1="Specifications" TERM2="List" TERM3="Attribute"TERM1="List Specifications" TERM2="Attribute"Attribute List SpecificationsThe Attribute Specification for lists (i.e., the TYPE directive set to AttributeList) may contain only the directives in the above table. The default AttributeList Specification is Attributelist.txt. TERM1="Specifications" TERM2="List" TERM3="Component"TERM1="List Specifications" TERM2="Component"Component List SpecificationsThe Component Specification for lists (i.e., the TYPE directive set to ComponentList) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, refer to the section for its type. The default ComponentList Specification is Componentlist.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"RelationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired relatives of the Component to be included in the output. Valid values are CHILDREN, PARENTS, DESCENDENTS or ANCESTORS. TERM1="Specifications" TERM2="List" TERM3="Connector"TERM1="List Specifications" TERM2="Connector"Connector List SpecificationsThe Connector Specification for lists (i.e., the TYPE directive set to ConnectorList) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, refer to the section for its type. The default ConnectorList Specification is Connectorlist.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to include the Connector with the Direction specified in the directive's value. Valid values are IN, OUT, or BOTH. COLNAME="1" VALIGN="TOP" MOREROWS="0"VisibilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to include the Connector which has the Visibility specified in the directive's value. Valid values are INTERNAL, EXTERNAL, or BOTH. TERM1="Specifications" TERM2="List" TERM3="Diagram"TERM1="List Specifications" TERM2="Diagram"Diagram List SpecificationsThe Diagram Specification for lists (i.e., the TYPE Directive set to DiagramList) may contain only the directives in the first table. The default DiagramList Specification is digramlist.txt. TERM1="Specifications" TERM2="List" TERM3="Method"TERM1="List Specifications" TERM2="Method"Method List SpecificationsThe Method Specification for lists (i.e., the TYPE directive set to MethodList) may contain only the directives in the first table. The default MethodList Specification is methodlist.txt. TERM1="Specifications" TERM2="List" TERM3="Property"TERM1="List Specifications" TERM2="Property"Property List SpecificationsThe Property Specification for lists (i.e., the TYPE directive set to PropertyList) may contain only the directives in the first table. The default PropertyList Specification is propertylist.txt. TERM1="Specifications" TERM2="Table Specifications"TERM1="Table Specifications"ID="20799"Table SpecificationsMeta-Class SpecificationsThe default Meta-Class Specifications provided with DocExpress for Tables are identified in the following table. COLS="3"COLNAME="1" COLWIDTH="180p"COLNAME="2" COLWIDTH="180p"COLNAME="3" COLWIDTH="180p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Type Directive ValueCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default SpecificationCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"AttributeTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"attributetable.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"DiagramTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"diagramtable.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"ConnectorTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"connectortable.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"ComponentTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"componenttable.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"propertytable.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodTableCOLNAME="3" VALIGN="TOP" MOREROWS="0"methodtable.txtTable SpecificationsAll Table Specifications may contain the Directives identified and described in the following table. For more information on the Directive, refer to the section for its type. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the Object's name. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the names of the desired Objects in a file, one per line. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameListCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the names of the desired Objects in the value of the Directive separated by spaces. COLNAME="1" VALIGN="TOP" MOREROWS="0"StartCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs an Object if its name is lexically greater than the string specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"StopCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Outputs an Object if its name is lexically less than the string specified in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"TableDefCOLNAME="2" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the Table Definitions file in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Identifies the Specification's type. Must be Attribute. The following sections identify the directives that may be used in the Table Meta-Class Specifications for each of the ObjectTeam Meta-Classes. TERM1="Specifications" TERM2="Table" TERM3="Attribute"TERM1="Table Specifications" TERM2="Attribute"Attribute Table SpecificationsThe Attribute Specification for tables (i.e., the TYPE directive set to AttributeTable) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, see the section for its type. The default AttributeTable Specification is Attributetable.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Attribute. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the Directive's value. TERM1="Specifications" TERM2="Table" TERM3="Component"TERM1="Table Specifications" TERM2="Component"Component Table SpecificationsThe Component Specification for tables (i.e., the TYPE directive set to ComponentTable) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, see the section for its type. The default ComponentTable Specification is Componenttable.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AncestorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Ancestors. COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Attributes. COLNAME="1" VALIGN="TOP" MOREROWS="0"ChildrenCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Children. COLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component. The text may contain variables. COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Connectors. COLNAME="1" VALIGN="TOP" MOREROWS="0"DescendentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Descendents. COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Methods. COLNAME="1" VALIGN="TOP" MOREROWS="0"ParentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Component's Parents. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the Directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"RelationCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the desired relatives of the Component to be included in the output. Valid values are CHILDREN, PARENTS, DESCENDENTS or ANCESTORS. COLNAME="1" VALIGN="TOP" MOREROWS="0"RootCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output only those Components which have no Parents. TERM1="Specifications" TERM2="Table" TERM3="Connector"TERM1="Table Specifications" TERM2="Connector"Connector Table SpecificationsThe Connector Specification for tables (i.e., the TYPE directive set to ConnectorTable) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, see the section for its type. The default ConnectorTable Specification is Connectortable.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DestinationCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Connector's destination Component. COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to include the Connector with the Direction specified in the directive's value. Valid values are IN, OUT, or BOTH. COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Connector. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the Directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Connector's source Component. COLNAME="1" VALIGN="TOP" MOREROWS="0"VisibilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"ScopingCOLNAME="3" VALIGN="TOP" MOREROWS="0"Directive to include the Connector which has the Visibility specified in the directive's value. Valid values are INTERNAL, EXTERNAL, or BOTH. TERM1="Specifications" TERM2="Table" TERM3="Diagram"TERM1="Table Specifications" TERM2="Diagram"Diagram Table SpecificationsThe Diagram Specification for tables (i.e., the TYPE directive set to DiagramTable) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, see the section for its type. The default Diagram Specification is diagram.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentsCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Diagram's Components. COLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorsCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Diagram's Connectors. COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the Directive's value. TERM1="Specifications" TERM2="Table" TERM3="Method"TERM1="Table Specifications" TERM2="Method"Method Table SpecificationsThe Method Specification for tables (i.e., the TYPE directive set to MethodTable) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, see the section for its type. The default Method Specification is Method.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyNameCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output the value of the Property whose name is specified by the Directive's value. TERM1="Specifications" TERM2="Table" TERM3="Property"TERM1="Table Specifications" TERM2="Property"Property Table SpecificationsThe Property Specification for tables (i.e., the TYPE directive set to PropertyTable) may contain the directives identified and described in the following table in addition to those in the first table. For more information on the Directive, see the section for its type. For more information on the Directive, refer to the section for its type. The default PropertyTable Specification is Propertytable.txt. COLS="3"COLNAME="1" COLWIDTH="118p"COLNAME="2" COLWIDTH="118p"COLNAME="3" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DirectiveCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Property. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="3" VALIGN="TOP" MOREROWS="0"Output information for the Object (i.e., Attribute, Component, Connector, or Diagram) associated with the Property. TERM1="Super Type Specifications"ID="20709"Super Type SpecificationA Super Type is a set of Meta-Types of the same Meta-Class with similar characteristics. The Super Type Specifications are used when formatting of a Super Type is desired. They may also be used to develop standard formats for any of the Meta-Types of the Super Type. No Traversal Directives are permitted in a Super Type Specification. General, Scoping, Formatting, and Property Directives available in the Super Type Specification are completely dependent on the Meta-Class of the Meta-Types that make up the Super Type. These directives are identified and described in accordance with their Meta-Class as follows: n Attribute Directivesn Diagram Directives n Connector Directives n Component Directives n Property Directivesn Method DirectivesSuper Types and thus their specifications are unique to a method. For information on the Super Types and their specifications for a specific method see REFID="31178" TYPE="XREF-TEXTCOPY"Super Type Specifications.Each Super Type for a method has a default Super Type Specification provided with DocExpress located in the directory $ATAHOME/doc/case_tools/ot/specs/method/defaults name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' where method may be uml, or omt. TERM1="MetaType Specifications"ID="19581"Meta-Type SpecificationA Meta-Type Specification is used when any traversal from an Object of one Meta-Type to an Object of another Meta-Type is desired. These specifications may also be used for formatting the Object's information only, if desired. General, Scoping, Formatting, and Property Directives available in the Meta-Type Specification are completely dependent on the Meta-Class to which the Meta-Type belongs. These directives are identified and described in accordance with their Meta-Class as follows: n Attribute Directives n Diagram Directives n Connector Directives n Component Directives n Property Directives n Method Directives Traversal Directives are completely dependent on the Meta-Type, thus these directives are documented in the Meta-Type Specification section of parse_dcs in the Utilities Chapter. Each Meta-Type in a method has a default Meta-Type Specification provided with DocExpress which is located in the directory $ATAHOME/doc/case_tools/ot/specs/method/defaults name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' where method may be uml, or omt. TERM1="MetaType Scoping"ID="17283"Meta-Type ScopingThe information extracted by the utility can begin with a specific Object, when both the -oname, and -otype parameters are specified. With these settings, the output of the utility is said to be "scoped by the Object" because all other Objects traversed are then related to this starting Object. When only the -otype parameter is specified, the output of the utility is said to be "scoped by the Meta-Type" because all other Objects traversed are then related to these starting Objects of the specified Meta-Type. TERM1="Table Definitions" TERM2="parse_dcs"TERM1="parse_dcs" TERM2="table definitions"ID="31504"Table DefinitionsThe Table Specifications are used to specify the desired contents of a table generated by parse_dcs. A table definition specifies the format of the table including the table's Title and its column's widths. A Table Definition is a file which consists of records, one per line. Each record consists of four fields: a Keyword, its value, a reserved column, and the Keyword's description. Only the first two fields are mandatory. Each field is separated by a equals sign (=). The value of a Keyword may take the following forms:n Enumeration name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must contain specific valuesn Numeric name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must be a numbern String name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Alphanumeric charactersn Text name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' may contain alphanumeric characters and include variables. Table Definition KeywordsThe Table Definition Keywords and their descriptions are shown in the following table below. COLS="3"COLNAME="1" COLWIDTH="112p"COLNAME="2" COLWIDTH="103p"COLNAME="3" COLWIDTH="376p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ColumnTitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the title for a column. Each instance of this Keyword specifies another column title. COLNAME="1" VALIGN="TOP" MOREROWS="0"ColumnWidthCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the width of a column. Each instance of this Keyword defines another column width. COLNAME="1" VALIGN="TOP" MOREROWS="0"FormCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the table's form. Valid values are Single or Multiple. Single is a single column table with row titles. Multiple is a multiple column table with no row titles. COLNAME="1" VALIGN="TOP" MOREROWS="0"RowTitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the title for a row. Each instance of this Keyword specifies another row title. Only valid when the Form Keyword is specified as Single. COLNAME="1" VALIGN="TOP" MOREROWS="0"TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the table's title. COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the type of specification. Must be set to TableDefinition. COLNAME="1" VALIGN="TOP" MOREROWS="0"WidthCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the table's overall width. Defaults to the sum of the column widths. The following example shows a Table Definition which specifies a table with three columns with the titles Name, Type, and Description and widths of 1, 1.5, and 4 inches respectively. The table's title is specified as "Connector Information for $SYSTEM on $DATE at $TIME" where $SYSTEM, $DATE, and $TIME are variables that will be resolved for the system's name, and the current date and time respectively. TYPE=TableDefinitionFORM=Multiple# Generate a Table titleTITLE=Connector Information for $SYSTEM on $DATE at $TIME# Specify titles and sizes for three columns that correspond to the default# Table Specification for Connectors# $ATAHOME/doc/case_tools/ot/specs/defaults/connectortableM.txtColumnTitle=NameColumnWidth=1ColumnTitle=TypeColumnWidth=1.5ColumnTitle=DescriptionColumnWidth=4Chapter 4 General ID="12101"Utility InformationTYPE="MIFmarker"TYPE="number"0TYPE="text"DocExpress Utilities GuideIntroductionThis chapter contains the following general information about the DocExpress utilities for ObjectTeam: In this chapterThis chapter contains the following sectionsCOLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section PageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="18709" TYPE="XREF-TEXTCOPY"Command Line Options: Short Forms 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'2COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="25373" TYPE="XREF-TEXTCOPY"Parameters File 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19243" TYPE="XREF-TEXTCOPY"Diagram Types 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'4COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="29609" TYPE="XREF-TEXTCOPY"Data Element Types 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'5COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37325" TYPE="XREF-TEXTCOPY"Interface Types 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'8COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="11426" TYPE="XREF-TEXTCOPY"Object Types 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'10COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36864" TYPE="XREF-TEXTCOPY"Table Definitions File 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'13COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="40517" TYPE="XREF-TEXTCOPY"Tags File 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'14COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="21304" TYPE="XREF-TEXTCOPY"Header Files 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="30245" TYPE="XREF-TEXTCOPY"Defaults 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'18COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="16597" TYPE="XREF-TEXTCOPY"Sections 4name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'19ID="18709"Command Line Options: Short FormsIntroductionThe following table shows the short form for standard command line options to the DocExpress utilities for ObjectTeam. COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"OptionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Short FormCOLNAME="1" VALIGN="TOP" MOREROWS="0"headerCOLNAME="2" VALIGN="TOP" MOREROWS="0"hCOLNAME="1" VALIGN="TOP" MOREROWS="0"outputCOLNAME="2" VALIGN="TOP" MOREROWS="0"oCOLNAME="1" VALIGN="TOP" MOREROWS="0"projectCOLNAME="2" VALIGN="TOP" MOREROWS="0"projCOLNAME="1" VALIGN="TOP" MOREROWS="0"verboseCOLNAME="2" VALIGN="TOP" MOREROWS="0"vTERM1="dd_tbl" TERM2="parameters file"TERM1="Utilities" TERM2="dd_tbl" TERM3="parameters file"ID="25373"Parameters FileIntroductionThe parameters file reduces the number of parameters that must be specified on the command line of the utility. They are useful to establish common values for parameters (e.g., -project, -config, -phase, or -system) for many utilities that may invoked for the generation of documents for a particular project. Command line optionsThe parameters file may contain all or some of the command line options for the utility. Each line of the parameters file must have only one option and its value separated by a space. If a parameter is specified in the parameters file as well as on the command line, the command line argument will be used. ExampleAn example of a parameters file is shown below:-project Ot4omtExample-config Ot4omtExample.1-phase Analysis.1-system CoreSystem.1ID="19243"Diagram TypesDiagram typesThe following table identifies and describes the valid diagram types that may be specified for the -dtype option by the DocExpress utilities. COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class Association DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"CODCOLNAME="2" VALIGN="TOP" MOREROWS="0"Collaboration DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class Communication DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data Flow DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sequence DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Message Generalization DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"State Transition DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use Case DiagramTERM1="Utilities" TERM2="dd_tbl" TERM3="data element types"TERM1="dd_tbl" TERM2="data element types"ID="29609"Data Element TypesIntroductionThe following tables identify and describe the valid data element types that may be specified for the -type option. The first table covers some general data element types. The remaining tables cover data element types specific to each diagram type identified in the Diagram Types table above.General Data Element TypesThe following table covers some general data element types. COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CCDs and DFDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on CDs, CCDs, and STDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Events on SDs and STDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ExternalCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CCDs and DFDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Control Flows, Data Flows, Result Flows, and Update FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication Messages, Control Flows, Data Flows, Event Messages, Result Flows, and Update FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"MessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication Messages and Event MessagesCD Data Element TypesThe following table identifies and describes the data element types for the Class Diagram (CD). COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on CDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDContainerCOLNAME="2" VALIGN="TOP" MOREROWS="0"Containers on CDsCCD Data Element TypesThe following table identifies and describes the data element types for the Class Communication Diagram (CCD). COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on CCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication MessagesCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDContainerCOLNAME="2" VALIGN="TOP" MOREROWS="0"Containers on CCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"Class ReferenceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class ReferencesCOLNAME="1" VALIGN="TOP" MOREROWS="0"SubjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"SubjectsCOD Data Element TypesThe following table identifies and describes the data element types for the Collaboration Diagram (COD).COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CCDs, CODs, DFDs, and UCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COD ActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CODsCOLNAME="1" VALIGN="TOP" MOREROWS="0"COD MessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"MEssages on CODsDFD Data Element TypesThe following table identifies and describes the data element types for the Data Flow Diagram (DFD). COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Control FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataProcessCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data ProcessesCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataStoreCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data StoresCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on DFDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Result FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Update FlowsMGD Data Element TypesThe following table identifies and describes the data element types for the Message Generalization Diagram (MGD). COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"MessageDefCOLNAME="2" VALIGN="TOP" MOREROWS="0"Message DefinitionsSD Data Element TypesThe following table identifies and describes the data element types for the Sequence Diagram (SD). COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SD EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Events on SDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"ObjectsCOLNAME="1" VALIGN="TOP" MOREROWS="0"InitiatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"InitiatorsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TransitionCOLNAME="2" VALIGN="TOP" MOREROWS="0"TransitionsSTD Data Element TypesThe following table identifies and describes the data element types for the State Transition Diagram (STD). COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActivityCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActivitiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event MessagesCOLNAME="1" VALIGN="TOP" MOREROWS="0"StateCOLNAME="2" VALIGN="TOP" MOREROWS="0"StatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"StateRegionCOLNAME="2" VALIGN="TOP" MOREROWS="0"State RegionCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on STDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDEventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Events on STDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SuperStateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Super StatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TransitionCOLNAME="2" VALIGN="TOP" MOREROWS="0"TransitionsUCD Data Element TypesThe following table identifies and describes the data element types for the Use Case Diagram (UCD)COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectedCommAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directed Communication AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on UCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"UndirectedCommAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Undirected Communication AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"UseCaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use CasesTERM1="Interface Types"TERM1="Utilities" TERM2="interface types"ID="37325"Interface TypesGeneral Interface TypesThe following tables identifies and describes the valid interface types that may be specified for the -type option. The following table covers some general interface types. COLS="2"COLNAME="1" COLWIDTH="115p"COLNAME="2" COLWIDTH="333p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Interface TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Control Flows, Data Flows, Result Flows, and Update FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication Messages, Control Flows, Data Flows, Event Messages, Result Flows, and Update FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"MessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication Messages and Event MessagesCD Interface TypesThe following table identifies and describes the interface types for the Class Diagram (CD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Interface TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"CCD Interface TypesThe following table identifies and describes the interface types for the Class Communication Diagram (CCD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Interface TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication MessagesCOD Object TypesThe following table identifies and describes the interface types for the Collaboration Diagram (COD). COLS="2"COLNAME="1" COLWIDTH="100p"COLNAME="2" COLWIDTH="348p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CODMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Messages on CODsDFD Interface TypesThe following table identifies and describes the interface types for the Data Flow Diagram (DFD). COLS="2"COLNAME="1" COLWIDTH="112p"COLNAME="2" COLWIDTH="336p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Interface TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Control FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Result FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Update FlowsMGD Interface TypesThe following table identifies and describes the interface types for the Message Generalization Diagram (MGD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Interface TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"SD Interface TypesThe following table identifies and describes the interface types for the Sequence Diagram (SD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Interface TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"NoneCOLNAME="2" VALIGN="TOP" MOREROWS="0"STD Interface TypesThe following table identifies and describes the interface types for the State Transition Diagram (STD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Interface TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event MessagesUCD Interface TypesThe following table identifies and describes the interface types for the Use Case Diagram (STD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectedCommAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directed Communication AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"UndirectedCommAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Undirected Communication AssociationTERM1="Utilities" TERM2="object types"TERM1="Object Types"ID="11426"Object TypesGeneral Object TypesThe following tables identify and describe the valid Object types that may be specified for the -otype option. covers some general Object types. COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CCDs and DFDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on CDs, CCDs, and STDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Events on SDs and STDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ExternalCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CCDs and DFDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Control Flows, Data Flows, Result Flows, and Update FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterfaceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication Messages, Control Flows, Data Flows, Event Messages, Result Flows, and Update FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"MessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication Messages and Event MessagesCAD Object TypesThe following table identifies and describes the Object types for the Class Diagram (CD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CADClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on CADsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CADContainerCOLNAME="2" VALIGN="TOP" MOREROWS="0"Containers on CADsCCD Object TypesThe following table identifies and describes the Object types for the Class Communication Diagram (CCD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on CCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication MessagesCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassReferenceCOLNAME="2" VALIGN="TOP" MOREROWS="0"ClassReferencesCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDContainerCOLNAME="2" VALIGN="TOP" MOREROWS="0"Containers on CCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SubjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"SubjectsCOD Object TypesThe following table identifies and describes the Object types for the Collaboration Diagram (COD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AggLinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"Aggregation LinksCOLNAME="1" VALIGN="TOP" MOREROWS="0"CODActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CODsCOLNAME="1" VALIGN="TOP" MOREROWS="0"CODMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Messages on CODsCOLNAME="1" VALIGN="TOP" MOREROWS="0"InstanceCOLNAME="2" VALIGN="TOP" MOREROWS="0"InstancesCOLNAME="1" VALIGN="TOP" MOREROWS="0"LinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"LinksCOLNAME="1" VALIGN="TOP" MOREROWS="0"LinkNodeCOLNAME="2" VALIGN="TOP" MOREROWS="0"N-ary Link NodeDFD Object TypesThe following table identifies and describes the Object types for the Data Flow Diagram (DFD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Control FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataProcessCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data ProcessesCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataStoreCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data StoresCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on DFDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Result FlowsCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Update FlowsMGD Object TypesThe following table identifies and describes the Object types for the Message Generalization Diagram (MGD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"MessageDefCOLNAME="2" VALIGN="TOP" MOREROWS="0"Message DefinitionsSD Object TypesThe following table identifies and describes the Object types for the Sequence Diagram (SD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDEventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Events on SDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Objects on SDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"InitiatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Initiators on SDsSTD Object TypesThe following table identifies and describes the Object types for the State Transition Diagram (STD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActivityCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActivitiesCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Event MessagesCOLNAME="1" VALIGN="TOP" MOREROWS="0"StateCOLNAME="2" VALIGN="TOP" MOREROWS="0"StatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"StateActionCOLNAME="2" VALIGN="TOP" MOREROWS="0"ActionCOLNAME="1" VALIGN="TOP" MOREROWS="0"StateRegionCOLNAME="2" VALIGN="TOP" MOREROWS="0"State RegionsCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on STDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDEventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Events on STDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SuperStateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Super StatesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TransitionCOLNAME="2" VALIGN="TOP" MOREROWS="0"TransitionsUCD Data Element TypesThe following table identifies and describes the data element types for the Use Case Diagram (UCD). COLS="2"COLNAME="1" COLWIDTH="127p"COLNAME="2" COLWIDTH="321p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Data Element TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectedCommAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directed Communication AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on UCDsCOLNAME="1" VALIGN="TOP" MOREROWS="0"UndirectedCommAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Undirected Communication AssociationCOLNAME="1" VALIGN="TOP" MOREROWS="0"UseCaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use CasesTERM1="dd_tbl" TERM2="table definitions file"TERM1="Utilities" TERM2="dd_tbl" TERM3="table definitions file"ID="36864"Table Definitions FileIntroductionThe table definitions file defines aspects of the table such as its Title or column sizes. All entries in the file are optional and have defaults. For example, if the file does not contain the keyword Title, the name and type of the interface are used for the table's title. The default values for row titles are taken from the entries in the format file (see REFID="38562" TYPE="XREF-TEXTCOPY"Format Files). The keywords, their descriptions and the keywords default values are shown in the following table. COLS="3"COLNAME="1" COLWIDTH="94p"COLNAME="2" COLWIDTH="138p"COLNAME="3" COLWIDTH="214p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"Default ValueCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"$NAME ($TYPE)COLNAME="3" VALIGN="TOP" MOREROWS="0"The table's title. COLNAME="1" VALIGN="TOP" MOREROWS="0"ColumnTitle1COLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute NameCOLNAME="3" VALIGN="TOP" MOREROWS="0"The title for column x where x is 1 .. N. COLNAME="1" VALIGN="TOP" MOREROWS="0"ColumnTitle2COLNAME="2" VALIGN="TOP" MOREROWS="0"Attribute ValueCOLNAME="3" VALIGN="TOP" MOREROWS="0"The title for column x where x is 1 .. N. COLNAME="1" VALIGN="TOP" MOREROWS="0"RowTitlexCOLNAME="2" VALIGN="TOP" MOREROWS="0"Entry x in format fileCOLNAME="3" VALIGN="TOP" MOREROWS="0"The title for row x where x is 1 .. N. TERM1="Utilities" TERM2="dd_tbl" TERM3="tags file"TERM1="dd_tbl" TERM2="tags file"ID="40517"Tags FileIntroductionThe tags file permits the user to specify the FrameMaker paragraph tags, Interleaf component tags, MS-Word paragraph tags or RTF component tags to be used in the output file generated by the utility. The paragraph/component tags specified in the tags file should match those used in the document's catalog or the document publishing system's header file (see the HEADER FILES section on page 18). Default Tag filesThe default tag files are:COLS="2"COLNAME="1" COLWIDTH="106p"COLNAME="2" COLWIDTH="337p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DTP PackageCOLNAME="2" VALIGN="TOP" MOREROWS="0"LocationCOLNAME="1" VALIGN="TOP" MOREROWS="0"FrameMaker COLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/frame/tag_file.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="2" VALIGN="TOP" MOREROWS="0" ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"MSWord COLNAME="2" VALIGN="TOP" MOREROWS="0"ATAHOME%\doc\ctools\ot\msword\tag_file.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"RTF COLNAME="2" VALIGN="TOP" MOREROWS="0"ATAHOME%\doc\ctools\ot\rtf\tag_file.txtFormatThe tags file consists of records, one per line. Each record consists of four fields: a keyword, its value, an unused column, and the keyword's description. Each field is separated by a colon (:) on UNIX or equals sign on Windows. ExamplesThe following figure shows the default FrameMaker tags file which identifies and describes the keywords for FrameMaker, specifies their default values, and describes their function. SectionLevel1:section.level_1: :First level section titleSectionLevel2:section.level_2: :Second level section titleSectionLevel3:section.level_3: :Third level section titleSectionLevel4:section.level_4: :Fourth level section titleSectionLevel5:section.level_5: :Fifth level section titleSectionLevel6:section.level_6: :Sixth level section titleSectionLevel7:section.level_7: :Seventh level section titleSectionLevel8:section.level_8: :Eight level section titleSectionLevel9:section.level_9: :Ninth level section titleSectionLevel10:section.level_10: :Tenth level section titleListStart:list_start: :First element in a listListElement:list_el: :Elements in a listText:paragraph: :tag for textTableTitle:table: :tag for table titlesFigureTitle:figure: :figure titleThe following figure shows the default RTF tags file which identifies and describes the keywords for RTF, specifies their default values, and describes their function. SectionLevel1=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =First level section titleSectionLevel2=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Second level section titleSectionLevel3=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Third level section titleSectionLevel4=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Fourth level section titleSectionLevel5=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Fifth level section titleSectionLevel6=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Sixth level section titleSectionLevel7=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Seventh level section titleSectionLevel8=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Eighth level section titleSectionLevel9=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Ninth level section titleSectionLevel10=%ATAHOME%\dec\ctools\ot\rtf\section.rtf= =Tenth level section titleListStart=%ATAHOME%\dec\ctools\ot\rtf\list.rtf= =First element in a listListElement=%ATAHOME%\dec\ctools\ot\rtf\list.rtf= =Elements in a listText=%ATAHOME%\dec\ctools\ot\rtf\text.rtf= =tag for textFigureTitle=%ATAHOME%\dec\ctools\ot\rtf\figtitle.rtf= =figure titleHTML Tags FileThe following figure shows the default HTML Tags File which identifies and describes the keywords for HTML, specifies their default values, and describes their function. The default HTML Tag File is $ATAHOME/doc/case_tools/ot/html/tag_file.txt. SectionLevel1:H1: :First level section titleSectionLevel2:H2: :Second level section titleSectionLevel3:H3: :Third level section titleSectionLevel4:H4: :Fourth level section titleSectionLevel5:H5: :Fifth level section titleSectionLevel6:H6: :Sixth level section titleListStart:ol: :First element in a listListElement:ol: :Elements in a listStandardListStart:ol: :First element in a listStandardListElement:ol: :Elements in a listBulletListStart:ul: :First element in a listBulletListElement:ul: :Elements in a listText:p: :tag for textTableTitle: <caption><b>ColTitleRow: <tr>Row: <tr>CellDef1: CellDef2: CellDef3: ColTitleCell1: <th> ColTitleCell2: <th> ColTitleCell3: <th> RowCell1: <td>RowCell2: <td> RowCell3: <td> RowEnd: <br>TERM1="Utilities" TERM2="dd_tbl" TERM3="header files"TERM1="dd_tbl" TERM2="header files"ID="21304"Header FilesIntroductionThe utility automatically includes default FrameMaker paragraph, Interleaf component, MS-Word paragraph or RTF component definitions into the output file. These definitions define the "look" of the table in the DTP package. The definitions are contained in the respective DTP package header files. Paragraph Tags/Components defined in the header fileThe following table identifies and describes the paragraph tags or components defined in the default header file for each DTP package. For proper formatting, the paragraphs/components specified in the tags file should correspond to the paragraphs/components defined in the document's catalog or the header file.COLS="2"COLNAME="1" COLWIDTH="225p"COLNAME="2" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Component NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"figureCOLNAME="2" VALIGN="TOP" MOREROWS="0"figure captionCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_elCOLNAME="2" VALIGN="TOP" MOREROWS="0"list elementCOLNAME="1" VALIGN="TOP" MOREROWS="0"list_startCOLNAME="2" VALIGN="TOP" MOREROWS="0"first element in the listCOLNAME="1" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"para_monoCOLNAME="2" VALIGN="TOP" MOREROWS="0"mono spaced paragraphCOLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_1COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 1COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_2COLNAME="2" VALIGN="TOP" MOREROWS="0"section title for level 2COLNAME="1" VALIGN="TOP" MOREROWS="0"section.level_3 .... up to 10COLNAME="2" VALIGN="TOP" MOREROWS="0"section titles for levels 3 up to 10The default header file is located in the following directories:COLS="2"COLNAME="1" COLWIDTH="133p"COLNAME="2" COLWIDTH="315p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DTP packageCOLNAME="2" VALIGN="TOP" MOREROWS="0"LocationCOLNAME="1" VALIGN="TOP" MOREROWS="0"FrameMakerCOLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/frame COLNAME="1" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/ileaf COLNAME="1" VALIGN="TOP" MOREROWS="0"HTMLCOLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/htmlCOLNAME="1" VALIGN="TOP" MOREROWS="0"MS-WordCOLNAME="2" VALIGN="TOP" MOREROWS="0"%ATAHOME%\doc\ctools\ot\msword COLNAME="1" VALIGN="TOP" MOREROWS="0"RTFCOLNAME="2" VALIGN="TOP" MOREROWS="0"%ATAHOME%\doc\ctools\ot\rtf TERM1="Diagram Defaults" TERM2="parse_dcs"TERM1="parse_dcs" TERM2="diagram defaults"ID="30245"DefaultsIntroductionA Defaults file permits the user to specify settings for use by the utility. KeywordThe Defaults file contains records, one per line. Each record consists of two fields: a Keyword, and its value. The fields are separated by an equals sign (=). The value of a Keyword may take the following forms:n Boolean name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must be either "True" or "False"n Enumeration name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must contain specific valuesn Filename name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' is the full-path name to a file. Variables may be included in the value to reference the file.n List name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Strings separated by spacesn Numeric name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' must be a numbern String name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Alphanumeric charactersn Text name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' may contain alphanumeric characters and include variables. ID="16597"SectionsIntroductionThe records are separated into sections using the Section Keyword. The name of the section is the value of the Section Keyword. Keywords must never be deleted from a Section and Keywords added to a section will be ignored. Section TypesThe Sections may be grouped by types. The following table identifies and describes the Section Types in the Defaults File and their Access. COLS="2"COLNAME="1" COLWIDTH="112p"COLNAME="2" COLWIDTH="336p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DPSCOLNAME="2" VALIGN="TOP" MOREROWS="0"Defaults for a Document Publishing SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"DPS-ObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Defaults for Document Publishing System Objects (i.e., Cell, CellList, Diagram, Section, Table, Text)COLNAME="1" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Defaults for an ObjectTeam Meta-Class (i.e., Attribute, Component, Connector, Diagram, Method, and Property)COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"Defaults for a software development method supported by ObjectTeam (i.e., OMT, and UML)COLNAME="1" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="2" VALIGN="TOP" MOREROWS="0"Other defaultsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SpecificationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Defaults for the SpecificationsSections in the Defaults FileThe following table identifies and describes the existing Sections and their type. COLS="3"COLNAME="1" COLWIDTH="88p"COLNAME="2" COLWIDTH="87p"COLNAME="3" COLWIDTH="283p"COLNAME="1" VALIGN="TOP" MOREROWS="0"SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Attribute Meta-ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"CellCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPS-ObjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Table Cells in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"CellListCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPS-ObjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for lists within Table Cells in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Component Meta-ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConnectorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Connector Meta-ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"DebugCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for debugging purposesCOLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Diagram Meta-ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"FieldCOLNAME="2" VALIGN="TOP" MOREROWS="0"SpecificationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Fields in SpecificationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"ListCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPS-ObjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for lists in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"frameCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPSCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the FrameMaker Document Publishing SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"htmlCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPSCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Systems which use the Hyper-Text Markup Language (HTML)COLNAME="1" VALIGN="TOP" MOREROWS="0"ileafCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPSCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Interleaf Document Publishing SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Method Meta-ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"mswordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPSCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the MicroSoft Word Document Publishing SystemCOLNAME="1" VALIGN="TOP" MOREROWS="0"OMTCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Object Modeling Technique (OMT)COLNAME="1" VALIGN="TOP" MOREROWS="0"ObjectTeamCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for ObjectTeamCOLNAME="1" VALIGN="TOP" MOREROWS="0"ProductCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the document generation productCOLNAME="1" VALIGN="TOP" MOREROWS="0"PropertyCOLNAME="2" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Property Meta-ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"rtfCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPSCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Document Publishing Systems which use the Rich Text Format (RTF)COLNAME="1" VALIGN="TOP" MOREROWS="0"SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPS-ObjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Section titles in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"SpecificationCOLNAME="2" VALIGN="TOP" MOREROWS="0"SpecificationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for SpecificationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SpecVariableCOLNAME="2" VALIGN="TOP" MOREROWS="0"SpecificationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Variables in SpecificationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SubfieldCOLNAME="2" VALIGN="TOP" MOREROWS="0"SpecificationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Subfields in SpecificationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"SubrecordCOLNAME="2" VALIGN="TOP" MOREROWS="0"SpecificationCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Subrecords in SpecificationsCOLNAME="1" VALIGN="TOP" MOREROWS="0"TableCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPS-ObjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Tables in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"TemporaryCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Default temporary directoryCOLNAME="1" VALIGN="TOP" MOREROWS="0"TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"DPS-ObjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for Text in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"UMLCOLNAME="2" VALIGN="TOP" MOREROWS="0"MethodCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for the Unified Modeling Language (UML)COLNAME="1" VALIGN="TOP" MOREROWS="0"VariableFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"MiscCOLNAME="3" VALIGN="TOP" MOREROWS="0"Defaults for DocExpress Variable FilesAdditional sections of type DPS and Method may be added to the defaults file to support other Document Publishing Systems and Software Development Methods. Section Type KeywordsThe Keywords for the DPS and Method section types are identified and described in the following two tables. DPS Section Type KeywordsThe following table identifies and describes the Keywords for the DPS Section Type. A Section of the DPS Section Type exists in the Defaults File for each Document Publishing System supported by DocExpress (i.e., FrameMaker (frame), Hyper-Text Markup Language (html), Interleaf (ileaf), MicroSoft Word (msword), and Rich Text Format(rtf)). COLS="4"COLNAME="1" COLWIDTH="124p"COLNAME="2" COLWIDTH="99p"COLNAME="3" COLWIDTH="75p"COLNAME="4" COLWIDTH="328p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CheckFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Full-path for the routine which checks the validity of files for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"CloseFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Full-path for the routine which terminates the output file for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramCountCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Indication that unique diagram identifiers are required or not. COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramFormatCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Parameter value to the diagram extraction routine (ExtractDiagram) which specifies the output format for the diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramSuffixCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"File suffix to be used for the file which contains the extracted diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"ExtractDiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path name for the diagram extraction routine. COLNAME="1" VALIGN="TOP" MOREROWS="0"FileSuffixCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"File suffix to be used for all temporary files generated. COLNAME="1" VALIGN="TOP" MOREROWS="0"FormatDiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path name for the diagram formatting routine for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"FormatListCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path name for the list formatting routine for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"FormatSectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path name for the section formatting routine for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"FormatTablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path name for the table formatting routine for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"FormatTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path name for the text formatting routine for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"HeaderCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path of the file containing the tag definitions for the Document Publishing system. COLNAME="1" VALIGN="TOP" MOREROWS="0"IncludeFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path name for the routine to include files in the output for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"InitFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path name for the output file initialization routine for the Document Publishing System. COLNAME="1" VALIGN="TOP" MOREROWS="0"TableCountCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Indication that unique table identifiers are required or not. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagFileCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path for the file which contains the actual tag names (or definitions) for the Symbolic Tags. Method Section Type KeywordsThe following table identifies and describes the Keywords for the Method Section Type. A Section of the Method Section Type exists in the Defaults File for each Software Development Method supported by ObjectTeam (i.e., Object Modeling Technique (OMT) and Unified Modeling Language (UML)). COLS="4"COLNAME="1" COLWIDTH="94p"COLNAME="2" COLWIDTH="67p"COLNAME="3" COLWIDTH="55p"COLNAME="4" COLWIDTH="229p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodRulesCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Full-path for the file that contains the rules for the Software Development Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"Method2UserCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Full-path for the file that contains the mapping of Meta-Types to user types for the Software Development Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"SpecDefaultsCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Full-path for the directory which contains the default Specifications for all the Meta-types in the Software Development Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"SpecRulesCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Full-path for the file that contains the rules for the Specifications of the Software Development Method. COLNAME="1" VALIGN="TOP" MOREROWS="0"User2MethodCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Full-path for the file that contains the mapping of user types to Meta-Types for the Software Development Method. Section KeywordsThe following tables identify and describe the Keywords for each of the sections in the Defaults File. Keywords must never be deleted from a Section and Keywords added to a section will be ignored. Attribute Section KeywordsThe following table identifies and describes the Keywords for the Attribute Section. A Section of the Meta-Class Section Type exists in the Defaults File for each Meta-Class available in ObjectTeam (i.e., Attribute, Connector, Component, Diagram, Method, and Property). A Section of this type specifies the formatting defaults for Objects of the Meta-Class in the output. A section of the Meta-Class Section Type may only be added to the Defaults File by the Vendor. COLS="4"COLNAME="1" COLWIDTH="102p"COLNAME="2" COLWIDTH="64p"COLNAME="3" COLWIDTH="52p"COLNAME="4" COLWIDTH="228p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DuplicatesCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies wether duplicates (i.e., redundant Objects) are permitted in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"RecursiveTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause recursive output. COLNAME="1" VALIGN="TOP" MOREROWS="0"RedundantTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause redundant output. Cell Section KeywordsThe following table identifies and describes the Keywords for the Cell Section. This section specifies the defaults for a cell in a table. COLS="4"COLNAME="1" COLWIDTH="87p"COLNAME="2" COLWIDTH="88p"COLNAME="3" COLWIDTH="54p"COLNAME="4" COLWIDTH="217p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ReplacementCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Replacement string for the Separator character(s) found in the Cells text. COLNAME="1" VALIGN="TOP" MOREROWS="0"SeparatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Character(s) used to separate cells in the input files to the table formatting routine. COLNAME="1" VALIGN="TOP" MOREROWS="0"WidthCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Default Cell widthCellList Section KeywordsThe following table identifies and describes the Keywords for the CellList Section. This section specifies the defaults for a list within a cell in a table. COLS="4"COLNAME="1" COLWIDTH="69p"COLNAME="2" COLWIDTH="88p"COLNAME="3" COLWIDTH="52p"COLNAME="4" COLWIDTH="238p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SeparatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Characters to be used to separate items in a list within a Cell for output. Component Section KeywordsThe following table identifies and describes the Keywords for the Component Section. This section specifies the formatting defaults for Objects of the Component Meta-Class in the output. COLS="4"COLNAME="1" COLWIDTH="103p"COLNAME="2" COLWIDTH="64p"COLNAME="3" COLWIDTH="52p"COLNAME="4" COLWIDTH="226p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DuplicatesCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies wether duplicates (i.e., redundant Objects) are permitted in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"RecursiveTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause recursive output. COLNAME="1" VALIGN="TOP" MOREROWS="0"RedundantTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause redundant output. Connector Section KeywordsThe following table identifies and describes the Keywords for the Connector Section. This section specifies the formatting defaults for Objects of the Connector Meta-Class in the output. COLS="4"COLNAME="1" COLWIDTH="112p"COLNAME="2" COLWIDTH="70p"COLNAME="3" COLWIDTH="57p"COLNAME="4" COLWIDTH="205p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DuplicatesCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies wether duplicates (i.e., redundant Objects) are permitted in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"RecursiveTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause recursive output. COLNAME="1" VALIGN="TOP" MOREROWS="0"RedundantTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause redundant output. Debug Section KeywordsThe following table identifies and describes the Keywords for the Debug Section. COLS="4"COLNAME="1" COLWIDTH="88p"COLNAME="2" COLWIDTH="61p"COLNAME="3" COLWIDTH="58p"COLNAME="4" COLWIDTH="240p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"FormattingCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Activate/Deactivate debugging facilities in the formatting routines. COLNAME="1" VALIGN="TOP" MOREROWS="0"PropNamesCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Activate/Deactivate debugging facilities for Property Names. COLNAME="1" VALIGN="TOP" MOREROWS="0"RoutinesCOLNAME="2" VALIGN="TOP" MOREROWS="0"ListCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"List of routines in to activate debugging facilities within. Diagram Section KeywordsThe following table identifies and describes the Keywords for the Diagram Section. COLS="4"COLNAME="1" COLWIDTH="109p"COLNAME="2" COLWIDTH="94p"COLNAME="3" COLWIDTH="57p"COLNAME="4" COLWIDTH="186p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CountCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Default starting number for unique identification of diagrams in the output. COLNAME="1" VALIGN="TOP" MOREROWS="0"DuplicatesCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies wether duplicates (i.e., redundant Diagrams) are permitted in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"The maximum width for the diagram in the output. COLNAME="1" VALIGN="TOP" MOREROWS="0"OrientCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"The default orientation of the diagram in the output. COLNAME="1" VALIGN="TOP" MOREROWS="0"RecursiveTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when a Diagram is encountered that will cause recursive output. COLNAME="1" VALIGN="TOP" MOREROWS="0"RedundantTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Diagram is encountered that will cause redundant output. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"Symbolic Tag to be used for formatting the diagram's title. Must correspond to a value(s) in the tag file. COLNAME="1" VALIGN="TOP" MOREROWS="0"TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"The default text for the diagram's title. May contain variables. COLNAME="1" VALIGN="TOP" MOREROWS="0"WidthCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"The maximum width for the diagram in the output. Field Section Section KeywordsThe following table identifies and describes the Keywords for the Field Section. COLS="4"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="90p"COLNAME="3" COLWIDTH="54p"COLNAME="4" COLWIDTH="232p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SeparatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The character(s) used to separate fields in a Specification. List Section KeywordsThe following table identifies and describes the Keywords for the List Section. COLS="4"COLNAME="1" COLWIDTH="81p"COLNAME="2" COLWIDTH="54p"COLNAME="3" COLWIDTH="61p"COLNAME="4" COLWIDTH="249p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"EmptyCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"The text to be output when a list of Objects is empty. The text may contain variables. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"The Symbolic Tag to be used in outputting the elements of the list. The tag must correspond to a value(s) in the tag file. ObjectTeam Section KeywordsThe following table identifies and describes the Keywords for the CASE Tool Section. COLS="4"COLNAME="1" COLWIDTH="102p"COLNAME="2" COLWIDTH="66p"COLNAME="3" COLWIDTH="54p"COLNAME="4" COLWIDTH="225p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"BrowserCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The necessary command for initiating the CASE Tool's browser. COLNAME="1" VALIGN="TOP" MOREROWS="0"DiagramEditorCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The necessary command for initiating the CASE Tool's diagram editor. COLNAME="1" VALIGN="TOP" MOREROWS="0"OpenDiagramCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The necessary command to open a diagram in the CASE Tool. Product Section KeywordsThe following table identifies and describes the Keywords for the Product Section. COLS="4"COLNAME="1" COLWIDTH="100p"COLNAME="2" COLWIDTH="69p"COLNAME="3" COLWIDTH="57p"COLNAME="4" COLWIDTH="220p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ConfigurationCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The full path for the Product's configuration file. COLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The Product's name. COLNAME="1" VALIGN="TOP" MOREROWS="0"VariablesCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"Indication of wether or not the Product uses variables and if these variables definitions are to be used for the resolution of variables in Specifications. Method Section KeywordsThe following table identifies and describes the Keywords for the Method Section. This section specifies the formatting defaults for Objects of the Method Meta-Class in the output. COLS="4"COLNAME="1" COLWIDTH="102p"COLNAME="2" COLWIDTH="64p"COLNAME="3" COLWIDTH="52p"COLNAME="4" COLWIDTH="228p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DuplicatesCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies wether duplicates (i.e., redundant Objects) are permitted in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"RecursiveTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause recursive output. COLNAME="1" VALIGN="TOP" MOREROWS="0"RedundantTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause redundant output. Property Section KeywordsThe following table identifies and describes the Keywords for the Property Section. This section specifies the formatting defaults for Objects of the Property Meta-Class in the output. COLS="4"COLNAME="1" COLWIDTH="108p"COLNAME="2" COLWIDTH="67p"COLNAME="3" COLWIDTH="55p"COLNAME="4" COLWIDTH="217p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DuplicatesCOLNAME="2" VALIGN="TOP" MOREROWS="0"BooleanCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies wether duplicates (i.e., redundant Objects) are permitted in the outputCOLNAME="1" VALIGN="TOP" MOREROWS="0"RecursiveTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause recursive output. COLNAME="1" VALIGN="TOP" MOREROWS="0"RedundantTextCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies the file containing text to be output when an Object is encountered that will cause redundant output. Section Title Section KeywordsThe following table identifies and describes the Keywords for the Debug Section. COLS="4"COLNAME="1" COLWIDTH="81p"COLNAME="2" COLWIDTH="73p"COLNAME="3" COLWIDTH="61p"COLNAME="4" COLWIDTH="231p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"LevelCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Default starting section level. Over-ridden by a valid value for the -sl parameter. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"Symbolic Tag to be used for formatting the section's title. Must correspond to a value(s) in the tag file. Specification Section KeywordsThe following table identifies and describes the Keywords for the Specification Section. COLS="4"COLNAME="1" COLWIDTH="81p"COLNAME="2" COLWIDTH="55p"COLNAME="3" COLWIDTH="61p"COLNAME="4" COLWIDTH="249p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ExtensionCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"File suffix for Specification files. SpecVariable Section KeywordsThe following table identifies and describes the Keywords for the SpecVariable Section. COLS="4"COLNAME="1" COLWIDTH="84p"COLNAME="2" COLWIDTH="55p"COLNAME="3" COLWIDTH="63p"COLNAME="4" COLWIDTH="244p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"PrefixCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"Character(s) preceding a string to indicate it is a variable. COLNAME="1" VALIGN="TOP" MOREROWS="0"SuffixCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"Character(s) following a string to indicate it is a variable. SubField Section KeywordsThe following table identifies and describes the Keywords for the SubField Section. COLS="4"COLNAME="1" COLWIDTH="73p"COLNAME="2" COLWIDTH="94p"COLNAME="3" COLWIDTH="55p"COLNAME="4" COLWIDTH="222p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SeparatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"The character(s) used to separate sub-fields in a Specification. SubRecord Section KeywordsThe following table identifies and describes the Keywords for the SubRecord Section. COLS="4"COLNAME="1" COLWIDTH="82p"COLNAME="2" COLWIDTH="106p"COLNAME="3" COLWIDTH="63p"COLNAME="4" COLWIDTH="196p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SeparatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"The character(s) used to separate sub-records in a Specification. Table Section KeywordsThe following table identifies and describes the Keywords for the Table Section. COLS="4"COLNAME="1" COLWIDTH="79p"COLNAME="2" COLWIDTH="96p"COLNAME="3" COLWIDTH="57p"COLNAME="4" COLWIDTH="214p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ETCrepeatCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Interval to repeat the message for the Estimated Time to Completion (ETC) for the generation of the tables. COLNAME="1" VALIGN="TOP" MOREROWS="0"FormCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Default table form (e.g., Single or Multiple). COLNAME="1" VALIGN="TOP" MOREROWS="0"IDCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"Symbolic Tag to be used for formatting the table's title. Must correspond to a value(s) in the tag file. COLNAME="1" VALIGN="TOP" MOREROWS="0"TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"TextCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"The default text for the table's title. May contain variables. COLNAME="1" VALIGN="TOP" MOREROWS="0"WidthCOLNAME="2" VALIGN="TOP" MOREROWS="0"NumericCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"The maximum width for the table in the output. Temporary KeywordsThe following table identifies and describes the Keywords for the Temporary Section. COLS="4"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="76p"COLNAME="3" COLWIDTH="43p"COLNAME="4" COLWIDTH="249p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectoryCOLNAME="2" VALIGN="TOP" MOREROWS="0"FilenameCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Full-path of the directory to be used for temporary files. May be over-ridden by the $TEMP_DIR variable in the Variables File, if variables are used. Text KeywordsThe following table identifies and describes the Keywords for the Text Section. COLS="4"COLNAME="1" COLWIDTH="97p"COLNAME="2" COLWIDTH="91p"COLNAME="3" COLWIDTH="54p"COLNAME="4" COLWIDTH="205p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DoubleReturnCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies how to treat two consecutive carriage-returns in the output text. COLNAME="1" VALIGN="TOP" MOREROWS="0"ReturnCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"UserCOLNAME="4" VALIGN="TOP" MOREROWS="0"Specifies how to treat a single carriage-return in the output text. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"StringCOLNAME="3" VALIGN="TOP" MOREROWS="0"AdminCOLNAME="4" VALIGN="TOP" MOREROWS="0"Symbolic Tag to be used for formatting the text. Must correspond to a value(s) in the tag file. Variable File Section Section KeywordsThe following table identifies and describes the Keywords for the Variable File Section. COLS="4"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="97p"COLNAME="3" COLWIDTH="58p"COLNAME="4" COLWIDTH="216p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AccessCOLNAME="4" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"SeparatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"EnumerationCOLNAME="3" VALIGN="TOP" MOREROWS="0"VendorCOLNAME="4" VALIGN="TOP" MOREROWS="0"The character(s) used to separate fields in a Variable File. Chapter 5 DocExpress ID="32131"Utilities for ObjectTeamTERM1="DocEXPRESS Utilities"TERM1="Utilities"IntroductionThis chapter provides detailed descriptions of the DocExpress utilities that may be used to further customize DocExpress output. The description of the utilities is in the format of UNIX "man pages".ID="20139"OverviewDocExpress provides the following utilities for ObjectTeam. COLS="2"COLNAME="1" COLWIDTH="94p"COLNAME="2" COLWIDTH="351p"COLNAME="1" VALIGN="TOP" MOREROWS="0"UtilityCOLNAME="2" VALIGN="TOP" MOREROWS="0"PurposeCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37496" TYPE="XREF-TEXTCOPY"dd_tblCOLNAME="2" VALIGN="TOP" MOREROWS="0" Extracts the names and specific attributes of data elements from the ObjectTeam database and formats the information as tables. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12727" TYPE="XREF-TEXTCOPY"get_diagsCOLNAME="2" VALIGN="TOP" MOREROWS="0" Extracts all diagrams of the specified type and optionally a description of each diagram from the ObjectTeam database. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19938" TYPE="XREF-TEXTCOPY"get_objectsCOLNAME="2" VALIGN="TOP" MOREROWS="0" Extracts the name and optionally description of any ObjectTeam object (e.g., Class, Data Process, etc.) from the ObjectTeam database. Optionally, the diagram on which the object(s) resides and its description may be extracted. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15932" TYPE="XREF-TEXTCOPY"if_listCOLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts the names and optionally types of interfaces (e.g., Data Flow, Communication Message, etc.) from the ObjectTeam database and formats the information as a list. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34453" TYPE="XREF-TEXTCOPY"if_tbl COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts the names and specific properties of interfaces (e.g., Data Flow, Communication Message, etc.) from the ObjectTeam database and formats the information as tables. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36877" TYPE="XREF-TEXTCOPY"object_listCOLNAME="2" VALIGN="TOP" MOREROWS="0" Extracts the names and optionally types of any ObjectTeam object (e.g., Class, Data Process, etc.) from the ObjectTeam database and formats the information as a list. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12240" TYPE="XREF-TEXTCOPY"parse_omtCOLNAME="2" VALIGN="TOP" MOREROWS="0" Extracts a set of related information for the Object Model, Dynamic Model, and Functional Model from the ObjectTeam database. COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34425" TYPE="XREF-TEXTCOPY"parse_dcsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts a set of related information from the ObjectTeam database. DocExpress outputThe format in which the information extracted by DocExpress is output depends on which platform you are running and which DTP package you are using. DocExpress can output extracted information in the following formats:n Interleaf, or FrameMaker tables (under UNIX)n RTF or MS-Word tables (under Windows)In this chapterThis chapter contains the following sections:COLS="1"COLNAME="1" COLWIDTH="450p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Section pageCOLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="20139" TYPE="XREF-TEXTCOPY"Overview 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'1COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="37496" TYPE="XREF-TEXTCOPY"dd_tbl 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'3COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12727" TYPE="XREF-TEXTCOPY"get_diags 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'17COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="19938" TYPE="XREF-TEXTCOPY"get_objects 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'25COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="15932" TYPE="XREF-TEXTCOPY"if_list 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'39COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34453" TYPE="XREF-TEXTCOPY"if_tbl 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'56COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="36877" TYPE="XREF-TEXTCOPY"object_list 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'69COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="12240" TYPE="XREF-TEXTCOPY"parse_omt 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'82COLNAME="1" VALIGN="TOP" MOREROWS="0"REFID="34425" TYPE="XREF-TEXTCOPY"parse_dcs 5name='ndash' font=symbol charset=fontspecific code=45 descr='[mdash]'129TERM1="Utilities" TERM2="dd_tbl"ID="37496"dd_tblNAMEdd_tbl name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extracts the names and specific attributes of data elements from the ObjectTeam database and formats the information as tables. LOCATIONdd_tbl is located in:OMT:$ATAHOME/doc/case_tools/ot/bin/omt (UNIX) or%ATAHOME%\doc\ctools\ot\bin\omt (Windows)UML:$ATAHOME/doc/case_tools/ot/bin/uml (UNIX) or%ATAHOME%\doc\ctools\ot\bin\uml (Windows)SYNOPSISdd_tbl -output Output File -dps Document Publishing System [-project Project Name] [-config Configuration Name] [-phase Phase Name] [-system System Name] [-type Data Element Type] [-range Name Range] [-dname Diagram Name] [-dtype Diagram Type] [-tbldef Table Definition] [-format Format File] [-header Header File] [-tags Document System Tags] [-input Parameters File] [-verbose] [-help]DESCRIPTIONdd_tbl extracts data elements (e.g., Classes, Data Flows, Communication Messages, etc.) and their associated characteristics (e.g., Attributes, Name, Source, etc.) and formats the information as a table (see REFID="23163" TYPE="XREF-TEXTCOPY"Example). The characteristics of the data elements to extract are specified in a format file (see the FORMAT FILES section on page 14). The information for each data element is placed in separate two column tables. The titles for the characteristics are placed in the left column and the values of these characteristics are placed in the right column (see the EXAMPLE section below). The titles for the characteristics may be specified in the tables definition file (see the TABLE DEFINITION section on page 15). OPTIONS-output Output File Specifies the file where the output of this utility will be directed. The output file should have an appropriate suffix for the document publishing system (i.e., mif for FrameMaker, doc for Interleaf, rtf for MSWord and rtf for RTF). -dps Document Publishing SystemSpecifies the document publishing system in which the output is to be viewed. The markup specific to this system is generated. The choices available for this option are [frame|ileaf] on UNIX and [msword|rtf] on Windows.[-project Project Name]Specifies the name of the desired project. DEFAULT: Taken from the M4_levelpath environment variable. [-config Configuration Name]Specifies the name of the desired Configuration for the Project. Specified as configuration_name.version_number (e.g., Ot4omtExample.1). DEFAULT: Taken from the M4_levelpath environment variable. [-phase Phase Name]Specifies the name of the desired Phase for the Configuration Version. Specified as phase_name.version_number (i.e., Analysis.1). DEFAULT: Taken from the M4_levelpath environment variable. [-system System Name]Specifies the name of the desired System within the Phase. Specified as system_name.version_number (e.g., CoreSystem.1). DEFAULT: Taken from the M4_levelpath environment variable. [-type Data Element Type]Specifies the type or types of data elements desired. Multiple data element types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CADClass CCDClass"). See tab 3-4 through 3-10 on pages through for the valid data element types. DEFAULT: All data element types. [-range Name Range]Limits the extraction of data elements to those whose name falls within the specified range. For example, specifying a-m, limits the extraction of data elements to those whose name starts with a letter between a and m inclusive. Case is ignored. DEFAULT: All data elements are extracted. [-dname Diagram Name]Limits the extraction of data elements to those on the specified diagram. DEFAULT: Data elements on all diagrams are extracted. [-dtype Diagram Type]Limits the extraction of data elements to those on the specified diagram type(s). Multiple diagram types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CAD CCD"). See on page for the valid diagram types. DEFAULT: Data elements on all types of diagrams are extracted. [-tbldef Table Definition]Specifies the name of a file which contains the data element's table definition. See the TABLE DEFINITION section on page 15. Default Table Definitions: COLS="2"COLNAME="1" COLWIDTH="94p"COLNAME="2" COLWIDTH="334p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DTP PackageCOLNAME="2" VALIGN="TOP" MOREROWS="0"LocationCOLNAME="1" VALIGN="TOP" MOREROWS="0"FrameMakerCOLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/frame/dd_tbl.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/ileaf/dd_tbl.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"MSWordCOLNAME="2" VALIGN="TOP" MOREROWS="0"%ATAHOME%\doc\ctools\ot\msword\dd_tbl.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"RTFCOLNAME="2" VALIGN="TOP" MOREROWS="0"%ATAHOME%\doc\ctools\ot\rtf\dd_tbl.txt[-format Format File]Permits the user to specify the name of a file which contains the names of attributes for the data elements. See the FORMAT FILES section on page 14. Default Format File:$ATAHOME/doc/case_tools/ot/format_files/omt/dde.fmt%ATAHOME%\doc\ctools\ot\format_files\omt\dde.fmt[-header Header File]Specifies a file which contains the master definitions of all component/paragraph definitions for the desired document publishing system. See the HEADER FILES section on page 18. Default Header File: COLS="2"COLNAME="1" COLWIDTH="100p"COLNAME="2" COLWIDTH="330p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DTP PackageCOLNAME="2" VALIGN="TOP" MOREROWS="0"LocationCOLNAME="1" VALIGN="TOP" MOREROWS="0"FrameMakerCOLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/frame/header.mifCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/ileaf/header.docCOLNAME="1" VALIGN="TOP" MOREROWS="0"MS-WordCOLNAME="2" VALIGN="TOP" MOREROWS="0"%ATAHOME%\doc\ctools\ot\msword\header.rtfCOLNAME="1" VALIGN="TOP" MOREROWS="0"RTFCOLNAME="2" VALIGN="TOP" MOREROWS="0"%ATAHOME%\doc\ctools\ot\rtf\header.rtf[-tags Document System Tags]Specifies the name of the file which contains names of the document publishing system paragraph/component tags used during the utilities execution. See the TAGS FILE section on page 17. DEFAULT TAGS FILE: COLS="2"COLNAME="1" COLWIDTH="103p"COLNAME="2" COLWIDTH="337p"COLNAME="1" VALIGN="TOP" MOREROWS="0"DTP PAckageCOLNAME="2" VALIGN="TOP" MOREROWS="0"LocationCOLNAME="1" VALIGN="TOP" MOREROWS="0"FrameMakerCOLNAME="2" VALIGN="TOP" MOREROWS="0"ATAHOME/doc/case_tools/ot/frame/tag_file.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"InterleafCOLNAME="2" VALIGN="TOP" MOREROWS="0"$ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"MSWordCOLNAME="2" VALIGN="TOP" MOREROWS="0"%ATAHOME%\doc\ctools\ot\msword\tag_file.txtCOLNAME="1" VALIGN="TOP" MOREROWS="0"RTFCOLNAME="2" VALIGN="TOP" MOREROWS="0"%ATAHOME%\doc\ctools\ot\rtf\tag_file.txt[-input Parameters File]Specifies the name of a Parameters File. The parameters file may contain all or some of the command line options. For more information, see the PARAMETERS FILE section on page 11. DEFAULT: No parameters file. [-verbose]Specifies that informative messages as well as error and warning messages are displayed. DEFAULT:Only error and warning messages are displayed. [-help]The proper syntax for the utility is displayed. TERM1="Utilities" TERM2="dd_tbl" TERM3="diagnostics"TERM1="dd_tbl" TERM2="diagnostics"TERM1="Diagnostics" TERM2="dd_tbl"DiagnosticsIntroductionThis section identifies and describes all the error and warning messages that may be generated by the dd_tbl utility. Each message is followed by an explanation. ErrorsERROR: A Project must be specified.A Project was not specified on the command line of the utility with the -project option. ERROR: The bad project does not existThe Project, bad, specified with the -project option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A configuration must be specified.A Configuration was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -config option. ERROR: The bad configuration does not existThe Configuration, bad, specified with the -config option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A phase must be specified.A Phase was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -phase option. ERROR: The bad phase does not existThe Phase, bad, specified with the -phase option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A system must be specified.A System was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -system option. ERROR: The bad system does not existThe System, bad, specified with the -system option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: The document publishing system must be specified.A document publishing system was not specified on the command line of the utility with the -dps option. ERROR: The dps option must be ( frame | ileaf ).ERROR: The dps option must be ( msword | rtf ).An invalid document publishing system was specified on the command line of the utility with the -dps option. ERROR: The document publishing system must be specified.The -dps options was not used on the command line of the utility to specify a document publishing system. ERROR: An output file must be specified.An output file was not specified on the command line of the utility with the -output option. ERROR: The extension for an Interleaf output file must be .docAn invalid extension for an Interleaf document was specified for the output file using the -output option. ERROR: The extension for a Frame output file must be .mifAn invalid extension for an FrameMaker document was specified for the output file using the -output option. -------------------------------------------------------------DocExpress 2.3Error occurred on 03/14/96 at 10:21:00Error occurred in DocExpressDocExpress: Not a valid ileaf file, </users/lucy/header.mif>. Missing mandatory "<!OPS ...>" statement.-------------------------------------------------------------ERROR: dps_check_file failed: 65280/users/lucy/ata/doc/utils/dps/dps_file_ck -i /users/lucy/header.mif -dp_type ileafThe header file specified with the -header command line option of the utility was not valid for the document publishing system specified with the -dps option. -------------------------------------------------------------DocExpress 2.3Error occured on 04/05/96 at 15:25:04Error occured in DocExpressDocExpress: Not a valid frame file, </users/lucy/header.doc>. Missing mandatory "<MIFFile ...>" statement.-------------------------------------------------------------ERROR: dps_check_file failed: 65280/users/lucy/ata/doc/utils/dps/dps_file_ck -i /users/lucy/header.doc -dp_type frameThe header file specified with the -header command line option of the utility was not valid for the document publishing system specified with the -dps option. ERROR: The extension for an RTF output file must be .rtfAn invalid extension for an RTF document was specified for the output file using the -output option. ERROR: The extension for a MSWord output file must be .rtf+ Is this right?An invalid extension for an MSWord document was specified for the output file using the -output option. ERROR: bad is an invalid diagram type.The diagram type, bad, specified with the -dtype option, is not a valid diagram type. ERROR: No legal entries in the DDE format file: empty.txtThe format file, empty.txt, specified with the -format option contain no legal entries for a DDE format file. ERROR: The tag file, bad does not exist.The file, bad, specified with the -tag option, does not exist. ERROR: Unable to open file: nofile.txtThe utility was unable to open the file, nofile.txt. ERROR: The tag file, noread.txt cannot be read.The tag file, noread.txt, specified with the -tag option, could not be read. ERROR: Expected another argumentThe last option on the utilities' command line required a value which was not specified. ERROR: Bad parameter -invalidThe option, -invalid, specified on the command line of the utility is not valid. ERROR: Bad parameter ileafAn invalid option was specified on the utilities' command line. This error may also occur if a previous option required a value which was not specified. In this case, the next option is used as the option's value, thus forcing its value to be interpreted as an option. ERROR: Bad parameter rtfAn invalid option was specified on the utilities' command line. This error may also occur if a previous option required a value which was not specified. In this case, the next option is used as the option's value, thus forcing its value to be interpreted as an option. WarningsWARNING: BAD is an invalid DDE type.The DDE type, bad, specified with the -type option is not a valid data element type. WARNING: The DDE format file, nofile.txt does not exist.Using the default format file /users/lucy/ata/doc/case_tools/ot/format_files/omt/dde.fmt (OR)\users\lucy\ata\doc\ctools\ot\format_files\omt\dde.fmtThe DDE format file, nofile.txt, specified with the -format option, does not exist. The default DDE format file will be used instead. WARNING: The DDE format file, noread.txt cannot be read.Using the default format file /users/lucy/ata/doc/case_tools/ot/format_files/omt/dde.fmt (OR)\users\lucy\ata\doc\ctools\ot\format_files\omt\dde.fmtThe DDE format file, noread.txt, specified with the -format option, could not be read. The default DDE format file will be used instead. WARNING: The Table Definitions file, nofile.txt does not exist.Using the default Tables Definitions file: /users/lucy/ata/doc/case_tools/ot/ileaf/dd_tbl.txt(OR)\users\lucy\ata\doc\ctools\ot\rtf\dd_tbl.txtThe table definitions file, nofile.txt, specified with the -tbl_def option, does not exist. The default table definitions file will be used instead. WARNING: The Table Definitions file, noread.txt cannot be read.Using the default Tables Definitions file: /users/lucy/ata/doc/case_tools/ot/ileaf/dd_tbl.txt (OR)\users\lucy\ata\doc\ctools\ot\rtf\dd_tbl.txtThe table definitions file, noread.txt, specified with the -tbl_def option, could not be read. The default table definitions file will be used instead. TERM1="Utilities" TERM2="dd_tbl" TERM3="example"TERM1="dd_tbl" TERM2="example"TERM1="Example" TERM2="dd_tbl"ID="23163"ExampleThe command below will generate data element tables for all Flows on Data Flow Diagrams (i.e., Control Flows, Data Flows, Result Flows, and Update Flows) and format the output for Interleaf. $ATAHOME/doc/case_tools/ot/bin/omt/dd_tbl \-proj Ot4omtExample -config Ot4omtExample.1 \-phase Analysis.1 -system CoreSystem.1 \-o $HOME/.ata/tmp/dd_tbl.doc -dps ileaf -type Flow \-dtype DFDA sample of the output from the utility is shown below. COLS="2"COLNAME="1" COLWIDTH="103p"COLNAME="2" COLWIDTH="345p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"fineCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data FlowCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Not ApplicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Not ApplicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"TextCOLNAME="2" VALIGN="TOP" MOREROWS="0" COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Member ActorCOLNAME="1" VALIGN="TOP" MOREROWS="0"DestinationCOLNAME="2" VALIGN="TOP" MOREROWS="0"return Product data_procCOLS="2"COLNAME="1" COLWIDTH="82p"COLNAME="2" COLWIDTH="366p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"MemberCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data FlowCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Not ApplicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Not ApplicableCOLNAME="1" VALIGN="TOP" MOREROWS="0"TextCOLNAME="2" VALIGN="TOP" MOREROWS="0" COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"find Member Data ProcessCOLNAME="1" VALIGN="TOP" MOREROWS="0"DestinationCOLNAME="2" VALIGN="TOP" MOREROWS="0" data_vertexTERM1="Utilities" TERM2="dd_tbl" TERM3="extraction combinations"TERM1="dd_tbl" TERM2="extraction combinations"Extraction CombinationsThe following tables identify and describe various sets of data elements and the appropriate parameter values necessary to extract them. The first table identifies and describes the valid diagram types that may be specified for the -dtype. The remaining tables identify and describe the valid data element types that may be specified for the -type option. Object and Diagram Extraction CombinationsCOLS="5"COLNAME="1" COLWIDTH="27p"COLNAME="2" COLWIDTH="247p"COLNAME="3" COLWIDTH="57p"COLNAME="4" COLWIDTH="57p"COLNAME="5" COLWIDTH="57p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"-dnameCOLNAME="5" VALIGN="TOP" MOREROWS="0"-dtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all data elements of the specified type on the diagram of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all data elements on the diagram of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all data elements of the specified type on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all data elements on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all data elements of the specified type on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all data elements on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all data elements of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all data elements. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"TERM1="Utilities" TERM2="dd_tbl" TERM3="format files"TERM1="dd_tbl" TERM2="format files"ID="38562"Format FilesIntroductionTERM1="Format Files" TERM2="DDE" TERM3="dd_tbl"A format file defines which characteristics of the data elements should be included in the table and in what order they should appear. The keywords that define these characteristics are identified and described in the following table.Data Element KeywordsCOLS="2"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="300p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"ATTRIBUTESCOLNAME="2" VALIGN="TOP" MOREROWS="0"The data element's Attributes (Classes only). COLNAME="1" VALIGN="TOP" MOREROWS="0"DESTINATIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the data element's destination (Interfaces only). COLNAME="1" VALIGN="TOP" MOREROWS="0"METHODSCOLNAME="2" VALIGN="TOP" MOREROWS="0"The data element's Methods (Classes only). COLNAME="1" VALIGN="TOP" MOREROWS="0"NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"The data element's name. COLNAME="1" VALIGN="TOP" MOREROWS="0"PROPERTY:name (UNIX)PROPERTY=name (WIN)COLNAME="2" VALIGN="TOP" MOREROWS="0"The data element's Property with the specified Property name. COLNAME="1" VALIGN="TOP" MOREROWS="0"SOURCECOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the data element's source (Interfaces only).COLNAME="1" VALIGN="TOP" MOREROWS="0"TEXTCOLNAME="2" VALIGN="TOP" MOREROWS="0"The freetext attached to the data element. COLNAME="1" VALIGN="TOP" MOREROWS="0"TYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"The data element's type. Keywords should be followed by a colon (:) on UNIX, or an equals sign (=) on Windows. Blank lines and comment lines (lines that begin with a pound sign '#') in the format file are ignored. All other lines must contain valid keywords. The table definitions file may be used to define aspects of the data element table such as its Title or column sizes (see REFID="36864" TYPE="XREF-TEXTCOPY"Table Definitions File). If row titles are not defined in the table definitions file, the keywords of the format file are used for the row's titles. The format file may be customized. The default format file is described in the section below. To customize the file, first copy it into a working directory. Modify the file as necessary and then specify its path using the -format option. Default Format fileThe default format file for data elements is located in $ATAHOME/doc/case_tools/ot/format_files and is shown in below. COLS="3"COLNAME="1" COLWIDTH="148p"COLNAME="2" COLWIDTH="148p"COLNAME="3" COLWIDTH="148p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Format File NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Contents (UNIX)COLNAME="3" VALIGN="TOP" MOREROWS="0"Contents (Win)COLNAME="1" VALIGN="TOP" MOREROWS="0"dde.fmtCOLNAME="2" VALIGN="TOP" MOREROWS="0"NAME:TYPE:ATTRIBUTES:METHODS:TEXT:SOURCE:DESTINATION:COLNAME="3" VALIGN="TOP" MOREROWS="0"NAME=TYPE=ATTRIBUTES=METHODS=TEXT=SOURCE=DESTINATION=TERM1="dd_tbl" TERM2="table definitions file"TERM1="Utilities" TERM2="dd_tbl" TERM3="table definitions file"ID="36864"Table Definitions FileIntroductionThis section describes the default tables definition files for the utility. Default Tables Definition fileA default table definitions file exists for each document publishing system and are described in the paragraphs below. The FrameMaker default table definitions file is located in $ATAHOME/doc/case_tools/ot/frame/dd_tbl.txt. The Interleaf default table definitions file is located in $ATAHOME/doc/case_tools/ot/ileaf/dd_tbl.txt. These files have the following contents:Title:$NAME ($TYPE)ColumnTitle1:AttributeColumnSize1:2ColumnSize2:4.5ColumnTitle2:ValueRowTitle1:NameRowTitle2:TypeRowTitle3:AttributesRowTitle4:MethodsRowTitle5:TextRowTitle6:SourceRowTitle7:DestinationMSWord's default table definitions file is located in %ATAHOME%\doc\ctools\ot\msword\dd_tbl.txt. RTF's default table definitions file is located in %ATAHOME%\doc\ctools\ot\rtf\dd_tbl.txt. These files have the following contents:Title=$NAME ($TYPE)ColumnTitle1=AttributeColumnSize1=2ColumnSize2=4.5ColumnTitle2=ValueRowTitle1=NameRowTitle2=TypeRowTitle3=AttributesRowTitle4=MethodsRowTitle5=TextRowTitle6=SourceRowTitle7=DestinationTERM1="Utilities" TERM2="get_diags"ID="12727"get_diagsNAMEget_diags name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extracts all diagrams of the specified type and optionally a description of each diagram from the ObjectTeam database. LOCATIONget_diags is located in:OMT$ATAHOME/doc/case_tools/ot/bin/omt (UNIX) or%ATAHOME%\doc\ctools\ot\bin\omt (Windows)UML$ATAHOME/doc/case_tools/ot/bin/uml (UNIX) or%ATAHOME%\doc\ctools\ot\bin\uml (Windows)SYNOPSISget_diags -output Output File -dps Document Publishing System [-project Project Name] [-config Configuration Name] [-phase Phase Name] [-system System Name] [-dname Diagram Name] [-dtype Diagram Type] [-dtext] [-dtitle Diagram Title] [-orient Diagram Orientation] [-sl Starting Section Level] [-cs] [-sect_fmt Section Title Format] [-header Header File] [-tags Document System Tags] [-input Parameters File] [-verbose] [-help]DESCRIPTIONThis utility extracts from the ObjectTeam database all diagrams specified by the user. Diagrams may be specified by name, type or both. Figure titles are generated for the extracted diagrams. Optionally, a textual description may be extracted and placed below each diagram (see the EXAMPLE section on page 26). Each diagram along with its associated description may be included in a separately numbered section. The starting section level is specified with the -sl option and works in conjunction with the -cs option (see these options in the OPTIONS section below). The extracted information may be formatted for Interleaf, FrameMaker, RTF or MS-WordOPTIONS-output Output File Specifies the file where the output of this utility will be directed. The output file should have an appropriate suffix for the document publishing system (i.e., mif for FrameMaker, doc for Interleaf, or rtf for MS-Word and RTF). -dps Document Publishing SystemSpecifies the document publishing system in which the output is to be viewed. The markup specific to this system is generated. The choices available for this option are [frame|ileaf] or [msword|rtf].[-project Project Name]Specifies the name of the desired Project. DEFAULT: Taken from the M4_levelpath environment variable. [-config Configuration Name]Specifies the name of desired Configuration for the Project. Specified as configuration_name.version_number (e.g., Ot4omtExample.1). DEFAULT: Taken from the M4_levelpath environment variable. [-phase Phase Name]Specifies the name of the desired Phase for the Configuration Version. Specified as phase_name.version_number (i.e., Analysis.1). DEFAULT: Taken from the M4_levelpath environment variable. [-system System Name]Specifies the name of the desired System within the Phase. Specified as system_name.version_number (e.g., CoreSystem.1). DEFAULT: Taken from the M4_levelpath environment variable. [-dname Diagram Name]Limits the extraction of diagrams to the specified name. DEFAULT: All diagrams of the specified type are extracted. [-dtype Diagram Type]Limits the extraction of diagrams to those of the specified type(s). Multiple diagram types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CD CCD"). See REFID="19243" TYPE="XREF-TEXTCOPY"Diagram Types for the valid diagram types. DEFAULT: All diagrams with the specified name are extracted. [-dtext]Specifies that the freetext attached to a diagram should be extracted. DEFAULT: No text is extracted. [-dtitle Diagram Title]Specifies the format for the diagram's title. The format may contain text or the variables $NAME or $TYPE for the diagram's name and type respectively. If variables are used, the string must be enclosed in single quotes ('') and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT DIAGRAM TITLE: $NAME ($TYPE)[-orient Diagram Orientation]Specifies the desired orientation of the diagrams in the document. The orientation options are [Portrait | LandScape | BestFit]. DEFAULT ORIENTATION: Portrait[-sl Starting Section Level]Specifies the starting section level (e.g., 1.4 is level 2; 2.2.3.1 is level 4) of the output. If the starting section level is set to zero (0), no section titles are generated. The -sl option works in conjunction with the -cs option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first diagram extracted by get_diags is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT STARTING SECTION LEVEL: Zero (0) [-cs]The -cs option works in conjunction -sl option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first object extracted by get_diags is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT CURRENT SECTION: First section command is executed[-sect_fmt Section Title Format]Specifies the format for the diagram's section title. The format may contain text or the run-time variables $NAME or $TYPE for the diagram's name and type respectively. If variables are used, the string must be enclosed in single quotes ('') and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT SECTION FORMAT: $NAME ($TYPE) [-header Header File]Specifies a file which contains the master definitions of all component/paragraph definitions for the desired document publishing system. See the REFID="21304" TYPE="XREF-TEXTCOPY"Header Files. DEFAULT HEADER FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/header.mifDEFAULT FORMAT FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/header.docDEFAULT HEADER FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\header.rtfDEFAULT FORMAT FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\header.rtf[-tags Document System Tags]Specifies the name of a file which contains names of the document publishing system paragraph/component tags used during the utilities execution. See the TAGS FILE section on page 28. DEFAULT TAGS FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/tag_file.txtDEFAULT TAGS FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtDEFAULT TAGS FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\tag_file.txtDEFAULT TAGS FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\tag_file.txt[-input Parameters File]Specifies the name of a Parameters File. The parameters file may contain all or some of the command line options. For more information, see the PARAMETERS FILE section on page 27. DEFAULT: No parameters file. [-verbose]Specifies that informative messages as well as error and warning messages are displayed. DEFAULT: Only error and warning messages are displayed. [-help]The proper syntax for the utility is displayed. TERM1="Utilities" TERM2="get_diags" TERM3="diagnostics"TERM1="get_diags" TERM2="diagnostics"TERM1="Diagnostics" TERM2="get_diags"DIAGNOSTICSThis section identifies and describes all the error and warning messages that may be generated by the get_diags utility. Each message is followed by an explanation. ERRORSERROR: A Project must be specified.A Project was not specified on the command line of the utility with the -project option. ERROR: The bad project does not existThe Project, bad, specified with the -project option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A configuration must be specified.A Configuration was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -config option. ERROR: The bad configuration does not existThe Configuration, bad, specified with the -config option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A phase must be specified.A Phase was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -phase option. ERROR: The bad phase does not existThe Phase, bad, specified with the -phase option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A system must be specified.A System was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -system option. ERROR: The bad system does not existThe System, bad, specified with the -system option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: The document publishing system must be specified.A document publishing system was not specified on the command line of the utility with the -dps option. ERROR: The dps option must be ( frame | ileaf ). ORERROR: The dps option must be ( msword | rtf ).An invalid document publishing system was specified on the command line of the utility with the -dps option. ERROR: An output file must be specified.An output file was not specified on the command line of the utility with the -output option. ERROR: The extension for an Interleaf output file must be .docAn invalid extension for an Interleaf document was specified for the output file using the -output option. ERROR: The extension for a Frame output file must be .mifAn invalid extension for an FrameMaker document was specified for the output file using the -output option. -------------------------------------------------------------DocExpress 2.3Error occurred on 03/14/96 at 10:21:00Error occurred in DocExpressDocExpress: Not a valid ileaf file, </users/lucy/header.mif>. Missing mandatory "<!OPS ...>" statement.-------------------------------------------------------------ERROR: dps_check_file failed: 65280/users/lucy/ata/doc/utils/dps/dps_file_ck -i /users/lucy/header.mif -dp_type ileafThe header file specified with the -header command line option of the utility was not valid for the document publishing system specified with the -dps option. -------------------------------------------------------------DocExpress 2.3Error occured on 04/05/96 at 15:25:04Error occured in DocExpressDocExpress: Not a valid frame file, </users/lucy/header.doc>. Missing mandatory "<MIFFile ...>" statement.-------------------------------------------------------------ERROR: dps_check_file failed: 65280/users/lucy/ata/doc/utils/dps/dps_file_ck -i /users/lucy/header.doc -dp_type frameThe header file specified with the -header command line option of the utility was not valid for the document publishing system specified with the -dps option. ERROR: The extension for an RTF output file must be .rtfAn invalid extension for an RTF document was specified for the output file using the -output option. ERROR: The extension for a MSWord output file must be .rtfAn invalid extension for an MSWord document was specified for the output file using the -output option. ERROR: bad is an invalid diagram type.The diagram type, bad, specified with the -dtype option, is not a valid diagram type. ERROR: The tag file, bad does not exist.The file, bad, specified with the -tag option, does not exist. ERROR: The tag file, nofile.txt does not exist.The tag file, nofile.txt, specified with the -tag option, does not exist. ERROR: Unable to open file: nofile.txtThe utility was unable to open the file, nofile.txt. ERROR: The tag file, noread.txt cannot be read.The tag file, noread.txt, specified with the -tag option, could not be read. ERROR: Bad parameter -badThe option, -bad, specified on the command line of the utility is not valid. ERROR: Expected another argumentThe last option on the utilities' command line required a value which was not specified. ERROR: Bad parameter ileafAn invalid option was specified on the utilities' command line. This error may also occur if a previous option required a value which was not specified. In this case, the next option is used as the option's value, thus forcing its value to be interpreted as an option. WARNINGSWARNING: Invalid section level parameter value: -1Setting section level value to 1The section level number, specified with the -sl option, must be a non-negative number; otherwise, the section level will be set to 1. TERM1="Utilities" TERM2="get_diags" TERM3="example"TERM1="get_diags" TERM2="example"TERM1="Example" TERM2="get_diags"EXAMPLEThe command below will extract the Class Communication Diagram named Rental and format the output for Interleaf. $ATAHOME/doc/case_tools/ot/bin/get_diags \-proj Ot4omtExample -config Ot4omtExample.1 \-phase Analysis.1 -system CoreSystem.1 \-o $HOME/.ata/tmp/get_diags.doc -dps ileaf \-dtype CCD -dname RentalThe output from the utility is shown below. FILENAME="01102.tif" ORIGSEQ="1" ORIGTYPE="I" ORIGDOC="../../sources/dx_utils/dxu_utls.fm5.mif"Figure 1: RentalTop (Data Flow Diagram)TERM1="Utilities" TERM2="get_objects"ID="19938"get_objectsNAMEget_objects name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extracts the name and optionally description of any ObjectTeam objects (e.g., Class, Data Process, etc.) from the ObjectTeam database. Optionally, the diagram on which the object(s) resides and its description may be extracted. LOCATIONget_objects is located in:OMT$ATAHOME/doc/case_tools/ot/bin/omt (UNIX) OR%ATAHOME%\doc\ctools\ot\bin\omt (WINDOWS)UML$ATAHOME/doc/case_tools/ot/bin/uml (UNIX) OR%ATAHOME%\doc\ctools\ot\bin\uml (WINDOWS)SYNOPSISget_objects -output Output File -dps Document Publishing System [-project Project Name] [-config Configuration Name] [-phase Phase Name] [-system System Name] [-oname Object Name] [-otype Object Type] [-otext] [-dname Diagram Name] [-dtype Diagram Type] [-dtext] [-dtitle Diagram Title] [-orient Diagram Orientation] [-sl Starting Section Level] [-cs] [-sect_fmt Section Title Format] [-header Header File] [-tags Document System Tags] [-input Parameters File] [-verbose] [-help]DESCRIPTIONThis utility extracts and formats Objects (e.g., Classes, Data Processes, etc.) and diagrams in a variety of possible combinations (see the EXTRACTION COMBINATIONS section on page 39). When diagrams are extracted with Objects, the diagram is output first followed by the Objects on the diagram. A description may be extracted for each Object or diagram and is output after the Object's Section Title and the diagram's figure title respectively (see the EXAMPLE section on page 38). Diagrams and Objects may be placed in their own sections. The starting section level is specified with the -sl option and works in conjunction with the -cs option (see these options in the OPTIONS section below). The output may be formatted for Interleaf, FrameMaker, RTF or MS-Word. OPTIONS-output Output File Specifies the file where the output of this utility will be directed. The output file should have an appropriate suffix for the document publishing system (i.e., mif for FrameMaker, doc for Interleaf or rtf for RTF or MS-Word). -dps Document Publishing SystemSpecifies the document publishing system in which the output is to be viewed. The markup specific to this tool is generated. The choices available for this option are [frame|ileaf] or [rtf|msword]. [-project Project Name]Specifies the directory path to the desired system. DEFAULT: Taken from the M4_levelpath environment variable. [-config Configuration Name]Specifies the desired Configuration Version for the Project. Specified as configuration_name.version_number (e.g., Ot4omtExample.1). DEFAULT: Taken from the M4_levelpath environment variable. [-phase Phase Name]Specifies the name of the desired Phase for the Configuration Version. Specified as phase_name.version_number (i.e., Analysis.1). DEFAULT: Taken from the M4_levelpath environment variable. [-system System Name]Specifies the name of the desired System within the Phase. Specified as system_name.version_number (e.g., CoreSystem.1). DEFAULT: Taken from the M4_levelpath environment variable. [-oname Object Name]Specifies the name of object (i.e., object) to extract. DEFAULT: All objects are extracted with the specified type. [-otype Object Type]Specifies the type of objects to extract. Multiple types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CADClass CCDClass"). See through on pages through for the valid Object types. DEFAULT: All objects are extracted with the specified name. [-otext]When specified the freetext attached to an object (e.g. Class, Data Process, etc.) is extracted. DEFAULT: No text is extracted. [-dname Diagram Name]Limits the extraction of diagrams to the specified diagram. DEFAULT: All diagrams are extracted with the specified type. [-dtype Diagram Type]Limits the extraction of diagrams to those of the specified type(s). Multiple diagram types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CAD CCD"). See on page for the valid diagram types. DEFAULT: All diagrams are extracted with the specified name. [-dtext]When specified the freetext attached to a diagram is extracted. DEFAULT: No text is extracted. [-dtitle Diagram Title]Specifies the format for the diagram's title. The format may contain text or the run-time variables $NAME or $TYPE for the diagram's name and type respectively. If variables are used, the string must be enclosed in single quotes ('')and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT DIAGRAM TITLE: $NAME ($TYPE)[-orient Diagram Orientation]Specifies the desired orientation of the diagrams in the document. The orientation options are [Portrait | LandScape | BestFit]. DEFAULT ORIENTATION: Portrait[-sl Starting Section Level]Specifies the starting section level (e.g., 1.4 is level 2; 2.2.3.1 is level 4) of the output. If the starting section level is set to zero (0), no section titles are generated for the diagrams but, object sections levels will be set to one (1). The -sl option works in conjunction with the -cs option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first diagram or object extracted by get_objects is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT STARTING SECTION LEVEL: Zero (0). [-cs]The -cs option works in conjunction -sl option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first object extracted by get_objects is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT CURRENT SECTION: First section command is executed. [-sect_fmt Section Title Format]Specifies the format for the diagram's section title. The format may contain text or the run-time variables $NAME or $TYPE for the diagram's name and type respectively. If variables are used, the string must be enclosed in single quotes ('') and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT SECTION FORMAT: $NAME ($TYPE)[-header Header File]Specifies a file which contains the master definitions of all component/paragraph definitions for the desired document publishing system. See the HEADER FILES section on page 45. DEFAULT HEADER FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/header.mifDEFAULT FORMAT FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/header.docDEFAULT HEADER FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\header.rtfDEFAULT FORMAT FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\header.rtf[-tags Document System Tags]Specifies the name of a file which contains names of the document publishing system paragraph/component tags used during the utilities execution. See the TAGS FILE section on page 43. DEFAULT TAGS FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/tag_file.txtDEFAULT TAGS FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtDEFAULT TAGS FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\tag_file.txtDEFAULT TAGS FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\tag_file.txt[-input Parameters File]Specifies the name of a Parameters File. The parameters file may contain all or some of the command line options. For more information, see the PARAMETERS FILE section on page 39. DEFAULT: No parameters file. [-verbose]Specifies that informative messages as well as error and warning messages are displayed. DEFAULT: Only error and warning messages are displayed. [-help]The proper syntax for the utility is displayed. TERM1="Utilities" TERM2="get_objects" TERM3="diagnostics"TERM1="get_objects" TERM2="diagnostics"TERM1="Diagnostics" TERM2="get_objects"DIAGNOSTICSThis section identifies and describes all the error and warning messages that may be generated by the get_objects utility. Each message is followed by an explanation. ERRORSERROR: A Project must be specified.A Project was not specified on the command line of the utility with the -project option. ERROR: The bad project does not existThe Project, bad, specified with the -project option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A configuration must be specified.A Configuration was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -config option. ERROR: The bad configuration does not existThe Configuration, bad, specified with the -config option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A phase must be specified.A Phase was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -phase option. ERROR: The bad phase does not existThe Phase, bad, specified with the -phase option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A system must be specified.A System was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -system option. ERROR: The bad system does not existThe System, bad, specified with the -system option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: The document publishing system must be specified.A document publishing system was not specified on the command line of the utility with the -dps option. ERROR: The dps option must be ( frame | ileaf ). ORERROR: The dps option must be ( msword | rtf ).An invalid document publishing system was specified on the command line of the utility with the -dps option. ERROR: An output file must be specified.An output file was not specified on the command line of the utility with the -output option. -------------------------------------------------------------DocExpress 2.3Error occurred on 03/13/96 at 17:17:16Error occurred in DocExpress/export/home/users/lucy/ata/doc/utils/dps/init_file: output file must have ".doc" extension.-------------------------------------------------------------ERROR: dps_init_file failed: 65280/export/home/users/lucy/ata/doc/utils/dps/init_file -o /export/home/users/lucy/.ata/tmp/test_cases/get_objects_tc012.mif -dp_type ileaf -header /export/home/users/lucy/ata/doc/case_tools/ot/ileaf/header.docAn invalid extension for an Interleaf document was specified for the output file using the -output option. ERROR: The extension for a Frame output file must be .mifAn invalid extension for an FrameMaker document was specified for the output file using the -output option. ERROR: The extension for a MSWord output file must be .rtfAn invalid extension for an MSWord document was specified for the output file using the -output option. ERROR: The tag file, bad does not exist.The file, bad, specified with the -tag option, does not exist. -------------------------------------------------------------DocExpress 2.3Error occurred on 03/13/96 at 17:41:40Error occurred in DocExpressDocExpress: Not a valid ileaf file, </users/lucy/header.mif>. Missing mandatory "<!OPS ...>" statement.-------------------------------------------------------------ERROR: dps_check_file failed: 65280/users/lucy/ata/doc/utils/dps/dps_file_ck -i /users/lucy/header.mif -dp_type ileafThe header file specified with the -header command line option of the utility was not valid for the document publishing system specified with the -dps option. -------------------------------------------------------------DocExpress 2.3Error occured on 04/05/96 at 15:25:04Error occured in DocExpressDocExpress: Not a valid frame file, </users/lucy/header.doc>. Missing mandatory "<MIFFile ...>" statement.-------------------------------------------------------------ERROR: dps_check_file failed: 65280/users/lucy/ata/doc/utils/dps/dps_file_ck -i /users/lucy/header.doc -dp_type frameThe header file specified with the -header command line option of the utility was not valid for the document publishing system specified with the -dps option. ERROR: Expected another argumentThe last option on the utilities' command line required a value which was not specified. ERROR: Bad parameter ileafAn invalid option was specified on the utilities' command line. This error may also occur if a previous option required a value which was not specified. In this case, the next option is used as the option's value, thus forcing its value to be interpreted as an option. ERROR: Bad parameter rtfAn invalid option was specified on the utilities' command line. This error may also occur if a previous option required a value which was not specified. In this case, the next option is used as the option's value, thus forcing its value to be interpreted as an option. WARNINGSWARNING: BAD is not a valid type.The Object type, specified with the -otype command line option of the utility, is not a legal Object type. WARNING: Invalid section level parameter value: -3Setting section level value to 1The section level number, specified with the -sl option, must be a non-negative number; otherwise, the section level will be set to 1. TERM1="Utilities" TERM2="get_objects" TERM3="example"TERM1="get_objects" TERM2="example"TERM1="Example" TERM2="get_objects"EXAMPLEThe command below will extract all Classes and their descriptions and format the output for Interleaf. $ATAHOME/doc/case_tools/ot/bin/get_objects \-proj Ot4omtExample -config Ot4omtExample.1 \-phase Analysis.1 -system CoreSystem.1 \-o $HOME/.ata/tmp/get_objects.doc -dps ileaf \-otype Class -otext -sl 2The output from the utility is shown below. 0.1 CD (Class) 0.2 Member (Class) A person who is registered as a customer of the "Star" library. Only members are allowed to rent the products of the library. 0.3 OverdueNote (Class) A note sent to a member, when he/she did not return a rented product in time. The note says that he/she must return the product immediately and explains how much must be paid due to the late return. 0.4 PopularityReport (Class) A report that gives an overview of the popularity of each product. The data for the product copies are accumulated. 0.5 Product (Class) A product is something that can be rented from the library. There can be multiple copies of a product. Each copy can be rented. 0.6 Rental (Class) A single rent of one product by one member. 0.7 ReturnedRental (Class) The returned rental of a Product. When and how long the Product is rented is registered. It is the next stage in the life of a Rental. It is historical data used for making decisions about buying new products. 0.8 Supplier (Class) 0.9 Video (Class) TERM1="Utilities" TERM2="get_objects" TERM3="extraction combinations"TERM1="get_objects" TERM2="extraction combinations"EXTRACTION COMBINATIONSThe various combinations of objects and diagrams to extract and how they are extracted by this utility are identified and described in the tables of this section. Each table contains a description of information that may be extracted and the applicable parameter values. Objects may be extracted by name or type. All objects are extracted by default when no values are specified for any of the -oname, -otype, -dname, and -dtype parameters. The following table identifies and describes the information that may be extracted for objects and the appropriate parameter values. through identifies and describes the valid Object types that may be specified for the -otype option. COLS="4"COLNAME="1" COLWIDTH="27p"COLNAME="2" COLWIDTH="309p"COLNAME="3" COLWIDTH="57p"COLNAME="4" COLWIDTH="57p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="4" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts the object with the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects with the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"Diagrams may be extracted along with the objects extracted. Diagrams that contain the desired objects are extracted first, followed by the objects on the diagram. The following table identifies and describes the information that may be extracted for the combinations of objects and diagrams and the appropriate parameter values. See REFID="19243" TYPE="XREF-TEXTCOPY"Diagram Types, for the valid diagram types that may be specified for the -dtype option. See REFID="11426" TYPE="XREF-TEXTCOPY"Object Types for the valid Object types that may be specified for the -otype option.COLS="6"COLNAME="1" COLWIDTH="24p"COLNAME="2" COLWIDTH="201p"COLNAME="3" COLWIDTH="58p"COLNAME="4" COLWIDTH="51p"COLNAME="5" COLWIDTH="58p"COLNAME="6" COLWIDTH="51p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="4" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="5" VALIGN="TOP" MOREROWS="0"-dnameCOLNAME="6" VALIGN="TOP" MOREROWS="0"-dtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects with the specified name and type are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects of the specified name are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects of the specified type are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type and all objects on the diagrams and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified name and type are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified name are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified type are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and all objects on diagrams. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"10COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects of the specified name and type are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"11COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects of the specified name on are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"12COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects of the specified type are found and extracts the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"13COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type and extracts all objects on the diagrams. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"typeTERM1="Utilities" TERM2="if_list"ID="15932"if_listNAMEif_list name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extracts the names and optionally types of interfaces (e.g., Data Flow, Communication Message, etc.) from the ObjectTeam database and formats the information as a list. LOCATIONif_list and associated files are located in: OMT$ATAHOME/doc/case_tools/ot/bin/omtUML$ATAHOME/doc/case_tools/ot/bin/umlSYNOPSISif_list -output Output File -dps documentation_system [-project Project Name] [-config Configuration Name] [-phase Phase Name] [-system System Name] [-type Interface Type] [-range Name Range] [-internal] [-external] [-in] [-out] [-list_fmt List Format] [-oname Object Name] [-otype Object Type] [-otext] [-dname Diagram Name] [-dtype Diagram Type] [-dtext] [-dtitle Diagram Title] [-orient Diagram Orientation] [-sl Starting Section Level] [-cs] [-sect_fmt Section Title Format] [-header Header File] [-tags Document System Tags] [-input Parameters File] [-verbose] [-help]DESCRIPTIONif_list extracts the names and optionally types of interfaces (e.g., Data Flow, Communication Message, etc.) from the ObjectTeam database and formats this information as a list. Diagrams on which the interfaces reside may be extracted along with the list of interfaces. In addition, the Objects (e.g., Classes, Data Processes, etc.) to which the interfaces are connected may also be extracted. Diagrams and Objects may be output in their own sections. The starting section level is specified with the -sl option and works in conjunction with the -cs option (see these options in the OPTIONS section below). Textual descriptions may also be output for both the diagrams and Objects. These descriptions are placed below the Object's section title and the diagram's figure title respectively (see the EXAMPLE section on page 55). The output of the interfaces may be restricted by the diagram(s) on which they reside, the Objects to which they attach, external interfaces only (i.e., interfaces connected to an Actor), internal (i.e., interfaces not connected to an Actor) interfaces only, as well as other restrictions (see the EXTRACTION COMBINATIONS section on page 57). The information may be formatted for Interleaf, FrameMaker, RTF, or MSWord list. OPTIONS-output Output File Specifies the file where the output of this utility will be directed. The output file should have an appropriate suffix for the document publishing system (i.e., mif for FrameMaker, doc for Interleaf and MSWord, and rtf for RTF). -dps Document Publising SystemSpecifies the document publishing system in which the output is to be viewed. The markup specific to this system is generated. The choices available for this option are [frame|ileal] on UNIX and [msword|rtf] on Windows.[-project Project Name]Specifies the name of the desired Project. DEFAULT: Taken from the M4_levelpath environment variable. [-config Configuration Name]Specifies the name of the desired Configuration for the Project. Specified as configuration_name.version_number (e.g., Ot4omtExample.1). DEFAULT: Taken from the M4_levelpath environment variable. [-phase Phase Name]Specifies the name of the desired Phase for the Configuration Version. Specified as phase_name.version_number (i.e., Analysis.1). DEFAULT: Taken from the M4_levelpath environment variable. [-system System Name]Specifies the name of the desired System within the Phase. Specified as system_name.version_number (e.g., CoreSystem.1). DEFAULT: Taken from the M4_levelpath environment variable. [-type Interface Type]Specifies the type or types of interfaces desired. Multiple interface types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "DataFlow ControlFlow"). See through on page through for the valid interface types. DEFAULT: All interface types. [-range Name Range]Limits the extraction of interfaces to those whose name falls within the specified range. For example, specifying a-m, limits the extraction of interfaces to those whose name starts with a letter between a and m inclusive. Case is ignored. DEFAULT: All interfaces are extracted. [-internal]Limits the extraction to internal interfaces (i.e., those not attached to an Actor). DEFAULT: All interfaces are extracted. [-external]Limits the extraction to external interfaces (i.e., those attached to an Actor). DEFAULT: All interfaces are extracted. [-in]Limits the extraction to interfaces coming into a diagram or an object if a diagram name or type has not been specified. DEFAULT: All interfaces are extracted. [-out]Limits the extraction to interfaces coming out of a diagram or an object if a diagram name or type has not been specified. DEFAULT: All interfaces are extracted. [-list_fmt List Format]Specifies the format for each list item. The format may contain text or the run-time variables $NAME or $TYPE for the interface's name and type respectively. If variables are used, the string must be enclosed in single quotes ('') and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT LIST FORMAT: $NAME ($TYPE)[-oname Object Name]Limits the extraction of interfaces to those attached to the specified object. DEFAULT: Interfaces attached to all objects are extracted. [-otype Object Type]Limits the extraction of interfaces to those attached to the specified object type(s). Multiple object types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CADClass DataProcess"). See through on page through for the valid object types. DEFAULT: Interfaces attached to all types of objects are extracted[-otext]When specified the freetext attached to an object (e.g. Class, Data Process, etc.) is extracted. DEFAULT: No text is extracted. [-dname Diagram Name]Limits the extraction of interfaces to those on the specified diagram. DEFAULT: Interfaces on all diagrams are extracted. [-dtype Diagram Type]Limits the extraction of interfaces to those on the specified diagram type(s). Multiple diagram types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CAD CCD"). See on page for the valid diagram types. DEFAULT: Interfaces on all types of diagrams are extracted. [-dtext]When specified the freetext attached to a diagram is extracted. DEFAULT: No text is extracted. [-dtitle Diagram Title]Specifies the format for the diagram's title. The format may contain text or the run-time variables $NAME or $TYPE for the diagram's name and type respectively. If variables are used, the string must be enclosed in single quotes ('") and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT DIAGRAM TITLE: $NAME ($TYPE) [-orient Diagram Orientation]Specifies the desired orientation of the diagrams in the document. The orientation options are [Portrait | LandScape | BestFit]. DEFAULT ORIENTATION: Portrait[-sl Starting Section Level]Specifies the starting section level (e.g., 1.4 is level 2; 2.2.3.1 is level 4) of the output. If the starting section level is set to zero (0), no section titles are generated for the diagrams. The -sl option works in conjunction with the -cs option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first diagram extracted by if_list is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT STARTING SECTION LEVEL: Zero (0). [-cs]The -cs option works in conjunction -sl option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first object extracted by if_list is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT CURRENT SECTION: First section command is executed[-sect_fmt Section Title Format]Specifies the format for the diagram's section title. The format may contain text or the run-time variables $NAME or $TYPE for the diagram's name and type respectively. If variables are used, the string must be enclosed in single quotes ('") and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT SECTION FORMAT: $NAME ($TYPE)[-header Header File]Specifies a file which contains the master definitions of all component/paragraph definitions for the desired document publishing system. See the HEADER FILES section on page 77. DEFAULT HEADER FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/header.mifDEFAULT FORMAT FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/header.docDEFAULT HEADER FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\header.rtfDEFAULT FORMAT FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\header.rtf[-tags Document System Tags]Specifies the name of a file which contains names of the document publishing system paragraph/component tags used during the utilities execution. See the TAGS FILE section on page 76. DEFAULT TAGS FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/tag_file.txtDEFAULT TAGS FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtDEFAULT TAGS FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\tag_file.txtDEFAULT TAGS FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\tag_file.txt[-input Parameters File]Specifies the name of a Parameters File. The parameters file may contain all or some of the command line options. For more information, see the PARAMETERS FILE section on page 56. DEFAULT: No parameters file. [-verbose]Specifies that informative messages as well as error and warning messages are displayed. DEFAULT: Only error and warning messages are displayed. [-help]The proper syntax for the utility is displayed. TERM1="Utilities" TERM2="if_list" TERM3="diagnostics"TERM1="if_list" TERM2="diagnostics"TERM1="Diagnostics" TERM2="if_list"DIAGNOSTICSThis section identifies and describes all the error and warning messages that may be generated by the if_list utility. Each message is followed by an explanation. ERRORSERROR: A Project must be specified.A Project was not specified on the command line of the utility with the -project option. ERROR: The bad project does not existThe Project, bad, specified with the -project option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A configuration must be specified.A Configuration was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -config option. ERROR: The bad configuration does not existThe Configuration, bad, specified with the -config option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A phase must be specified.A Phase was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -phase option. ERROR: The bad phase does not existThe Phase, bad, specified with the -phase option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A system must be specified.A System was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -system option. ERROR: The bad system does not existThe System, bad, specified with the -system option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: The document publishing system must be specified.A document publishing system was not specified on the command line of the utility with the -dps option. ERROR: The dps option must be ( frame | ileaf ).ERROR: The dps option must be ( msword | rtf ).An invalid document publishing system was specified on the command line of the utility with the -dps option. ERROR: An output file must be specified.An output file was not specified on the command line of the utility with the -output option. ERROR: The extension for an Interleaf output file must be .docERROR: The extension for a Frame output file must be .mifERROR: The extension for an RTF output file must be .rtfERROR: The extension for a MSWord output file must be .docAn invalid extension for a document was specified for the output file using the -output option. -------------------------------------------------------------DocExpress 2.3Error occurred on 03/14/96 at 10:21:00Error occurred in DocExpressDocExpress: Not a valid package file, ...-------------------------------------------------------------ERROR: dps_check_file failed: 65280...The header file specified with the -header command line option of the utility was not valid for the document publishing system (package in the example above) specified with the -dps option. ERROR: bad is an invalid diagram type.The diagram type, specified with the -dtype command line option of the utility, is not a legal diagram type. ERROR: The tag file, bad does not exist.The file, bad, specified with the -tag option, does not exist. ERROR: Unable to open file: nofile.txtThe utility was unable to open the file, nofile.txt. ERROR: The tag file, noread.txt cannot be read.The tag file, noread.txt, specified with the -tag option, could not be read. ERROR: Bad parameter -badThe option, -bad, specified on the command line of the utility is not valid. ERROR: Expected another argumentThe last option on the utilities' command line required a value which was not specified. ERROR: Bad parameter ileafAn invalid option was specified on the utilities' command line. This error may also occur if a previous option required a value which was not specified. In this case, the next option is used as the option's value, thus forcing its value to be interpreted as an option. WARNINGSWARNING: BAD is an invalid type.The Interface type, specified with the -type option, is not a legal interface type. WARNING: BAD is not a valid type.The Object type, specified with the -otype option, is not a legal Object type. WARNING: Invalid section level parameter value: -1Setting section level value to 1The section level number, specified with the -sl option, must be a non-negative number; otherwise, the section level will be set to 1. TERM1="Utilities" TERM2="if_list" TERM3="example"TERM1="if_list" TERM2="example"TERM1="Example" TERM2="if_list"EXAMPLEThe command below will list all interfaces on the Class Communication Diagram named Rental and format the output for Interleaf. $ATAHOME/doc/case_tools/ot/bin/omt/if_list \-project Ot4omtExample -config Ot4omtExample.1 \-phase Analysis.1 -system CoreSystem.1 \-o $HOME/.ata/tmp/if_list.doc -dps ileaf \-dname Rental -dtype CCDThe output from the utility is shown below. FILENAME="01103.tif" ORIGSEQ="9" ORIGTYPE="I" ORIGDOC="../../sources/dx_utils/dxu_utls.fm5.mif"Figure 1. Rental (Class Communication Diagram) 1 create (Communication Message) 2 information (Communication Message) 3 remove (Communication Message) 4 rentProduct (Communication Message) 5 returnProduct (Communication Message) TERM1="if_list" TERM2="extraction combinations"TERM1="Utilities" TERM2="if_list" TERM3="extraction combinations"Extraction CombinationsThe various combinations of interfaces, Objects and diagrams to extract and how they are extracted by this utility are identified and described in the tables of this section. Each table contains a description of information that may be extracted and the applicable parameter values. Interface Extraction CombinationsInterfaces may be listed by themselves. identifies and describes the various combinations for listing interfaces. through identify and describe the valid interface types that may be specified for the -type option. COLS="3"COLNAME="1" COLWIDTH="24p"COLNAME="2" COLWIDTH="361p"COLNAME="3" COLWIDTH="61p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Lists all interfaces of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Lists all interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"Interface and Object Extraction CombinationsObjects (e.g., Classes, Processes, etc.) may be extracted along with listing the interfaces. identifies and describes the information that may be extracted for interfaces and objects and the appropriate parameter values. through identify and describe the valid interface types that may be specified for the -type option. through identifies and describes the valid Object types that may be specified for the -type option. COLS="5"COLNAME="1" COLWIDTH="15p"COLNAME="2" COLWIDTH="285p"COLNAME="3" COLWIDTH="40p"COLNAME="4" COLWIDTH="57p"COLNAME="5" COLWIDTH="49p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="5" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects of the specified name and type that have interfaces of the specified type and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects of the specified name and type that have interfaces and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects of the specified type that have interfaces of the specified type and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects of the specified type that have interfaces and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects of the specified name and type that have interfaces of the specified type and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all objects of the specified name that have interfaces and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"Interface and Diagram Extraction CombinationsDiagrams may also be extracted along with listing the interfaces. Diagrams that contain the desired interfaces are extracted first, followed by the a listing of the appropriate interfaces. identifies and describes the information that may be extracted for the diagram, and interface parameter values. through identify and describe the valid interface types that may be specified for the -type option. identifies and describes the valid diagram types that may be specified for the -dtype option. COLS="5"COLNAME="1" COLWIDTH="13p"COLNAME="2" COLWIDTH="267p"COLNAME="3" COLWIDTH="57p"COLNAME="4" COLWIDTH="58p"COLNAME="5" COLWIDTH="49p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"-dnameCOLNAME="5" VALIGN="TOP" MOREROWS="0"-dtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name which have interfaces and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"Both Diagrams and Objects may be extracted along with listing the interfaces. Diagrams that contain the desired Objects are extracted first, followed by the applicable objects on the diagram and finally a listing of the appropriate interfaces. identifies and describes the information that may be extracted for diagrams, interfaces and objects and the appropriate parameter values. through identify and describe the valid interface types that may be specified for the -type option. identifies and describes the valid diagram types that may be specified for the -dtype option. through identifies and describes the valid Object types that may be specified for the -otype option. Interface, object and diagram extraction combinations COLS="7"COLNAME="1" COLWIDTH="25p"COLNAME="2" COLWIDTH="145p"COLNAME="3" COLWIDTH="70p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="46p"COLNAME="6" COLWIDTH="54p"COLNAME="7" COLWIDTH="46p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="5" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="6" VALIGN="TOP" MOREROWS="0"-dnameCOLNAME="7" VALIGN="TOP" MOREROWS="0"-dtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects with the specified name and type are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects with the specified name and type are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects of the specified type are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects of the specified type are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects with the specified name are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects of the specified name are found. Also, extracts the objects and lists all interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type and all objects on the diagrams which have interfaces and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"10COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects with the specified name and type are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"11COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects of the specified name and type are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"12COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects with the specified type are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"13COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects with the specified type are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"14COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects with the specified name are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"15COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects of the specified name are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"16COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"17COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"18COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified name and type are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"18COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified name and type are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"19COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified type are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"20COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified type are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"21COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified name are found that have interfaces of the specified type. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"22COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified name are found that have interfaces. Also, extracts the objects and lists the interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"TERM1="Utilities" TERM2="if_tbl"ID="34453"if_tblNAMEif_tbl name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extracts the names and specific properties of interfaces (e.g., Data Flow, Communication Message, etc.) from the ObjectTeam database and formats the information as tables. LOCATIONif_tbl and associated files are located in: OMT$ATAHOME/doc/case_tools/ot/bin/omtUML$ATAHOME/doc/case_tools/ot/bin/umlSYNOPSISif_tbl -output Output File -dps documentation_system [-project Project Name] [-config Configuration Name] [-phase Phase Name] [-system System Name] [-type Interface Type] [-range Name Range] [-internal] [-external] [-in] [-out] [-oname Object Name] [-otype Object Type] [-dname Diagram Name] [-dtype Diagram Type] [-tbldef Table Definition] [-format Format File] [-header Header File] [-tags Document System Tags] [-input Parameters File] [-verbose] [-help]DESCRIPTIONif_tbl extracts interface (e.g., Data Flow, Communication Message, etc.) and their associated characteristics (e.g., Name, Source, etc.) and formats the information as a table (see the EXAMPLE section below). The interface characteristics to extract are specified in a format file (see the FORMAT FILES section below). Extraction of interfaces may be restricted by the diagram(s) on which they reside, the Objects to which they attach, external interfaces only (i.e., interfaces attached to an Actor), internal interfaces only (i.e., interfaces not attached to an Actor), as well as other restrictions (see the EXTRACTION COMBINATIONS section below). The extracted information may be formatted as Interleaf, FrameMaker, RTF, or MSWord tables. The information for each interface is placed in a separate two column table. The titles for the characteristics are placed in the left column and the values of these characteristics are placed in the right column. The titles for the characteristics may be specified in the tables definition file (see the TABLE DEFINITION section below). OPTIONS-output Output File Specifies the file where the output of this utility will be directed. The output file should have an appropriate suffix for the document publishing system (i.e., mif for FrameMaker, doc for Interleaf and MSWord and rtf for RTF). -dps Document Publishing SystemSpecifies the document publishing system in which the output is to be viewed. The markup specific to this system is generated. The choices available for this option are [frame|ileaf] on UNIX and [msword|rtf] on Windows. [-project Project Name]Specifies the name of the desired Project. DEFAULT: Taken from the M4_levelpath environment variable. [-config Configuration Name]Specifies the name of the desired Configuration for the Project. Specified as configuration_name.version_number (e.g., Ot4omtExample.1). DEFAULT: Taken from the M4_levelpath environment variable. [-phase Phase Name]Specifies the name of the desired Phase for the Configuration Version. Specified as phase_name.version_number (i.e., Analysis.1). DEFAULT: Taken from the M4_levelpath environment variable. [-system System Name]Specifies the name of the desired System within the Phase. Specified as system_name.version_number (e.g., CoreSystem.1). DEFAULT: Taken from the M4_levelpath environment variable. [-type Interface Type]Specifies the type or types of interfaces desired. Multiple interface types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "DataFlow ControlFlow"). See through on page through for the valid interface types. DEFAULT: All interface types. [-range Name Range]Limits the extraction of interfaces to those whose name falls within the specified range. For example, specifying a-m, limits the extraction of interfaces to those whose name starts with a letter between a and m inclusive. Case is ignored. DEFAULT: All interfaces are extracted. [-internal]Limits the extraction to internal interfaces (i.e., those not attached to an Actor). DEFAULT: All interfaces are extracted. [-external]Limits the extraction to external interfaces (i.e., those attached to an Actor). DEFAULT: All interfaces are extracted. [-in]Limits the extraction to interfaces coming into a diagram or an object if a diagram name or type has not been specified. DEFAULT: All interfaces are extracted. [-out]Limits the extraction to interfaces coming out of a diagram or an object if a diagram name or type has not been specified. DEFAULT: All interfaces are extracted. [-oname Object Name]Limits the extraction of interfaces to those attached to the specified object. DEFAULT: Interfaces attached to all objects are extracted. [-otype Object Type]Limits the extraction of interfaces to those attached to the specified object type(s). Multiple object types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CADClass DataProcess"). See through on page through for the valid object types. DEFAULT: Interfaces attached to all types of objects are extracted. [-dname Diagram Name]Limits the extraction of interfaces to those on the specified diagram. DEFAULT: Interfaces on all diagrams are extracted. [-dtype Diagram Type]Limits the extraction of interfaces to those on the specified diagram type(s). Multiple diagram types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CAD CCD"). See on page for the valid diagram types. DEFAULT: Interfaces on all types of diagrams are extracted. [-tbldef Table Definition]Specifies the name of a file which contains the data element's table definition. See the TABLE DEFINITION section on page 98. DEFAULT TABLE DEFINITIONS: FrameMaker$ATAHOME/doc/case_tools/ot/frame/dd_tbl.txtDEFAULT TABLE DEFINITIONS: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/dd_tbl.txtDEFAULT TABLE DEFINITIONS: MSWord%ATAHOME%\doc\ctools\ot\msword\dd_tbl.txtDEFAULT TABLE DEFINITIONS: RTF%ATAHOME%\doc\ctools\ot\rtf\dd_tbl.txt[-format Format File]Permits the user to specify the name of a file which contains the names of attributes for the data elements. See the FORMAT FILES section on page 96. DEFAULT FORMAT FILE: $ATAHOME/doc/case_tools/ot/format_files/omt/dde.fmt[-header Header File]Specifies a file which contains the master definitions of all component/paragraph definitions for the desired document publishing system. See the HEADER FILES section on page 99. DEFAULT HEADER FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/header.mifDEFAULT HEADER FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/header.docDEFAULT HEADER FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\header.rtfDEFAULT HEADER FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\header.rtf[-tags Document System Tags]Specifies the name of a file which contains names of the document publishing system paragraph/component tags used during the utilities execution. See the TAGS FILE section on page 98. DEFAULT TAGS FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/tag_file.txtDEFAULT TAGS FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtDEFAULT TAGS FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\tag_file.txtDEFAULT TAGS FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\tag_file.txt[-input Parameters File]Specifies the name of a Parameters File. The parameters file may contain all or some of the command line options. For more information, see the PARAMETERS FILE section on page 86. DEFAULT: No parameters file. [-verbose]Specifies that informative messages as well as error and warning messages are displayed. DEFAULT: Only error and warning messages are displayed. [-help]The proper syntax for the utility is displayed. TERM1="Utilities" TERM2="if_tbl" TERM3="diagnostics"TERM1="if_tbl" TERM2="diagnostics"TERM1="Diagnostics" TERM2="if_tbl"DIAGNOSTICSThis section identifies and describes all the error and warning messages that may be generated by the if_tbl utility. Each message is followed by an explanation. ERRORSERROR: A Project must be specified.A Project was not specified on the command line of the utility with the -project option. ERROR: The bad project does not existThe Project, bad, specified with the -project option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A configuration must be specified.A Configuration was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -config option. ERROR: The bad configuration does not exist.The Configuration, bad, specified with the -config option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A phase must be specified.A Phase was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -phase option. ERROR: The bad phase does not existThe Phase, bad, specified with the -phase option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A system must be specified.A System was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -system option. ERROR: The bad system does not existThe System, bad, specified with the -system option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: The document publishing system must be specified.A document publishing system was not specified on the command line of the utility with the -dps option. ERROR: The dps option must be ( frame | ileaf ).ERROR: The dps option must be ( msword | rtf ).An invalid document publishing system was specified on the command line of the utility with the -dps option. ERROR: An output file must be specified.An output file was not specified on the command line of the utility with the -output option. ERROR: The extension for an Interleaf output file must be .docERROR: The extension for a Frame output file must be .mifERROR: The extension for an RTF output file must be .rtfERROR: The extension for an MSWord output file must be .docAn invalid extension for a document was specified for the output file using the -output option. -------------------------------------------------------------DocExpress 2.3Error occurred on 03/14/96 at 10:21:00Error occurred in DocExpressDocExpress: Not a valid package file, ... -------------------------------------------------------------ERROR: dps_check_file failed: 65280..The header file specified with the -header command line option of the utility was not valid for the document publishing system (package in the example above) specified with the -dps option. ERROR: bad is an invalid diagram type.The diagram type, specified with the -dtype command line option of the utility, is not a legal diagram type. ERROR: The tag file, bad does not exist.The file, bad, specified with the -tag option, does not exist. ERROR: Unable to open file: nofile.txtThe utility was unable to open the file, nofile.txt. ERROR: Bad parameter -badThe option, -bad, specified on the command line of the utility is not valid. ERROR: Expected another argumentThe last option on the utilities' command line required a value which was not specified. WARNINGSWARNING: BAD is an invalid type.The Interface type, specified with the -type option, is not a legal interface type. WARNING: BAD is not a valid type.The Object type, specified with the -otype option, is not a legal Object type. TERM1="Utilities" TERM2="if_tbl" TERM3="example"TERM1="if_tbl" TERM2="example"TERM1="Example" TERM2="if_tbl"EXAMPLEThe command below will generate tables for interfaces coming into an Actor on a Class Communication Diagram. $ATAHOME/doc/case_tools/ot/bin/omt/if_tbl \-project Ot4omtExample -config Ot4omtExample.1 \-phase Analysis.1 -system CoreSystem.1 \-o $HOME/.ata/tmp/if_tbl/if_tbl.doc -dps ileaf \-otype CCDActor -dtype CCD -inThe output from the utility is shown below. information (Communication Message)COLS="2"COLNAME="1" COLWIDTH="138p"COLNAME="2" COLWIDTH="310p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"informationCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication MessageCOLNAME="1" VALIGN="TOP" MOREROWS="0"TextCOLNAME="2" VALIGN="TOP" MOREROWS="0" COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Product ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"DestinationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Clerk ActorrentProduct (Communication Message)COLS="2"COLNAME="1" COLWIDTH="138p"COLNAME="2" COLWIDTH="310p"COLNAME="1" VALIGN="TOP" MOREROWS="0"AttributeCOLNAME="2" VALIGN="TOP" MOREROWS="0"ValueCOLNAME="1" VALIGN="TOP" MOREROWS="0"NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"rentProductCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Communication MessageCOLNAME="1" VALIGN="TOP" MOREROWS="0"TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"Description of the "rent Product" function:The Product is registered as rented by the member.All attributes of the Rental must be filled in.COLNAME="1" VALIGN="TOP" MOREROWS="0"SourceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Member ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"DestinationCOLNAME="2" VALIGN="TOP" MOREROWS="0"Clerk ActorTERM1="if_tbl" TERM2="extraction combinations"TERM1="Utilities" TERM2="if_tbl" TERM3="extraction combinations"Extraction combinationsThe various combinations of interfaces, objects and diagrams to extract and how they are extracted by this utility are identified and described in the tables of this section. Each table contains a description of information that may be extracted and the applicable parameter values. Interface Extraction CombinationsInterfaces may be extracted by themselves. describes the various combination for extracting interfaces. through identifies and describes the valid interface types that may specified for the -type option. COLS="3"COLNAME="1" COLWIDTH="19p"COLNAME="2" COLWIDTH="379p"COLNAME="3" COLWIDTH="48p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces with the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"Interface and Object Extraction CombinationsThe interfaces output may also be restricted by the Objects (e.g., Classes, Processes, etc.) to which they are connected. describes the tables that may be generated for combinations of interface types and object names and types. through identifies and describes the valid interface types that may specified for the -type option. through identifies and describes the valid Object types that may be specified for the -otype option. COLS="5"COLNAME="1" COLWIDTH="19p"COLNAME="2" COLWIDTH="282p"COLNAME="3" COLWIDTH="48p"COLNAME="4" COLWIDTH="55p"COLNAME="5" COLWIDTH="40p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="5" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces with the specified type of all objects of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of all objects of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces with the specified type of all objects of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of all objects of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces with the specified type of all objects of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of all objects of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"Interface and Diagram Extraction CombinationsDiagrams may also restrict the generation of the interface tables. describes the tables that may be generated for combinations of interface types, and diagram names and types. through identifies and describes the valid interface types that may be specified for the -type option. identifies and describes the valid diagram types that may be specified for the -dtype option. COLS="5"COLNAME="1" COLWIDTH="19p"COLNAME="2" COLWIDTH="279p"COLNAME="3" COLWIDTH="48p"COLNAME="4" COLWIDTH="54p"COLNAME="5" COLWIDTH="45p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"-dnameCOLNAME="5" VALIGN="TOP" MOREROWS="0"-dtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type on diagrams of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces on diagrams of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"Both Diagrams and Objects may restrict the generation of the interface tables. describes the tables that may be generated for combinations of interface types, diagram names and types, and Object names and types. through identifies and describes the valid interface types that may be specified for the -type option. through identifies and describes the valid Object types that may be specified for the -otype option. identifies and describes the valid diagram types that may be specified for the -dtype option. Interface, Object and Diagram Extraction CombinationsCOLS="7"COLNAME="1" COLWIDTH="24p"COLNAME="2" COLWIDTH="151p"COLNAME="3" COLWIDTH="43p"COLNAME="4" COLWIDTH="60p"COLNAME="5" COLWIDTH="52p"COLNAME="6" COLWIDTH="60p"COLNAME="7" COLWIDTH="52p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="5" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="6" VALIGN="TOP" MOREROWS="0"-dnameCOLNAME="7" VALIGN="TOP" MOREROWS="0"-dtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects with the specified name and type on diagrams of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects with the specified name and type on diagrams of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects of the specified type on diagrams of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects of the specified type on diagrams of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects with the specified name on diagrams of the specified name and type are found that have interfaces. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects of the specified name on diagrams of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects with the specified name and type on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects of the specified name and type on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"9COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects with the specified type on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"10COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects with the specified type on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"11COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects with the specified name on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"12COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects of the specified name on diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="7" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"13COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects of the specified name and type on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"14COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects of the specified name on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"15COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects of the specified type on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"16COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects of the specified type on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"typeCOLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"17COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces of the specified type for objects of the specified name on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"typeCOLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"18COLNAME="2" VALIGN="TOP" MOREROWS="0"Generates tables for all interfaces for objects of the specified name on diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"nameCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"nameCOLNAME="7" VALIGN="TOP" MOREROWS="0"TERM1="Utilities" TERM2="if_tbl" TERM3="format files"TERM1="if_tbl" TERM2="format files"FORMAT FILESTERM1="Format Files" TERM2="Interface" TERM3="if_tbl"The format file defines which characteristics of the interfaces should be included in the table and in what order they should appear. The keywords that define these characteristics are identified and described in below. COLS="2"COLNAME="1" COLWIDTH="120p"COLNAME="2" COLWIDTH="328p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"DESTINATIONCOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the Object's destination (Interfaces only). COLNAME="1" VALIGN="TOP" MOREROWS="0"NAMECOLNAME="2" VALIGN="TOP" MOREROWS="0"The Object's name. COLNAME="1" VALIGN="TOP" MOREROWS="0"PROPERTY:nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"The Object's Property with the specified Property name. COLNAME="1" VALIGN="TOP" MOREROWS="0"SOURCECOLNAME="2" VALIGN="TOP" MOREROWS="0"The name of the Object's source (Interfaces only).COLNAME="1" VALIGN="TOP" MOREROWS="0"TEXTCOLNAME="2" VALIGN="TOP" MOREROWS="0"The freetext attached to the Object. COLNAME="1" VALIGN="TOP" MOREROWS="0"TYPECOLNAME="2" VALIGN="TOP" MOREROWS="0"The Object's type. Keywords should be followed by a colon (:). Blank lines and comment lines (lines that begin with a pound sign '#') in the format file are ignored. All other lines must contain valid keywords. The table definitions file may be used to define aspects of the table such as its Title or column sizes (see the TABLE DEFINITIONS section on page 97). If row titles are not defined in the table definitions file, the keywords of the format file are used for the row's titles. The format file may be customized. The default format file is described in the section below. To customize the file, first copy it into a working directory. Modify the file as necessary and then specify its path using the -format option. DEFAULT FORMAT FILEThe default format file for interfaces is located in $ATAHOME/doc/case_tools/ot/format_files and is shown in below. COLS="2"COLNAME="1" COLWIDTH="157p"COLNAME="2" COLWIDTH="286p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Format File NameCOLNAME="2" VALIGN="TOP" MOREROWS="0"ContentsCOLNAME="1" VALIGN="TOP" MOREROWS="0"interface.fmtCOLNAME="2" VALIGN="TOP" MOREROWS="0"NAME:TYPE:TEXT:SOURCE:DESTINATION:TERM1="Utilities" TERM2="object_list"ID="36877"object_listNAMEobject_list name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extracts the names and optionally types of any ObjectTeam object (e.g., Class, Data Process, etc.) from the ObjectTeam database and formats the information as a list. LOCATIONobject_list is located in:OMT$ATAHOME/doc/case_tools/ot/bin/omtUML$ATAHOME/doc/case_tools/ot/bin/umlSYNOPSISobject_list -output Output File -dps Document Publishing System [-project Project Name] [-config Configuration Name] [-phase Phase Name] [-system System Name] [-oname Object Name] [-otype Object Type] [-list_fmt List Format] [-dname Diagram Name] [-dtype Diagram Type] [-dtext] [-dtitle Diagram Title] [-orient Diagram Orientation] [-sl Starting Section Level] [-cs] [-sect_fmt Section Title Format] [-header Header File] [-tags Document System Tags] [-input Parameters File] [-verbose] [-help]DESCRIPTIONobject_list extracts the names and optionally the types of Objects (e.g., Class, Data Process, etc.) for a given project, configuration, phase, and system. Diagrams on which the Objects reside may be extracted along with a list of the Objects (see the EXAMPLE section on page 108). Diagrams may be output in their own sections along with their textual descriptions. The starting section level is specified with the -sl option and works in conjunction with the -cs option (see these options in the OPTIONS section below). The extraction of Objects may be restricted by the Object's name or type, or the diagram's name or type on which the Objects reside (see the EXTRACTION COMBINATIONS section on page 110). The information may be formatted for Interleaf, FrameMaker, RTF or MSWord. OPTIONS-output Output File Specifies the file where the output of this utility will be directed. The output file should have an appropriate suffix for the document publishing system (i.e., mif for FrameMaker, doc for Interleaf and MSWord, and rtf for RTF). -dps Document Publishing SystemSpecifies the document publishing system in which the output is to be viewed. The markup specific to this system is generated. The choices available for this option are [frame|ileaf] on UNIX and [msword|rtf] on Windows. [-project Project Name]Specifies the name of the desired Project. DEFAULT: Taken from the M4_levelpath environment variable. [-config Configuration Name]Specifies the name of the desired Configuration for the Project. Specified as configuration_name.version_number (e.g., Ot4omtExample.1). DEFAULT: Taken from the M4_levelpath environment variable. [-phase Phase Name]Specifies the name of the desired Phase for the Configuration Version. Specified as phase_name.version_number (i.e., Analysis.1). DEFAULT: Taken from the M4_levelpath environment variable. [-system System Name]Specifies the name of the desired System within the Phase. Specified as system_name.version_number (e.g., CoreSystem.1). DEFAULT: Taken from the M4_levelpath environment variable. [-oname Object Name]Limits the extraction of interfaces to those attached to the specified object. DEFAULT: Interfaces attached to all objects are extracted. [-otype Diagram Type]Limits the extraction of interfaces to those attached to the specified object type(s). Multiple object types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CADClass DataProcess"). See through on page through for the valid object types. DEFAULT: Interfaces attached to all types of objects are extracted. [-list_fmt List Format]Specifies the format for each list item. The format may contain text or the run-time variables $NAME or $TYPE for the interface's name and type respectively. If variables are used, the string must be enclosed in single quotes ('') and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT LIST FORMAT: $NAME ($TYPE)[-dname Diagram Name]Limits the extraction of interfaces to those on the specified diagram. DEFAULT: Interfaces on all diagrams are extracted. [-dtype Diagram Type]Limits the extraction of interfaces to those on the specified diagram type(s). Multiple diagram types may be specified by placing all types within double quotes ("") and separating each type by a space (e.g., "CAD CCD"). See on page for the valid diagram types. DEFAULT: Interfaces on all types of diagrams are extracted. [-dtext]When specified the freetext attached to a diagram is extracted. DEFAULT: No text is extracted. [-dtitle Diagram Title]Specifies the format for the diagram's title. The format may contain text or the run-time variables $NAME or $TYPE for the diagram's name and type respectively. If variables are used, the string must be enclosed in single quotes ('') and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT DIAGRAM FORMAT: $NAME ($TYPE)[-orient Diagram Orientation]Specifies the desired orientation of the diagrams in the document. The orientation options are [Portrait | LandScape | BestFit]. DEFAULT ORIENTATION: Portrait[-sl Starting Section Level]Specifies the starting section level (e.g., 1.4 is level 2; 2.2.3.1 is level 4) of the output. If the starting section level is set to zero (0), no section titles are generated for the diagrams. The -sl option works in conjunction with the -cs option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first diagram extracted by object_list is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT STARTING SECTION LEVEL: Zero (0). [-cs]The -cs option works in conjunction -sl option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first object extracted by object_list is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT CURRENT SECTION: First section command is executed. [-sect_fmt Section Title Format]Specifies the format for the diagram's section title. The format may contain text or the run-time variables $NAME or $TYPE for the diagram's name and type respectively. If variables are used, the string must be enclosed in single quotes ('') and a backslash (\) placed before the dollar sign ($) (e.g., '\$NAME [\$TITLE]'). DEFAULT SECTION FORMAT: $NAME ($TYPE)[-header Header File]Specifies a file which contains the master definitions of all component/paragraph definitions for the desired document publishing system. See the HEADER FILES section on page 115. DEFAULT HEADER FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/header.mifDEFAULT HEADER FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/header.docDEFAULT HEADER FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\header.rtfDEFAULT HEADER FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\header.rtf[-tags Document System Tags]Specifies the name of a file which contains names of the document publishing system paragraph/component tags used during the utilities execution. See the TAGS FILE section on page 113. DEFAULT TAGS FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/tag_file.txtDEFAULT TAGS FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtDEFAULT TAGS FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\tag_file.txtDEFAULT TAGS FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\tag_file.txt[-input Parameters File]Specifies the name of a Parameters File. The parameters file may contain all or some of the command line options. For more information, see the PARAMETERS FILE section on page 109. DEFAULT: No parameters file. [-verbose]Specifies that informative messages as well as error and warning messages are displayed. DEFAULT: Only error and warning messages are displayed. [-help]The proper syntax for the utility is displayed. TERM1="Utilities" TERM2="object_list" TERM3="diagnostics"TERM1="object_list" TERM2="diagnostics"TERM1="Diagnostics" TERM2="object_list"DIAGNOSTICSThis section identifies and describes all the error and warning messages that may be generated by the object_list utility. Each message is followed by an explanation. ERRORSERROR: A Project must be specified.A Project was not specified on the command line of the utility with the -project option. ERROR: A Project must be specified.The Project, bad, specified with the -project option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A configuration must be specified.A Configuration was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -config option. ERROR: The bad configuration does not existThe Configuration, bad, specified with the -config option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A phase must be specified.A Phase was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -phase option. ERROR: The bad phase does not existThe Phase, bad, specified with the -phase option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A system must be specified.A System was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -system option. ERROR: The bad system does not existThe System, bad, specified with the -system option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: The document publishing system must be specified.A document publishing system was not specified on the command line of the utility with the -dps option. ERROR: The dps option must be ( frame | ileaf ).ERROR: The dps option must be ( msword | rtf ).An invalid document publishing system was specified on the command line of the utility with the -dps option. ERROR: An output file must be specified.An output file was not specified on the command line of the utility with the -output option. ERROR: The extension for an Interleaf output file must be .docERROR: The extension for a Frame output file must be .mifERROR: The extension for an RTF output file must be .rtfERROR: The extension for a MSWord output file must be .docAn invalid extension for a document was specified for the output file using the -output option. -------------------------------------------------------------DocExpress 2.3Error occurred on 03/14/96 at 10:21:00Error occurred in DocExpressDocExpress: Not a valid package file, ...-------------------------------------------------------------ERROR: dps_check_file failed: 65280...The header file specified with the -header command line option of the utility was not valid for the document publishing system (package in the example above) specified with the -dps option. ERROR: bad is an invalid diagram type.The diagram type, specified with the -dtype command line option of the utility, is not a legal diagram type. ERROR: The tag file, bad does not exist.The file, bad, specified with the -tag option, does not exist. ERROR: Unable to open file: nofile.txtThe utility was unable to open the file, nofile.txt. ERROR: The tag file, noread.txt cannot be read.The tag file, noread.txt, specified with the -tag option, could not be read. ERROR: Bad parameter -badThe option, -bad, specified on the command line of the utility is not valid. ERROR: Expected another argumentThe last option on the utilities' command line required a value which was not specified. WARNINGSWARNING: BAD is not a valid type.The Object type, specified with the -otype command line option of the utility, is not a legal Object type. WARNING: Invalid section level parameter value: -1Setting section level value to 1The section level number, specified with the -sl option, must be a non-negative number; otherwise, the section level will be set to 1. TERM1="Utilities" TERM2="object_list" TERM3="example"TERM1="object_list" TERM2="example"TERM1="Example" TERM2="object_list"EXAMPLEThe command below will list all Communication Messages on the Class Communication Diagram named Rental and format the output for Interleaf. $ATAHOME/doc/case_tools/ot/bin/object_list \-project Ot4omtExample -config Ot4omtExample.1 \-phase Analysis.1 -system CoreSystem.1 \-o $HOME/.ata/tmp/object_list/object_list.doc -dps ileaf \-otype ComMessage -dname Rental -dtype CCDThe output from the utility is shown below. FILENAME="01104.tif" ORIGSEQ="17" ORIGTYPE="I" ORIGDOC="../../sources/dx_utils/dxu_utls.fm5.mif"Figure 2. Rental (Class Communication Diagram) 1 create (Communication Message) 2 information (Communication Message) 3 remove (Communication Message) 4 rentProduct (Communication Message) 5 returnProduct (Communication Message) TERM1="object_list" TERM2="extraction combinations"TERM1="Utilities" TERM2="object_list" TERM3="extraction combinations"EXTRACTION COMBINATIONSThe various combinations of Objects and diagrams to list and extract using this utility are identified and described in the tables of this section. Each table contains a description of the information that may be listed or extracted and the applicable parameter values. Object Extraction CombinationsThe list of Objects may be restricted by name or type. All Objects are extracted by default when no values are specified for any of the -oname, -otype, -dname, and -dtype options. identifies and describes various combinations for listing Objects with the -oname and -otype options. through identifies and describes the valid Object types that may be specified for the -otype option. COLS="4"COLNAME="1" COLWIDTH="16p"COLNAME="2" COLWIDTH="316p"COLNAME="3" COLWIDTH="61p"COLNAME="4" COLWIDTH="52p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="4" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Lists all objects with the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Lists all objects with the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Lists all objects of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Lists all objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"Object and Diagram Extraction CombinationsDiagrams may be extracted along with listing the Objects. Diagrams that contain the desired Objects are extracted first, followed by a listing of the Objects on the diagram. identifies and describes the information that may be extracted for combinations of the -oname, -otype, -dname, and -dtype options. identifies and describes the valid diagram types that may be specified for the -dtype option. through identifies and describes the valid Object types that may be specified for the -otype option. COLS="6"COLNAME="1" COLWIDTH="21p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="57p"COLNAME="4" COLWIDTH="49p"COLNAME="5" COLWIDTH="57p"COLNAME="6" COLWIDTH="49p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="4" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="5" VALIGN="TOP" MOREROWS="0"-dnameCOLNAME="6" VALIGN="TOP" MOREROWS="0"-dtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects with the specified name and type are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects of the specified name are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type on which objects of the specified type are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"4COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and type and all objects on the diagrams and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"5COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified name and type are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"6COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified name are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"7COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name on which objects of the specified type are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"8COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified name and lists all objects on the diagrams. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"nameCOLNAME="6" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"9COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects of the specified name and type are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"10COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects of the specified name on are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"11COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type on which objects of the specified type are found and lists the objects. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"12COLNAME="2" VALIGN="TOP" MOREROWS="0"Extracts all diagrams of the specified type and lists all objects on the diagrams. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="5" VALIGN="TOP" MOREROWS="0"COLNAME="6" VALIGN="TOP" MOREROWS="0"typeTERM1="Utilities" TERM2="parse_omt"ID="12240"parse_omtNAMEparse_omt name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extracts a set of related information for the Object Model, Dynamic Model, and Functional Model from the ObjectTeam database. LOCATIONparse_omt is located in: $ATAHOME/doc/case_tools/ot/bin/omtSYNOPSISparse_omt -output Output File -dps Document Publishing System [-project Project Name] [-config Configuration Name] [-phase Phase Name] [-system System Name] [-oname Starting Object Name] [-otype Starting Object Type] [-dname Starting Diagram Name] [-dtype Starting Diagram Type] [-format Starting Format File] [-sl Starting Section Level] [-cs] [-header Header File] [-tags Document System Tags] [-input Parameters File] [-verbose] [-help]DESCRIPTIONThis utility is capable of extracting any set of related information for the Object Model, Dynamic Model, and Functional Model. For example, a set may include all Classes on all Class Communication Diagrams and the State Transition Diagrams related to the Classes. What information is extracted and in what order is specified by format files (see the FORMAT FILES section on page 131) in conjunction with command line options. The -otype and -dtype options specify the type of the starting Objects or Diagrams. The -format option specifies the format file for this starting Object or Diagram type. A specific starting Object or Diagram may be specified with the -oname or -dname options (see the EXTRACTION COMBINATIONS section on page 128). Section titles may be generated for any of the extracted objects (e.g., Classes, Data Processes, Diagrams, etc.). The starting section level is specified with the -sl option and works in conjunction with the -cs option (see these options in the OPTIONS section below). In addition, any Property (e.g., freetext) associated with an object may also be extracted. A figure title is automatically generated by DocExpress for each diagram extracted. The figure's title may be composed of the diagram's name and optionally its type. The figure title's format is specified in the appropriate format file for the diagram type (see the FORMAT FILES section on page 131). The information may be formatted for Interleaf, FrameMaker, RTF, or MSWord. OPTIONS-output Output File Specifies the file where the output of this utility will be directed. The output file should have an appropriate suffix for the document publishing system (i.e., mif for FrameMaker, doc for Interleaf and MSWord, and rtf for RTF). -dps Document Publishing SystemSpecifies the document publishing system in which the output is to be viewed. The markup specific to this tool is generated. The choices available for this option are [frame|ileaf] on UNIX and [msword|rtf] on Windows. [-project Project Name]Specifies the name of the desired project. DEFAULT: Taken from the M4_levelpath environment variable. [-config Configuration Name]Specifies the desired Configuration Version for the Project. Specified as configuration_name.version_number (e.g., Ot4omtExample.1). DEFAULT: Taken from the M4_levelpath environment variable. [-phase Phase Name]Specifies the name of the desired Phase for the Configuration Version. Specified as phase_name.version_number (i.e., Analysis.1). DEFAULT: Taken from the M4_levelpath environment variable. [-system System Name]Specifies the name of the desired System within the Phase. Specified as system_name.version_number (e.g., CoreSystem.1). DEFAULT: Taken from the M4_levelpath environment variable. [-oname Starting Object Name]Specifies the name of the object at which to start the parsing. This option cannot be specified without the -otype. If -oname and -otype or just -otype is specified, -dname and -dtype are ignored. DEFAULT (otype specified): All objects of the specified type are parsed. [-otype Starting Object Type]Specifies the type of the object at which to start the parsing. If -oname and -otype or just -otype is specified, -dname and -dtype are ignored. See through on page through for valid object types. DEFAULT (oname specified): Parsing starts with the specified object. [-dname Starting Diagram Name]Specifies the name of the diagram at which to start the parsing. This option cannot be specified without the -dtype option. DEFAULT (dtype specified): All diagrams of the specified type are parsed. [-dtype Starting Diagram Type]Specifies the starting diagram type. See on page for the valid diagram types. DEFAULT (dname specified): Parsing starts with the specified diagram. [-format Starting Format File]Specifies the starting format file. See the FORMAT FILES section on page 131. DEFAULT FORMAT: Selects the appropriate format file for the Object or Diagram type specified by -otype or -dtype respectively. If neither -otype nor -dtype were specified, the system format file is selected. [-sl Starting Section Level]Specifies the starting section level (e.g., 1.4 is level 2; 2.2.3.1 is level 4) of the output. The -sl option works in conjunction with the -cs option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first diagram extracted by parse_omt is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT STARTING SECTION LEVEL: One (1). [-cs]The -cs option works in conjunction -sl option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first object extracted by parse_omt is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT CURRENT SECTION: First section command is executed. [-header Header File]Specifies a file which contains the master definitions of all component/paragraph definitions for the desired document publishing system. See the HEADER FILES section on page 176. DEFAULT HEADER FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/header.mifDEFAULT HEADER FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/header.docDEFAULT HEADER FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\header.rtfDEFAULT HEADER FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\header.rtf[-tags Document System Tags]Specifies the name of a file which contains names of the document publishing system paragraph/component tags used during the utilities execution. See the TAGS FILE section on page 174. DEFAULT TAGS FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/tag_file.txtDEFAULT TAGS FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtDEFAULT TAGS FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\tag_file.txtDEFAULT TAGS FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\tag_file.txt[-input Parameters File]Specifies the name of a Parameters File. The parameters file may contain all or some of the command line options. For more information, see the PARAMETERS FILE section on page 128. DEFAULT: No parameters file. [-verbose]Specifies that informative messages as well as error and warning messages are displayed. DEFAULT: Only error and warning messages are displayed. [-help]The proper syntax for the utility is displayed. TERM1="Utilities" TERM2="parse_omt" TERM3="diagnostics"TERM1="parse_omt" TERM2="diagnostics"TERM1="Diagnostics" TERM2="parse_omt"DIAGNOSTICSThis section identifies and describes all the error and warning messages that may be generated by the parse_omt utility. Each message is followed by an explanation. ERRORSERROR: A Project must be specified.A Project was not specified on the command line of the utility with the -project option. ERROR: The bad project does not existThe Project, bad, specified with the -project option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A configuration must be specified.A Configuration was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -config option. ERROR: The bad configuration does not existThe Configuration, bad, specified with the -config option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A phase must be specified.A Phase was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -phase option. ERROR: The bad phase does not existThe Phase, bad, specified with the -phase option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A system must be specified.A System was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -system option. ERROR: The bad system does not existThe System, bad, specified with the -system option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: The document publishing system must be specified.A document publishing system was not specified on the command line of the utility with the -dps option. ERROR: The dps option must be ( frame | ileaf ).ERROR: The dps option must be ( msword | rtf ).An invalid document publishing system was specified on the command line of the utility with the -dps option. ERROR: An output file must be specified.An output file was not specified on the command line of the utility with the -output option. ERROR: The extension for an Interleaf output file must be .docERROR: The extension for a Frame output file must be .mifERROR: The extension for an RTF output file must be .rtfERROR: The extension for a MSWord output file must be .docAn invalid extension for a document was specified for the output file using the -output option. -------------------------------------------------------------DocExpress 2.3Error occurred on 03/14/96 at 10:21:00Error occurred in DocExpressDocExpress: Not a valid package file,...-------------------------------------------------------------ERROR: dps_check_file failed: 65280...The header file, specified with the -header option, is not valid for the document publishing system (package in the example above) specified with the -dps option. ERROR: BAD is an invalid diagram type.The diagram type, specified with the -dtype command line option of the utility, is not a legal diagram type. ERROR: The object's type must be specified with its name.The name of a Object, specified with the -oname option, cannot be specified without its type, specified with the -otype option. ERROR: The diagram's type must be specified with its name.The name of a diagram, specified with the -dname option, cannot be specified without its type, specified with the -dtype option. WARNING: Invalid Format File, SUBJECT, for CLASSERROR: No format files foundThe format file, specified with the -format option, is not the proper type for the Object type specified with the -otype option. WARNING: Invalid Format File, CCD, for CADERROR: No format files foundThe format file, specified with the -format option, is not the proper type for the diagram type specified with the -dtype option. ERROR: The tag file, bad does not exist.The file, bad, specified with the -tag option, does not exist. ERROR: Unable to open file: nofile.txt.The utility was unable to open the file, nofile.txt. ERROR: The tag file, noread.txt cannot be read.The tag file, noread.txt, specified with the -tag option, could not be read. ERROR: Unable to open file: noread.txtWARNING: Empty format file: noread.txtWARNING: No format files foundThe utility could not open the format file, specified with the -format options, therefore; no format files were found. ERROR: Bad parameter -badThe option, -bad, specified on the command line of the utility is not valid. ERROR: Expected another argumentThe last option on the utilities' command line required a value which was not specified. ERROR: Bad parameter ileafAn invalid option was specified on the utilities' command line. This error may also occur if a previous option required a value which was not specified. In this case, the next option is used as the option's value, thus forcing its value to be interpreted as an option. WARNINGSWARNING: Not a valid type: BADThe Object type, specified with the -otype command line option of the utility, is not a legal Object type. WARNING: Not a valid type: BADWARNING: Invalid section level parameter value: -1Setting section level value to 1The section level number, specified with the -sl option, must be a non-negative number; otherwise, the section level will be set to 1. WARNING: Invalid Format File, SUBJECT, for CLASSERROR: No format files foundThe format file, specified with the -format option, is not the proper type for the Object type specified with the -otype option. ERROR: Unable to open file: noread.txtWARNING: Empty format file: noread.txtWARNING: No format files foundThe utility could not open the format file, specified with the -format options, therefore; no format files were found. TERM1="Utilities" TERM2="parse_omt" TERM3="example"TERM1="parse_omt" TERM2="example"TERM1="Example" TERM2="parse_omt"EXAMPLE The command below will generate information about Data Flow Diagrams (DFDs) starting with the rentProduct DFD. The information will be generated in accordance with the default DFD format file dfd.fmt in the format files directory $ATAHOME/doc/case_tools/ot/format_files/omt. $ATAHOME/doc/case_tools/ot/bin/omt/parse_omt \-proj Ot4omtExample -config Ot4omtExample.1 \-phase Analysis.1 -system CoreSystem.1 \-o $HOME/.ata/tmp/parse_omt.doc -dps ileaf \-dtype DFD -dname rentProductThe default DFD format file is shown in Figure 3-23. It specifies that a section title will be generated that contains the DFD's name and type. A title will be generated for all DFDs which will contain its name and type. Text for each DFD will be output in accordance with the format file text.fmt in the format files directory. The DFD will be output after the diagram's text. All Data Processes on each DFD will be processed in accordance with the format file dataprocess.fmt in the format files directory. Type : DFD : : Specifies the type of format fileSection : $NAME ($TYPE) : alpha numeric :Directive to generate a sectionTitle : $NAME ($TYPE) : alpha numeric : Directive to generate the diagram's titleText : $ATAHOME/doc/case_tools/ot/format_files/omt/text.fmt : <format file> :Directive to include the text associated with the Data Flow DiagramPrint : : blank value :Directive to output the diagramDataProcess : $ATAHOME/doc/case_tools/ot/format_files/omt/dataprocess.fmt : <format file> :Directive to process all Data Processes associated with the Data Flow DiagramThe format file for the Data Processes (i.e., dataprocess.fmt) is shown in Figure 3-24. It specifies that a section title will be generated for each Data Process with its name and type. The text describing the Data Process will be output after the section title and followed by sub-sections for the flows (i.e., Control Flows Data Flows, Result Flows, and Update Flows) coming into and out of the Data Process. The flows will be output in accordance with the list format file (i.e., list.fmt) in the default format file directory. Finally, the child DFD for the Data Process will be processed in accordance with the DFD format file (i.e., dfd.fmt) shown in Figure 3-23. Type : DataProcess : :Specifies the type of format fileSection :$NAME ($TYPE): alpha numeric :Directive to generate a sectionText : $ATAHOME/doc/case_tools/ot/format_files/omt/text.fmt : <format file> :Directive to include text associated with the Data ProcessSection :Inputs $INCREMENT: alpha numeric :Directive to generate a sectionFlowIn : $ATAHOME/doc/case_tools/ot/format_files/omt/list.fmt : <format file> :Directive to process all input Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows) of the DataProcessSection :Outputs $INCREMENT: alpha numeric :Directive to generate a sectionFlowOut : $ATAHOME/doc/case_tools/ot/format_files/omt/list.fmt : <format file> :Directive to process all output Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows) of the DataProcessDFD : $ATAHOME/doc/case_tools/ot/format_files/omt/dfd.fmt : <format file> :Directive to process the Data Flow Diagram associated with the DataProcessThe output from the utility is shown below. 1. rentProduct (Data Flow Diagram)FILENAME="01105.tif" ORIGSEQ="62" ORIGTYPE="I" ORIGDOC="../../sources/dx_utils/dxu_utls.fm5.mif"Figure 3. rentProduct (Data Flow Diagram) 1.1 find Product (Data Process)1.1.1 Inputs 1 Product (Data Flow) 2 product id (Data Flow) 1.1.2 Outputs 3 Product (Data Flow) 1.2 rent Product (Data Process)Description of the "rent Product" function: The Product is registered as rented by the member. All attributes of the Rental must be filled in. 1.2.1 Inputs 4 Member (Data Flow) 5 Product (Data Flow) 1.2.2 Outputs 6 Rental (Result Flow) TERM1="Utilities" TERM2="parse_omt" TERM3="extraction combinations"TERM1="parse_omt" TERM2="extraction combinations"EXTRACTION COMBINATIONSThe various combinations of starting Objects (e.g., Classes, Data Processes, etc.) or diagrams are identified and described in the and . The table contains a description of information that may be extracted and the applicable parameter values. Object Extraction CombinationsStarting Objects may be specified by name or type either the -oname or -otype options or both. through identifies and describes the valid Object types that may be specified for the -otype option. COLS="4"COLNAME="1" COLWIDTH="19p"COLNAME="2" COLWIDTH="285p"COLNAME="3" COLWIDTH="61p"COLNAME="4" COLWIDTH="81p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="4" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all objects of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all objects of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all objects of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeDiagram Extraction CombinationsStarting diagram(s) may be specified by name or type either the -dname or -dtype options or both. identifies and describes the valid diagram types that may be specified for the -dtype option. COLS="4"COLNAME="1" COLWIDTH="19p"COLNAME="2" COLWIDTH="285p"COLNAME="3" COLWIDTH="61p"COLNAME="4" COLWIDTH="81p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-dnameCOLNAME="4" VALIGN="TOP" MOREROWS="0"-dtypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"1COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all diagrams of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"2COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all diagrams of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"3COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all diagrams of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeThe starting format file is used in conjunction with the starting Object, Object type, diagram, or diagram type to specify the next set of Objects, or diagrams to extract. See the FORMAT FILES section on page 131 for more information. TERM1="parse_omt" TERM2="format files"TERM1="Utilities" TERM2="parse_omt" TERM3="format files"Format FilesThis utility uses a set of format files to extract and format information from the ObjectTeam repository. Each format file defines what information is included for a particular Object or diagram type and in what order it should appear. The first format file is specified on the command line with the -format option. This starting format file may reference other format files which in may reference still other format files. The type of the starting format file must match with the Object or diagram type specified on the utilities command line with either the -otype or -dtype option respectively. The keyword 'TYPE' in the format file identifies the Object or diagram type for the format file. Each format file type has a specific set of keywords. These keywords define what information may be extracted for the applicable Object or diagram type or how information is to be formatted. The keywords for each format file are identified and described within the format file. All format files for OMT and UML all located in For OMT: $ATAHOME/doc/case_tools/ot/format_files/omt. For UML: $ATAHOME/doc/case_tools/ot/format_files/uml. Format files may be customized to suit the user's needs. For instructions on how to modify the format files, see the EXAMPLE FORMAT FILE section below. Most importantly, the keywords used in a format file must be valid for the format files type. The following sections identify and describe all keywords for OMT and UML. The General Format Files' section covers some keywords common to many format files and some general format files for Diagram and Object Types. The Super Type Format Files section addresses format files for the Super Types identified in the Super Types section in the General Utilities Information chapter. The remaining sections cover the format file for a specific type of diagram and the Object types for that diagram type.TERM1="Format Files" TERM2="general" TERM3="parse_omt"General Format FilesThis section identifies and describes the keywords for some general format files. All the general format files are located in $ATAHOME/doc/case_tools/ot/format_files/omt. Common KeywordsTERM1="Format Files" TERM2="Text" TERM3="parse_omt"The following table identifies and describes the keywords common to all Diagram and Object Type format files. See the Diagram and Object Type sections in the General Utilities Information chapter. COLS="2"COLNAME="1" COLWIDTH="103p"COLNAME="2" COLWIDTH="345p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file type. Must be Text.COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the name of the document publishing system tag available in the header file. COLNAME="1" VALIGN="TOP" MOREROWS="0"SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to generate a section title. The variables $NAME and $TYPE may be included in the option's value. During the utilities execution these variables will be substituted for the object's name and type respectively. COLNAME="1" VALIGN="TOP" MOREROWS="0"TextCOLNAME="2" VALIGN="TOP" MOREROWS="0"Include the text associated with the object. The format file must be of type Text. COLNAME="1" VALIGN="TOP" MOREROWS="0"Property:nameCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to process the specified property associated with the object. COLNAME="1" VALIGN="TOP" MOREROWS="0"ParagraphCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to generate a paragraph with the text in the directive's value. Variables may be included in the directive's value. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"The directive's value specifies the name of a document publishing tag. This tag is used for all subsequent text output with the Paragraph Directive. The following table TERM1="Format Files" TERM2="Text" TERM3="parse_omt"identifies and describes the keywords for the Text format file. A Text format file may be used for formatting the text of any diagram or Object. It can be specified for the value of the Text keyword in any format file. The default format file for text is text.fmt. COLS="2"COLNAME="1" COLWIDTH="93p"COLNAME="2" COLWIDTH="355p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Text Specific KeywordsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file type. Must be Text.COLNAME="1" VALIGN="TOP" MOREROWS="0"SectionCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to generate a section title. The value for this option will be used as the section's title. COLNAME="1" VALIGN="TOP" MOREROWS="0"PrintCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to output the text. COLNAME="1" VALIGN="TOP" MOREROWS="0"TagCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the name of the document publishing system tag available in the header file. The following table TERM1="Format Files" TERM2="List" TERM3="parse_omt"identifies and describes the keywords for the List format file. A List format file may be used for all diagram types identified in and all Object types identified in Table3-102 through . The default format file for a list is list.fmt. COLS="2"COLNAME="1" COLWIDTH="96p"COLNAME="2" COLWIDTH="352p"COLNAME="1" VALIGN="TOP" MOREROWS="0"List Specific KeywordsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file type. Must be ListFmt.COLNAME="1" VALIGN="TOP" MOREROWS="0"ListCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to output the list element. COLNAME="1" VALIGN="TOP" MOREROWS="0"ListStartCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the name of the document publishing system tag available in the header file for the first element in the list. COLNAME="1" VALIGN="TOP" MOREROWS="0"ListElementCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the name of the document publishing system tag available in the header file for the elements in the list. TERM1="Format Files" TERM2="Diagram" TERM3="parse_omt"The following table identifies and describes the keywords for the Diagram format file. A Diagram format file may be used for all diagram types identified in . The default format file for diagrams is diagram.fmt. COLS="2"COLNAME="1" COLWIDTH="120p"COLNAME="2" COLWIDTH="328p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Diagram Specific KeywordsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file type. Must be Diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"HeightCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the desired height of the diagram (in inches). The default is 8.5 inches. COLNAME="1" VALIGN="TOP" MOREROWS="0"PrintCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directive to output the diagram. COLNAME="1" VALIGN="TOP" MOREROWS="0"TitleCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the title for the diagram. The variables $NAME and $TYPE may be included in the option's value. During the utilities execution these variables will be substituted for the diagram's name and type respectively. COLNAME="1" VALIGN="TOP" MOREROWS="0"WidthCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the desired width of the diagram (in inches). The default is 6.5 inches. COLNAME="1" VALIGN="TOP" MOREROWS="0"OrientCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the desired orientation for the diagram. The legal values are Portrait, Landscape and BestFit. The default is Portrait. Super Type Format FilesThis section identifies and describes the keywords for super-type format files. All the super-type format files are located in: For OMT: $ATAHOME/doc/case_tools/ot/format_files/omtFor UML: $ATAHOME/doc/case_tools/ot/format_files/umlActor Specific KeywordsThe following table identifies and describes the keywords for the Actor format file. The TERM1="Format Files" TERM2="Actor" TERM3="parse_omt"identifies and describes the keywords for the Actor format file. The Actor format file may be specified for the CCDActor and DFDActor Object types. The default format file for the Actor Object type is actor.fmt. COLS="3"COLNAME="1" COLWIDTH="84p"COLNAME="2" COLWIDTH="196p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"ActorCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Communication Diagram for the ActorCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCD, Diagram, or ListFMTClass Specific KeywordsTERM1="Format Files" TERM2="Class" TERM3="parse_omt"The following table identifies and describes the keywords for the Class format file. The Class format file may be specified for the CDClass, CCDClass, and STDClass Object types. The default format file for the Class Object type is class.fmt. COLS="3"COLNAME="1" COLWIDTH="87p"COLNAME="2" COLWIDTH="196p"COLNAME="3" COLWIDTH="165p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the Attributes of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the Methods of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a State Transition Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"STD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"SubClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"Event Specific KeywordsTERM1="Format Files" TERM2="Event" TERM3="parse_omt"The following table identifies and describes the keywords for the Event format file. A Event format file may be specified for the SDEvent or STDEvent Object types. The default format file for the Event Object type is event.fmt. COLS="3"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="205p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"EventExternal Specific KeywordsTERM1="Format Files" TERM2="External" TERM3="parse_omt"The following table identifies and describes the keywords for the External format file. An External format file may be specified for the CCDActor or DFDActor Object types. The default format file for the External Object type is external.fmt. COLS="3"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="205p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"ExternalCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Communication Diagram for the ActorCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCD, Diagram, or ListFMTFlow Specific KeywordsTERM1="Format Files" TERM2="Flow" TERM3="parse_omt"The following table identifies and describes the keywords for the Flow format file. The Flow format file may be specified for the ControlFlow, DataFlow, ResultFlow, and UpdateFlow Object types. The default format file for the Flow Object type is flow.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"FlowCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the FlowCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTMessage Specific KeywordsTERM1="Format Files" TERM2="Message" TERM3="parse_omt"The following table identifies and describes the keywords for the Message format file. A Message format file may be used for the ComMessage, and EventMessage Object types. The default format file for the Message Object type is message.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"MessageCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Message Generalization Diagram for the Communication MessageCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGD, Diagram, or ListFMTClass DiagramCD Specific KeywordsTERM1="Format Files" TERM2="CAD" TERM3="parse_omt"The following table identifies and describes the keywords for the Class Diagram (CD) format file. The default format file for the CD diagram type is CD.fmt. Table 3-9 through Table 3-10 identifies and describes the keywords for the Object types on a CD. COLS="3"COLNAME="1" COLWIDTH="97p"COLNAME="2" COLWIDTH="181p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"CDCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Classes on the Class DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"CDClass, Class or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDContainerCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Containers on the Class DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"CDContainer, Container, or ListFMTCDClass Specific KeywordsTERM1="Format Files" TERM2="CADClass" TERM3="parse_omt"The following table identifies and describes the keywords for the CDClass format file. The default format file for the CDClass Object type is CDclass.fmt. COLS="3"COLNAME="1" COLWIDTH="93p"COLNAME="2" COLWIDTH="187p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"CDClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the Attributes of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the Attributes of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the Methods of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a State Transition Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"STD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"SubClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the Attributes of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"CDContainer Specific KeywordsTERM1="Format Files" TERM2="CADContainer" TERM3="parse_omt"The following table identifies and describes the keywords for the CDContainer format file. The default format file for the CDContainer Object type is CDcontainer.fmt. COLS="3"COLNAME="1" COLWIDTH="76p"COLNAME="2" COLWIDTH="202p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Must be CDContainerClass Communication DiagramTERM1="Format Files" TERM2="CCD" TERM3="parse_omt"CCD Specific KeywordsThe following table identifies and describes the keywords for the Class Communication Diagram (CCD) format file. The default format file for the CCD diagram type is ccd.fmt. Table 3-11 through Table 3-17 identifies and describes the keywords for the Object types on the CCD. COLS="3"COLNAME="1" COLWIDTH="103p"COLNAME="2" COLWIDTH="175p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Must be CCDCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Actors on the Class Communication DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCDActor, Actor, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Classes on the Class Communication DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCDClass, Class, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDContainerCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Containers on the Class Communication DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCDContainer, Container, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassReferenceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Class References on the Class Communication DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassReference, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"CommMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Communication Messages on the Class Communication DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"CommMessage, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"SubjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Subjects on the Class Communication DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"Subject, or ListFMTCCDActor Specific KeywordsTERM1="Format Files" TERM2="CCDActor" TERM3="parse_omt"The following table identifies and describes the keywords for the CCDActor format file. The default format file for the CCDActor Object type is ccdactor.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCDActorCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Communication Diagram for the ActorCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCD, Diagram, or ListFMTCCDClass Specific KeywordsTERM1="Format Files" TERM2="CCDClass" TERM3="parse_omt"The following table identifies and describes the keywords for the CCDClass format file. The default format file for the CCDClass Object type is ccdclass.fmt. COLS="3"COLNAME="1" COLWIDTH="85p"COLNAME="2" COLWIDTH="193p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCDClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the Attributes of the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process the Methods of the Class COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a State Transition Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"STD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"SubClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"SubClass, Class, or ListFMTCCDContainer Specific KeywordsTERM1="Format Files" TERM2="CCDContainer" TERM3="parse_omt"The following table identifies and describes the keywords for the CCDContainer format file. The default format file for the CCDContainer Object type is ccdcontainter.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCDContainerClassReference Specific KeywordsTERM1="Format Files" TERM2="ClassReference" TERM3="parse_omt"The following table identifies and describes the keywords for the ClassReference format file. The default format file for the ClassReference Object type is classreference.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"ClassReferenceComMessage Specific KeywordsTERM1="Format Files" TERM2="ComMessage" TERM3="parse_omt"The following table identifies and describes the keywords for the Communication Message (i.e., ComMessage) format file. The default format file for the ComMessage Object type is commessage.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"ComMessageCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Message Generalization Diagram for the Communication MessageCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGD, Diagram, or ListFMTSubject Specific KeywordsTERM1="Format Files" TERM2="Subject" TERM3="parse_omt"The following table identifies and describes the keywords for the Subject format file. The default format file for the Subject Object type is subject.fmt. COLS="3"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="201p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"SubjectCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the SubjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Communication Diagram for the SubjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a State Transition Diagram for the SubjectCOLNAME="3" VALIGN="TOP" MOREROWS="0"STD, Diagram, or ListFMTCollaboration DiagramCOD Specific KeywordsTERM1="Format Files" TERM2="COD" TERM3="parse_omt"The following table identifies and describes the keywords for the Collaboration Diagram (COD) format file. The default format file for the COD diagram type is cod.txt. Table 3-11 through Table 3-17 identifies and describes the keywords for the Object types on the COD. COLS="3"COLNAME="1" COLWIDTH="94p"COLNAME="2" COLWIDTH="184p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"SubjectCOLNAME="1" VALIGN="TOP" MOREROWS="0"AggLinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Aggregation Links on the Collaboration DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"AggLink, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"CODActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Actors on the Collaboration DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"CODActor, Actor, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"CODMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Messages on the Collaboration Diagram. COLNAME="3" VALIGN="TOP" MOREROWS="0"CODMessage, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"InstanceCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Instances on the Collaboration DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"Instance, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"LinkCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Links on the Collaboration DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"Link, or ListFMTAggLink Specific KeywordsTERM1="Format Files" TERM2="AggLink" TERM3="parse_omt"The following table identifies and describes the keywords for the Aggregation Link format file. The default format file for the AggLink Object type is agglink.txt. COLS="3"COLNAME="1" COLWIDTH="76p"COLNAME="2" COLWIDTH="202p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"AggLinkCODActor Specific KeywordsTERM1="Format Files" TERM2="CODActor" TERM3="parse_omt"The following table identifies and describes the keywords for the COD Actor format file. The default format file for the CODActor Object type is codactor.txt. COLS="3"COLNAME="1" COLWIDTH="76p"COLNAME="2" COLWIDTH="202p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"CODActorCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Class Communication Diagrams for the ActorCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCD, Diagram, or ListFMTCODMessage Specific KeywordsTERM1="Format Files" TERM2="CODMessage" TERM3="parse_omt"The following table identifies and describes the keywords for the COD Message format file. The default format file for the CODMessage Object type is codmessage.txt. COLS="3"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="201p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"CODMessageInstance Specific KeywordsTERM1="Format Files" TERM2="Instance" TERM3="parse_omt"The following table identifies and describes the keywords for the Instance format file. The default format file for the Instance Object type is instance.txt. COLS="3"COLNAME="1" COLWIDTH="67p"COLNAME="2" COLWIDTH="211p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"InstanceLink Specific KeywordsTERM1="Format Files" TERM2="Link" TERM3="parse_omt"The following table identifies and describes the keywords for the Link format file. The default format file for the Link Object type is link.txt. COLS="3"COLNAME="1" COLWIDTH="69p"COLNAME="2" COLWIDTH="210p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"LinkData Flow DiagramDFD Specific KeywordsTERM1="Format Files" TERM2="DFD" TERM3="parse_omt"The following table identifies and describes the keywords for the Data Flow Diagram (DFD) format file. The default format file for the DFD diagram type is dfd.fmt. Table 3-24 through Table 3-31 identifies and describes the keywords for the Object types on the DFD. COLS="3"COLNAME="1" COLWIDTH="112p"COLNAME="2" COLWIDTH="174p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DFDCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Control Flows on the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"ControlFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Control Flows coming into the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"ControlFlowIn, ControlFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Control Flows going out of the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"ControlFlowOut, ControlFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataProcessCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Data Processes on the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataProcess, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataStoreCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Data Stores on the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataStore, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Actors on the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"DFDActor, Actor, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Data Flows on the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Data Flows coming into the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataFlowIn, DataFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Data Flows going out of the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataFlowOut, DataFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows on the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows coming into the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"FlowIn, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows going out of the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"FlowOut, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Result Flows on the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"ResultFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Result Flows coming into the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"ResultFlowIn, ResultFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Result Flows going out of the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"ResultFlowOut, ResultFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Update Flows on the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"UpdateFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Update Flows coming into the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"UpdateFlowIn, UpdateFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Update Flows going out of the Data Flow DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"UpdateFlowOut, UpdateFlow, Flow, or ListFMTControlFlow Specific KeywordsTERM1="Format Files" TERM2="ControlFlow" TERM3="parse_omt"The following table identifies and describes the keywords for the Control Flow format file. The default format file for the ControlFlow Object type is controlflow.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"ControlFlowCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the Control FlowCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Message Generalization Diagram for the Control FlowCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGD, Diagram, or ListFMTDataFlow Specific KeywordsTERM1="Format Files" TERM2="DataFlow" TERM3="parse_omt"The following table identifies and describes the keywords for the Data Flow format file. The default format file for the DataFlow Object type is dataflow.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataFlowCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the Data FlowCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTDataProcess Specific KeywordsTERM1="Format Files" TERM2="DataProcess" TERM3="parse_omt"The following table identifies and describes the keywords for the Data Process format file. The default format file for the DataProcess Object type is dataprocess.fmt. COLS="3"COLNAME="1" COLWIDTH="114p"COLNAME="2" COLWIDTH="184p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataProcessCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Data Flow Diagram for the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"DFD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Control Flows on the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"ControlFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Control Flows coming into the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"ControlFlowIn, ControlFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ControlFlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Control Flows going out of the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"ControlFlowOut, ControlFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Data Flows on the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Data Flows coming into the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataFlowIn, DataFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"DataFlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Data Flows going out of the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataFlowOut, DataFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows on the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows coming into the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"FlowIn, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"FlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows going out of the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"FlowOut, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Result Flows on the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"ResultFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Result Flows coming into the Data ProcessCOLNAME="3" VALIGN="TOP" MOREROWS="0"ResultFlowIn, ResultFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"ResultFlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Result Flows going out of the Data Process The format file must be of type ResultFlowOut, ResultFlow, Flow, or ListFMT. COLNAME="3" VALIGN="TOP" MOREROWS="0"ResultFlowOut, ResultFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Update Flows on the Data Process The format file must be of type UpdateFlow, UpdateFlow, Flow, or ListFMT. COLNAME="3" VALIGN="TOP" MOREROWS="0"UpdateFlow, UpdateFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowInCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Update Flows coming into the Data Process The format file must be of type UpdateFlowIn, UpdateFlow, Flow, or ListFMT. COLNAME="3" VALIGN="TOP" MOREROWS="0"UpdateFlowIn, UpdateFlow, Flow, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UpdateFlowOutCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Update Flows going out of the Data Process The format file must be of type UpdateFlowOut, UpdateFlow, Flow, or ListFMT. COLNAME="3" VALIGN="TOP" MOREROWS="0"UpdateFlowOut, UpdateFlow, Flow, or ListFMTDataStore Specific KeywordsTERM1="Format Files" TERM2="DataStore" TERM3="parse_omt"The following table identifies and describes the keywords for the Data Store format file. The default format file for the DataStore Object type is datastore.fmt. COLS="3"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="205p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DataStoreCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the Data StoreCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTDFDActor Specific KeywordsTERM1="Format Files" TERM2="DFDActor" TERM3="parse_omt"The following table identifies and describes the keywords for the DFDActor format file. The default format file for the DFDActor Object type is dfdactor.fmt. COLS="3"COLNAME="1" COLWIDTH="69p"COLNAME="2" COLWIDTH="210p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DFDActorCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Communication Diagram for the ActorCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCD, Diagram, or ListFMTResultFlow Specific KeywordsTERM1="Format Files" TERM2="ResultFlow" TERM3="parse_omt"The following table identifies and describes the keywords for the Result Flow format file. The default format file for the ResultFlow Object type is resultflow.fmt. COLS="3"COLNAME="1" COLWIDTH="73p"COLNAME="2" COLWIDTH="207p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"ResultFlowUpdateFlow Specific KeywordsTERM1="Format Files" TERM2="UpdateFlow" TERM3="parse_omt"The following table identifies and describes the keywords for the Update Flow format file. The default format file for the UpdateFlow Object type is updateflow.fmt. COLS="3"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="201p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"UpdateFlowCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the Update FlowCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Message Generalization Diagram for the Update FlowCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGD, Diagram, or ListFMTMessage Generalization DiagramMGD Specific KeywordsTERM1="Format Files" TERM2="MGD" TERM3="parse_omt"The following table identifies and describes the keywords for the Message Generalization Diagram (MGD) format file. The default format file for MGD diagram type is mgd.fmt. Table 3-33 identifies and describes the keywords for the Object types on an MGD. COLS="3"COLNAME="1" COLWIDTH="91p"COLNAME="2" COLWIDTH="189p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="1" VALIGN="TOP" MOREROWS="0"MessageDefCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Message Definitions on the Sequence DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"MessageDef, or ListFMTMessageDef Specific KeywordsTERM1="Format Files" TERM2="MessageDef" TERM3="parse_omt"The following table identifies and describes the keywords for the Message Definition (i.e., MessageDef) format file. The default format file for the MessageDef Object type is messagedef.fmt. COLS="3"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="201p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"MessageDefCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Data Flow Diagram for the Message DefinitionCOLNAME="3" VALIGN="TOP" MOREROWS="0"DFD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Message Generalization Diagram for the Message DefinitionCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGD, Diagram, or ListFMTSequence DiagramSD Specific KeywordsTERM1="Format Files" TERM2="ETD" TERM3="parse_omt"The following table identifies and describes the keywords for the Sequence Diagram (SD). The default format file for SD diagram type is SD.fmt. Table 3-35 through Table 3-37 identifies and describes the keywords for the Object types on the SD. COLS="3"COLNAME="1" COLWIDTH="87p"COLNAME="2" COLWIDTH="192p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"SDCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDEventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Events on the Sequence DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"SDEvent, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"InitiatorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Initiators on the Sequence DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"Initiator, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDObjectCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Objects on the Sequence DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"SDObject, or ListFMTSDEvent Specific KeywordsTERM1="Format Files" TERM2="ETDEvent" TERM3="parse_omt"The following table identifies and describes the keywords for the SDEvent format file. The default format file for the SDEvent Object type is SDevent.fmt. COLS="3"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="201p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"SDEventSDObject Specific KeywordsTERM1="Format Files" TERM2="ETDObject" TERM3="parse_omt"The following table identifies and describes the keywords for the SDObject format file. The default format file for the SDObject Object type is SDobject.fmt. COLS="3"COLNAME="1" COLWIDTH="79p"COLNAME="2" COLWIDTH="199p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"SDObjectInitiator Specific KeywordsTERM1="Format Files" TERM2="Initiator" TERM3="parse_omt"The following table identifies and describes the keywords for the Initiator format file. The default format file for the Initiator Object type is initiator.fmt. COLS="3"COLNAME="1" COLWIDTH="73p"COLNAME="2" COLWIDTH="207p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"InitiatorState Transition DiagramSTD Specific KeywordsTERM1="Format Files" TERM2="STD" TERM3="parse_omt"The following table identifies and describes the keywords for the State Transition Diagram (STD) format file. The default format file for STD diagram type is std.fmt. Table 3-39 through Table 3-43 identifies and describes the keywords for the Object types on the STD. COLS="3"COLNAME="1" COLWIDTH="97p"COLNAME="2" COLWIDTH="181p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"STDCOLNAME="1" VALIGN="TOP" MOREROWS="0"EventMessageCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Event Messages on the State Transition DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"EventMessage, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"StateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process States on the State Transition DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"State, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Classes on the State Transition DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"STDClass, Class, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDEventCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Events on the State Transition DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"STDEvent, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"SuperStateCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process Super States on the State Transition DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"SuperState, or ListFMTEventMessage Specific KeywordsTERM1="Format Files" TERM2="EventMessage" TERM3="parse_omt"The following table identifies and describes the keywords for the Event Message format file. The default format file for the EventMessage Object type is eventmessage.fmt. COLS="3"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="205p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"EventMessageState Specific KeywordsTERM1="Format Files" TERM2="State" TERM3="parse_omt"The following table identifies and describes the keywords for the State format file. The default format file for the State Object type is state.fmt. COLS="3"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="205p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"StateSTDClass Specific KeywordsTERM1="Format Files" TERM2="STDClass" TERM3="parse_omt"The following table identifies and describes the keywords for the STDClass format file. The default format file for the STDClass Object type is stdclass.fmt. COLS="3"COLNAME="1" COLWIDTH="84p"COLNAME="2" COLWIDTH="196p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"STDClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"AttributesCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"CD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Class Communication Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"MethodsCOLNAME="2" VALIGN="TOP" MOREROWS="0"COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a Message Generalization Diagram for the ClasCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGD, Diagram, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a State Transition Diagram for the ClassCOLNAME="3" VALIGN="TOP" MOREROWS="0"STD, Diagram, or ListFMTSTDEvent Specific KeywordsTERM1="Format Files" TERM2="STDEvent" TERM3="parse_omt"The following table identifies and describes the keywords for the STDEvent format file. The default format file for the STDEvent Object type is stdevent.fmt. COLS="3"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="201p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"Specifies the format file type. Must be STDEvent. COLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process a State Transition Diagram for the EventCOLNAME="3" VALIGN="TOP" MOREROWS="0"STD, Diagram, or ListFMTSuperState Specific KeywordsTERM1="Format Files" TERM2="SuperState" TERM3="parse_omt"The following table identifies and describes the keywords for the Super State format file. The default format file for the SuperState Object type is superstate.fmt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"SuperStateUse Case DiagramUCD Specific KeywordsTERM1="Format Files" TERM2="UCD" TERM3="parse_omt"The following table identifies and describes the keywords for the Use Case Diagram (UCD) format file. The default format file for UCD diagram type is ucd.txt. Table 3-45 through Table 3-48 identifies and describes the keywords for the Object types on the UCD. COLS="3"COLNAME="1" COLWIDTH="139p"COLNAME="2" COLWIDTH="139p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"UCDCOLNAME="1" VALIGN="TOP" MOREROWS="0"DirectedCommAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Directed Communication Associations on the Use Case DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"DirectedCommAssoc, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCDActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all the Actors on the Use Case DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"UCDActor, Actor, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UndirectedCommAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Undirected Communication Associations on the Use Case DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"UndirectedCommAssoc, or ListFMTCOLNAME="1" VALIGN="TOP" MOREROWS="0"UseCaseCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all Use Case on the Use Case DiagramCOLNAME="3" VALIGN="TOP" MOREROWS="0"UseCase, or ListFMTDirectedCommAssoc Specific KeywordsTERM1="Format Files" TERM2="DirectedCommAssoc" TERM3="parse_omt"The following table identifies and describes the keywords for the Directed Communication Association format file. The default format file for the DirectedCommAssoc Object type is directedcommassoc.txt. COLS="3"COLNAME="1" COLWIDTH="78p"COLNAME="2" COLWIDTH="201p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"DirectedCommAssocCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all the Message Generalization Diagrams for the Directed Communication AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGD, Diagram, or ListFMTUCDActor Specific KeywordsTERM1="Format Files" TERM2="UCDActor" TERM3="parse_omt"The following table identifies and describes the keywords for the UCD Actor format file. The default format file for the UCDActor Object type is ucdactor.txt. COLS="3"COLNAME="1" COLWIDTH="76p"COLNAME="2" COLWIDTH="202p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"UCDActorCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all the Cllass Communication Diagrams for the UCD ActorCOLNAME="3" VALIGN="TOP" MOREROWS="0"CCD, Diagram, or ListFMTTERM1="Format Files" TERM2="UndirectedCommAssoc" TERM3="parse_omt"UndirectedCommAssoc Specific KeywordsThe following table identifies and describes the keywords for the Undirected Communication Association format file. The default format file for the UndirectedCommAssoc Object type is undirectedcom.txt. COLS="3"COLNAME="1" COLWIDTH="75p"COLNAME="2" COLWIDTH="205p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"UndirectedCommAssocCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all the Message Generalizations fo rthe Undirected Communication AssociationCOLNAME="3" VALIGN="TOP" MOREROWS="0"MGD, Diagram, or ListFMTUseCase Specific KeywordsTERM1="Format Files" TERM2="UseCase" TERM3="parse_omt"The following table identifies and describes the keywords for the Use Case format file. The default format file for the UseCase Object type is usecase.txt. COLS="3"COLNAME="1" COLWIDTH="70p"COLNAME="2" COLWIDTH="208p"COLNAME="3" COLWIDTH="168p"COLNAME="1" VALIGN="TOP" MOREROWS="0"KeywordCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Valid Format File TypesCOLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"Specifies the format file typeCOLNAME="3" VALIGN="TOP" MOREROWS="0"UseCaseCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Process all the Sequence Diagrams for the Use CaseCOLNAME="3" VALIGN="TOP" MOREROWS="0"SD, Diagram, or ListFMTEXAMPLE FORMAT FILEKeywords should be followed by a colon (:). Blank lines and comment lines (lines that begin with a pound sign '#') in the format file are ignored. All other lines must contain valid keywords. The format file may be customized. To customize the file, first copy it into a working directory. Modify the file as necessary and then specify its path using the -format option. The format file consists of records, one per line. Each record consists of four fields: a keyword, its value, an unused column, and the keyword's description. Each field is separated by a colon (:). The default format files for parse_omt are located in $ATAHOME/doc/case_tools/ot/format_files and an example shown in below. Type : CCD : : Specifies the type of format fileSection : $NAME ($TYPE) : alpha numeric :Directive to generate a sectionTitle : $NAME ($TYPE) : alpha numeric :Directive to generate diagram's titleOrient : BestFit : [ Portrait | LandScape | BestFit ]Text : $ATAHOME/doc/case_tools/ot/format_files/omt/text.fmt : <format file> :Directive to include the text associated with the Class Communication DiagramPrint : : blank value :Directive to output the diagramCCDActor : $ATAHOME/doc/case_tools/ot/format_files/omt/actor.fmt : <format file> :Directive to process all Actors associated with the CCDSubject : $ATAHOME/doc/case_tools/ot/format_files/omt/subject.fmt : <format file> :Directive to process all Subjects associated with the CCDComMessage : $ATAHOME/doc/case_tools/ot/format_files/omt/commessage.fmt : <format file> :Directive to process all Communication Messages associated with the CCDID="34425"parse_dcsNAMEparse_dcs name='mdash' font=symbol charset=fontspecific code=190 descr='[mdash]' Extracts a set of related information from the ObjectTeam database. LOCATIONparse_dcs is located in: For OMT: $ATAHOME/doc/case_tools/ot/bin/omtFor UML: $ATAHOME/doc/case_tools/ot/bin/umlSYNOPSISparse_dcs -output Output File -dps Document Publishing System [-project Project Name] [-config Configuration Name] [-phase Phase Name] [-system System Name] [-oname Starting Object Name] [-otype Starting Meta-Type] [-spec Starting Specification] [-sl Starting Section Level] [-cs] [-header Header File] [-tags Document System Tags] [-defaults Defaults File] [-verbose] [-help]DESCRIPTIONThis utility is capable of extracting any set of related information from the ObjectTeam repository. For example, a set may include all Classes on all Class Communication Diagrams and the State Transition Diagrams related to the Classes. This set of information is called a Derived Component. What information is extracted and in what order is determined by command line options in conjunction with a set of Specifications (see the Specifications section on page 127) called a Derived Component Specification (See the Derived Component Concepts chapter). The -otype options specify the type of the starting Objects or Diagrams. The -spec option specifies the Specification for this starting Object or Diagram type. A specific starting Object or Diagram may be specified with the -oname option (see the EXTRACTION COMBINATIONS section on page 122). Section titles may be generated for any of the extracted objects (e.g., Classes, Data Processes, Diagrams, etc.). The starting section level is specified with the -sl option and works in conjunction with the -cs option (see these options in the OPTIONS section below). In addition, any Property (e.g., Free Text) associated with an object may also be extracted. A figure title is automatically generated by DocExpress for each diagram extracted. The figure's title may be composed of the diagram's name and optionally its type. The figure title's format is specified in the appropriate Specification for the diagram type (see the Specifications section on page 127). The information may be formatted for Interleaf, FrameMaker, RTF, MSWord or the Hypertext Markup Language (HTML). OPTIONS-output Output File Specifies the file where the output of this utility will be directed. The output file should have an appropriate suffix for the document publishing system (i.e., mif for FrameMaker, doc for Interleaf. mif for MSWord, doc for RTF, and html for HTML). -dps Document Publishing SystemSpecifies the document publishing system in which the output is to be viewed. The markup specific to this tool is generated. The choices available for this option are [frame|ileaf|html] on UNIX and [msword|rtf|html] on Windows. [-project Project Name]Specifies the name of the desired project. DEFAULT: Taken from the M4_levelpath environment variable. [-config Configuration Name]Specifies the desired Configuration Version for the Project. Specified as configuration_name.version_number (e.g., Ot4omtExample.1). DEFAULT: Taken from the M4_levelpath environment variable. [-phase Phase Name]Specifies the name of the desired Phase for the Configuration Version. Specified as phase_name.version_number (i.e., Analysis.1). DEFAULT: Taken from the M4_levelpath environment variable. [-system System Name]Specifies the name of the desired System within the Phase. Specified as system_name.version_number (e.g., CoreSystem.1). DEFAULT: Taken from the M4_levelpath environment variable. [-oname Starting Object Name]Specifies the name of the Object at which to start the parsing. This option cannot be specified without the -otype. DEFAULT (otype specified): All Objects of the specified type are parsed. [-otype Starting Object Type]Specifies the meta-type of the object at which to start the parsing. See the META-TYPES section on page 122 for valid meta-types. DEFAULT (oname specified): Parsing starts with the specified object. [-spec Starting Specification]Specifies the starting Specification. See the SPECIFICATIONS section on page 127. DEFAULT SPECIFICATION: Selects the appropriate Specification for the Object type specified by -otype. If -otype was not specified, the system Specification is selected. [-sl Starting Section Level]Specifies the starting section level (e.g., 1.4 is level 2; 2.2.3.1 is level 4) of the output. The -sl option works in conjunction with the -cs option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first diagram extracted by parse_dcs is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT STARTING SECTION LEVEL: One (1). [-cs]The -cs option works in conjunction -sl option. When the -cs is specified, the first command to generate a section is ignored. Effectively, the first object extracted by parse_dcs is placed into the section specified by the Starting Section Level of the -sl option. DEFAULT CURRENT SECTION: First section command is executed. [-header Header File]Specifies a file which contains the master definitions of all component/paragraph definitions for the desired document publishing system. See the HEADER FILES section in the General Utilities Information Chapter. DEFAULT HEADER FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/header.mifDEFAULT HEADER FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/header.docDEFAULT HEADER FILE: HTML$ATAHOME/doc/case_tools/ot/html/header.html%ATAHOME%\doc\ctools\ot\html\header.htmlDEFAULT HEADER FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\header.rtfDEFAULT HEADER FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\header.rtf[-tags Document System Tags]Specifies the name of a file which contains names of the document publishing system paragraph/component tags used during the utilities execution. See the TAGS FILE section on page 215. DEFAULT TAGS FILE: FrameMaker$ATAHOME/doc/case_tools/ot/frame/tag_file.txtDEFAULT TAGS FILE: Interleaf$ATAHOME/doc/case_tools/ot/ileaf/tag_file.txtDEFAULT TAGS FILE: HTML$ATAHOME/doc/case_tools/ot/html/tag_file.txt%ATAHOME%\doc\ctools\ot\html\tag_file.txtDEFAULT TAGS FILE: MSWord%ATAHOME%\doc\ctools\ot\msword\tag_file.txtDEFAULT TAGS FILE: RTF%ATAHOME%\doc\ctools\ot\rtf\tag_file.txt[-defaults Defaults File]Specifies the name of a file which contains defaults to be used during the utilities execution. See the DEFAULTS FILE section in the General Utilities Information chapter. DEFAULTS FILE: $ATAHOME/doc/case_tools/ot/defaults/defaults.txt[-verbose]Specifies that informative messages as well as error and warning messages are displayed. DEFAULT: Only error and warning messages are displayed. [-help]The proper syntax for the utility is displayed. TERM1="Utilities" TERM2="parse_dcs" TERM3="diagnostics"TERM1="parse_dcs" TERM2="diagnostics"TERM1="Diagnostics" TERM2="parse_dcs"DIAGNOSTICSThis section identifies and describes all the error and warning messages that may be generated by the parse_dcs utility. Each message is followed by an explanation. ERRORSERROR: A Project must be specified.A Project was not specified on the command line of the utility with the -project option. ERROR: The bad project does not existThe Project, bad, specified with the -project option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A configuration must be specified.A Configuration was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -config option. ERROR: The bad configuration does not existThe Configuration, bad, specified with the -config option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A phase must be specified.A Phase was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -phase option. ERROR: The bad phase does not existThe Phase, bad, specified with the -phase option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: A system must be specified.A System was not set in the M4_levelpath environment variable nor was it specified on the command line of the utility with the -system option. ERROR: The bad system does not existThe System, bad, specified with the -system option does not exist in the ObjectTeam repository pointed to by the M4_levelpath environment variable. ERROR: The document publishing system must be specified.A document publishing system was not specified on the command line of the utility with the -dps option. ERROR: The dps option is invalid.An invalid document publishing system was specified on the command line of the utility with the -dps option. ERROR: An output file must be specified.An output file was not specified on the command line of the utility with the -output option. ERROR: Invalid Object type - BAD.The Object type, specified with the -otype command line option of the utility, is not a legal Meta-type. ERROR: The object's type must be specified with its name.The name of a Object, specified with the -oname option, cannot be specified without its type, specified with the -otype option. WARNING: Invalid Specification, SUBJECT, for CLASSERROR: No Specifications foundThe Specification, specified with the -spec option, is not the proper type for the Object type specified with the -otype option. ERROR: The tag file, bad does not exist.The file, bad, specified with the -tag option, does not exist. ERROR: Unable to open file: nofile.txt.The utility was unable to open the file, nofile.txt. ERROR: The tag file, noread.txt cannot be read.The tag file, noread.txt, specified with the -tag option, could not be read. ERROR: Unable to open file: noread.txtWARNING: Empty Specification: noread.txtWARNING: No Specifications foundThe utility could not open the Specification, specified with the -format options, therefore; no Specifications were found. ERROR: Bad parameter -badThe option, -bad, specified on the command line of the utility is not valid. ERROR: Expected another argumentThe last option on the utilities' command line required a value which was not specified. ERROR: Bad parameter ileafAn invalid option was specified on the utilities' command line. This error may also occur if a previous option required a value which was not specified. In this case, the next option is used as the option's value, thus forcing its value to be interpreted as an option. ERROR: The header file, noread.txt cannot be read.The header file, noread.txt, specified with the -header option, could not be read. ERROR: The header file, bad does not exist. The file, bad, specified with the -header option, does not exist. ERROR: Failed to include bad CD. The diagram, bad, could not be included in the output. ERROR: Failed to export bad CD The diagram, bad, could not be exported. ERROR: No Specifications found No Specifications were found, or all Specifications found will illegal. ERROR: Default for Diagram Height does not exist The Directive, Height, in the Defaults File for the Section, Diagram, is missing. WARNINGSWARNING: Not a valid type: BADThe Object type, specified with the -otype command line option of the utility, is not a legal Object type. WARNING: Not a valid type: BADWARNING: Invalid section level parameter value: -1Setting section level value to 1The section level number, specified with the -sl option, must be a non-negative number; otherwise, the section level will be set to the default specified in the Defaults File. WARNING: Section level value is not a number: fooSetting section level value to 1 The section level specified with the -sl option is not a valid number. The section level specified in the Defaults File will be used. WARNING: Invalid Specification, SUBJECT, for CLASSERROR: No Specifications foundThe Specification, specified with the -spec option, is not the proper type for the Meta-Type specified with the -otype option. ERROR: Unable to open file: noread.txtWARNING: Empty Specification: noread.txtWARNING: No Specifications foundThe utility could not open the Specification, specified with the -spec option, therefore; no Specifications were found. WARNING: Invalid value for Height in Diagram The value specified for the Height Directive in the Diagram Section of the Defaults File, is invalid. WARNING: No records were found in the empty Specification. The Specification empty contained no records. WARNING: No Valid records in the $file Specification. The Specification empty contained no valid records. WARNING: Value is not BLANK as required for PRINT: PRINT=SOMETHING The PRINT Directive must have no value. WARNING: Invalid Specification, BAD, for CD The Specification, BAD, is not valid for the Meta-Type, CD. WARNING: Invalid Specification type: BAD The Specification Type, BAD, is not valid. WARNING: Empty Specification: norecords.txt The Specification file, norecords.txt, contains no records. WARNING: A filename was not specified for the Property directive. The Property directive requires a filename. WARNING: Invalid Directive, BAD, in CD Specification The Directive, BAD, is not valid in the Specification for the CD Meta-Type. WARNING: No Variables found for DocExpress A variable file was not found. WARNING: Name Directive in Specification overides command line option The command line argument, -oname, was used and the starting Specification contains the Name Directive. The Name Directive takes precedence. WARNING: Insufficient fields in record: 1Print Records in a Specification require at least two (2) fields. WARNING: Too many fields in record:51=2=3=4=5Records in a Specification cannot contain more than four (4) fields. WARNING: Insufficient Subfields in Subrecord A subrecord must contain at least two (2) subfields. WARNING: Too many Subfields in Subrecord A subrecord must contain no more than four (4) subfields. WARNING: Form not specified in NoForm.txtSetting to 'Multiple' The table Form was not specified in the Table Definitions file. The default Form for the Table from the Defaults File is used. WARNING: Invalid value, BAD, for Table's Form specified in BadFormSetting to 'Multiple' The table Form must be Single or Multiple. The default Form for the Table from the Defaults File is used. WARNING: Column Width is NOT a number in BadColumnWidthSetting to '1' The Column Width is not a valid number. The default Column Width for from the Defaults File is used. WARNING: Illegal Directive, BAD, in BadDirective.txt The Directive, BAD, is not a recognized directive. TERM1="Utilities" TERM2="parse_dcs" TERM3="example"TERM1="parse_dcs" TERM2="example"TERM1="Example" TERM2="parse_dcs"EXAMPLE The command below will generate information about Data Flow Diagrams (DFDs) starting with the rentProduct DFD. The information will be generated in accordance with the default DFD Specification dfd.txt in the Specifications directory $ATAHOME/doc/case_tools/ot/specs/omt. $ATAHOME/doc/case_tools/ot/bin/omt/parse_dcs \-proj Ot4omtExample -config Ot4omtExample.1 \-phase Analysis.1 -system CoreSystem.1 \-o $HOME/.ata/tmp/dfdtree.doc -dps ileaf \-otype DFD -oname rentProductThe default DFD Specification is shown in Figure 3-5. It specifies that a section title will be generated that contains the DFD's name and type. A title will be generated for all DFDs which will contain its name and type. Text for each DFD will be output in accordance with the Specification text.txt in the Specifications directory. The DFD will be output after the diagram's text. All Data Processes on each DFD will be processed in accordance with the Specification dataprocess.txt in the Specifications directory. Type = DFD = = Specifies the type of SpecificationSection = $NAME ($TYPE) = alpha numeric =Directive to generate a sectionTitle = $NAME ($TYPE) = alpha numeric = Directive to generate the diagram's titleText = $ATAHOME/doc/case_tools/ot/specs/omt/text.txt = <Specification> =Directive to include the text associated with the Data Flow DiagramPrint = = blank value =Directive to output the diagramDataProcess = $ATAHOME/doc/case_tools/ot/specs/omt/dataprocess.txt = <Specification> =Directive to process all Data Processes associated with the Data Flow DiagramThe Specification for the Data Processes (i.e., dataprocess.txt) is shown in Figure 3-6. It specifies that a section title will be generated for each Data Process with its name and type. The text describing the Data Process will be output after the section title and followed by sub-sections for the flows (i.e., Control Flows Data Flows, Result Flows, and Update Flows) coming into and out of the Data Process. The flows will be output in accordance with the list Specification (i.e., list.txt) in the default Specification directory. Finally, the child DFD for the Data Process will be processed in accordance with the DFD Specification (i.e., dfd.txt) shown in Figure 3-5. Type = DataProcess = =Specifies the type of SpecificationSection =$NAME ($TYPE)= alpha numeric =Directive to generate a sectionText = $ATAHOME/doc/case_tools/ot/specs/omt/text.txt = <Specification> =Directive to include text associated with the Data ProcessSection =Inputs $INCREMENT= alpha numeric =Directive to generate a sectionFlow = $ATAHOME/doc/case_tools/ot/specs/omt/flowsin.txt = <Specification> =Directive to process all input Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows) of the DataProcessSection =Outputs $INCREMENT= alpha numeric =Directive to generate a sectionFlow = $ATAHOME/doc/case_tools/ot/specs/omt/flowsout.txt = <Specification> =Directive to process all output Flows (i.e., Control Flows, Data Flows, Result Flows, and Update Flows) of the DataProcessDFD = $ATAHOME/doc/case_tools/ot/specs/omt/dfd.txt = <Specification> =Directive to process the Data Flow Diagram associated with the DataProcessThe output from the utility is shown below. 1. rentProduct (Data Flow Diagram)FILENAME="01106.tif" ORIGSEQ="206" ORIGTYPE="I" ORIGDOC="../../sources/dx_utils/dxu_utls.fm5.mif"Figure 1. rentProduct (Data Flow Diagram) 1.1 find Product (Data Process)1.1.1 Inputs 1. Product (Data Flow) 2. product id (Data Flow) 1.1.2 Outputs 1. Product (Data Flow) 1.2 rent Product (Data Process)Description of the "rent Product" function: The Product is registered as rented by the member. All attributes of the Rental must be filled in. 1.2.1 Inputs 1. Member (Data Flow) 2. Product (Data Flow) 1.2.2 Outputs 1. Rental (Result Flow) TERM1="Utilities" TERM2="parse_dcs" TERM3="extraction combinations"TERM1="parse_dcs" TERM2="extraction combinations"Extraction CombinationsIntroductionThe various combinations of starting Objects (e.g., Classes, Data Processes, Class Diagrams, etc.) are identified and described in the Table 3-49. The table contains a description of information that may be extracted and the applicable parameter values. Object Extraction CombinationsStarting Objects may be specified by name or type either the -oname or -otype options or both. The META-TYPES section below identifies and describes the valid Meta-types that may be specified for the -otype option. COLS="4"COLNAME="1" COLWIDTH="19p"COLNAME="2" COLWIDTH="285p"COLNAME="3" COLWIDTH="70p"COLNAME="4" COLWIDTH="70p"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"-onameCOLNAME="4" VALIGN="TOP" MOREROWS="0"-otypeCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all Objects of the specified name and type. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"typeCOLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all Objects of the specified name. COLNAME="3" VALIGN="TOP" MOREROWS="0"nameCOLNAME="4" VALIGN="TOP" MOREROWS="0"COLNAME="1" VALIGN="TOP" MOREROWS="0"COLNAME="2" VALIGN="TOP" MOREROWS="0"Starts extraction with all Objects of the specified type. COLNAME="3" VALIGN="TOP" MOREROWS="0"COLNAME="4" VALIGN="TOP" MOREROWS="0"typeThe starting Specification is used in conjunction with the starting Object, Object type to specify the next set of Objects to extract. See the SPECIFICATIONS section on page 116 for more information. Diagram TypesThe following table identifies and describes the valid diagram types that may be specified for the -otype option. COLS="2"COLNAME="1" COLWIDTH="76p"COLNAME="2" COLWIDTH="372p"COLNAME="1" VALIGN="TOP" MOREROWS="0"TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="1" VALIGN="TOP" MOREROWS="0"CDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"CODCOLNAME="2" VALIGN="TOP" MOREROWS="0"Collaboration DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"CCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Class Communication DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"DFDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Data Flow DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"MGDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Message Generalization DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"SDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Sequence DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"STDCOLNAME="2" VALIGN="TOP" MOREROWS="0"State Transition DiagramCOLNAME="1" VALIGN="TOP" MOREROWS="0"UCDCOLNAME="2" VALIGN="TOP" MOREROWS="0"Use Case DiagramSuper TypesThe following tables identify and describe the valid Object types that may be specified for the -otype option. The first table covers some general Object types called Super Types. The remaining tables cover Object types specific to each diagram type identified in the first table. COLS="3"COLNAME="1" COLWIDTH="91p"COLNAME="2" COLWIDTH="258p"COLNAME="3" COLWIDTH="99p"COLNAME="1" VALIGN="TOP" MOREROWS="0"Object TypeCOLNAME="2" VALIGN="TOP" MOREROWS="0"DescriptionCOLNAME="3" VALIGN="TOP" MOREROWS="0"Meta-ClassCOLNAME="1" VALIGN="TOP" MOREROWS="0"ActorCOLNAME="2" VALIGN="TOP" MOREROWS="0"Actors on CCDs, CODs, DFDs, and UCDsCOLNAME="3" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="1" VALIGN="TOP" MOREROWS="0"ClassCOLNAME="2" VALIGN="TOP" MOREROWS="0"Classes on CDs, CCDs, and STDsCOLNAME="3" VALIGN="TOP" MOREROWS="0"ComponentCOLNAME="1" VALIGN="TOP" MOREROWS="0"ComAssocCOLNAME="2" VALIGN="TOP" MOREROWS="0"Directed Communication Association, and Undirected Communication Association on UCDsCOLNAME="3" VALIGN="TOP" MOREROWS="0"ConnectorCO