DOCGEN 6.0 Document your webMethodsď›› solutions DocGen User Guide DocGen User Guide Vanguard Integration Pty Ltd Suite 2.01, 365 Little Collins Street Melbourne, VIC 3000 Phone: +61 3 8676 0445 Fax: +61 3 9602 3445 Email: info@vanguardintegration.com www.vanguardintegration.com © Vanguard Integration Pty Ltd Melbourne, Australia All rights reserved Integration Server is a trademark and webMethods is a registered trademark of webMethods, Inc. Java is a trademark of Sun Microsystems. Other products and brand names are trademarks of their respective owners. Table of Contents About this guide ................................................................................................................................... 1 What is DocGen? .................................................................................................................................. 1 DocGen System Requirements ........................................................................................................... 1 Installing the software ........................................................................................................................ 2 Installing your license ......................................................................................................................... 2 Starting DocGen ................................................................................................................................... 4 Key concepts........................................................................................................................................ 5 Generating your first “Documentation Set”....................................................................................... 7 Generation overview............................................................................................................................ 9 Specifying the output location ......................................................................................................... 10 Selecting packages to document..................................................................................................... 11 Linking to other documentation sets............................................................................................... 13 Identifying the documentation set ................................................................................................... 14 Excluding dependencies ................................................................................................................... 15 Securing access to documentation.................................................................................................. 15 Locating resources (icons) ............................................................................................................... 16 Overview of the Status / History page ............................................................................................. 22 Changing a documentation set Id and title ..................................................................................... 23 Re-generating documentation .......................................................................................................... 24 Removing documentation from the history page ............................................................................ 24 Deleting generated documentation.................................................................................................. 24 Outdated documentation................................................................................................................... 25 Scheduling re-generation of documentation ................................................................................... 26 Changing the documentation’s look-and-feel.................................................................................. 26 Controlling access to DocGen .......................................................................................................... 27 SOFTWARE LICENSE AGREEMENT .................................................................................................. 28 D O C G E N U S E R G U I D E Introduction S Y M B O L K E Y Key concept About this guide Useful tip This user guide will help you get the most out of DocGen. Definition Note The symbol key (left) shows the symbols used in this manual and their meaning. What is DocGen? DocGen is a documentation generation tool for webMethods packages. It creates high quality, indexed, hyperlinked documentation for all of the major service and documentation types used in typical webMethods solutions. DocGen System Requirements Edit your startup (server.sh or DocGen is developed to run on webMethods Integration Server version 6.0 and beyond. Documentation generation consumes system resources in the following manner: server.bat) to increase the memory available to the webMethods Integration Server Java process. generated documentation consumes disk space documentation indexes are built and held in memory while generating. The more services that are included in a single documentation set, the bigger the indexes will be, and consequently more memory will be required generating documentation uses a single webMethods Server Thread (per concurrently executing documentation generation task). generating documentation is a CPU-intensive operation. The faster your CPU, the faster your documentation will be generated. 1 1 Chapter Getting Started Installing the software DocGen is provided as an installable webMethods package. Simply place the package (zip) file in the Integration Server’s replicate/inbound directory and use the webMethods Administrator Package Management page to install and activate the package. Your package name will be slightly different to the one pictured, reflecting a different build number. FIGURE 1. Installing DocGen using Package Management. Consult the webMethods Administrator Guide documentation for further information. It is recommended that you place your license file in the IntegrationServer’s config directory. This protects the license file from Installing your license DocGen requires a valid license file in order to function. CustomWare provides the license file to you when you purchase DocGen. You can also request a temporary license from the CustomWare web site for the purpose of evaluating DocGen. The license file is called DocGen.lic, and can be placed in the config directory of either the Integration Server, or the DocGen package itself. being overwritten if you install future releases of DocGen. 2 You can also paste the contents of a license file into the text area on the License Info page, which is useful if you don’t have a simple way to access to the Integration Server’s config directory through the file system. 3 2 Chapter Quick Start Guide Use this section to get a brief overview of some of DocGen’s key concepts and generate your first documentation. Starting DocGen You may need to “refresh” your browser window to see the updated Solutions menu. DocGen installs itself as a “solution” in the Integration Server, and will appear in the Solutions menu on the Integration Server’s Administration page. Selecting the DocGen… menu item will open the DocGen home page in a new browser window. You can also access the DocGen home page directly with the URL http://server:port/DocGen. Replace “server” and “port” with the correct values for your Integration Server (e.g. http://localhost:5555/DocGen). FIGURE 2. DocGen installs as a Solution. DocGen will start with the “About” page open. The sidebar menu is used to navigate to other DocGen pages. 4 A “node” is a single element (e.g. a service or document type) included in a package. Flow and FIGURE 3. DocGen "About" page Java services, Triggers, Specifications, and Document types are all examples of a node. Key concepts DocGen creates HTML documentation for one or more webMethods packages at a time. Each request to generate documentation creates a new “documentation set” (containing the documentation for one or more selected packages). 5 Documentation Sets can contain one or more packages. A documentation FIGURE 4. set generates one node page per documented node. Node pages are not duplicated within a documentation set. Linked packages are included in the index, but documentation for A single documentation set can contain one or more packages. A documentation set contains individual documentation pages for each node in the set (node pages), plus package-level indexes for each package in the set. In addition, there are top-level index pages to provide overall indexes across all packages in the set and links to individual package indexes. Node pages are only generated for packages you have selected to “document” or “document excluding source” (more on these options below). Index pages provide access to node pages and are generated for all packages that are included in the documentation set. Each node is documented once and only once within a single documentation set, but indexes may be created multiple times if documentation is being generated “inside the package being generated” for multiple packages. linked nodes is accessed through browser (HTML) links. Documentation sets can be “linked” to previously generated documentation (for other packages). For example, you might create a documentation set for a utility package and then link to it from individual solution packages. Linked packages are included in the top-level and package-level indexes for the new documentation set, but the documentation for nodes within the linked package is accessed via HTML hyperlinks. The example diagram (below) shows two documentation sets, “SolutionSet” and “UtilitySet”. UtilitySet contains two utility packages, one of which (“UtilityA”) is used in the “SolutionA” package. In creating the SolutionSet documentation, the UtilityA package is included as a “linked” package. The dashed lines indicate that links (hyperlinks) will exist to the UtilityA package from both the SolutionA package node pages as well as the SolutionSet package- and top-level indexes. FIGURE 5. SolutionSet documentation set with "linked" UtilityA package from previously generated UtilitySet. 6 Generating your first “Documentation Set” Let’s generate some documentation! Select the “Generate” option from the sidebar menu to open the Generate page. This is where you specify the options for generating a documentation set. We’ll look at the various options on this page in more detail in the next chapter. For now, just select one of your solution packages using the radio buttons under the “Document (and link)” option then hit the “Generate” button. FIGURE 6. Generating documentation for a single package. You will get a message indicating that the request to generate the documentation has been made and directing you to use the status/history page to check progress. FIGURE 7. Documentation generate request has been made. Documentation is generated in a separate execution “thread”. Select the “Status / History” option from the sidebar menu to check progress of the current documentation generation job(s). 7 FIGURE 8. Progress is displayed while generating. Once the documentation job completes, the documentation set will appear in the list of “Generated documentation sets”. Depending on the speed of your FIGURE 9. Generated documentation is listed in the status/history page. server and the size of the package Use the URL link to open the generated documentation. being generated, the documentation job may have already completed by the time you open the status / history page. FIGURE 10. Sample generated documentation. That’s all there is to it! 8 3 Chapter Generating Documentation Use this section to gain a detailed understanding of how to generate sophisticated documentation libraries for your solutions. Generation overview The Generate page is used to specify the options used to generate a documentation set. FIGURE 11. The Generate page. 9 Use the generate page to specify: 1) A location for your generated documentation; 2) The package(s) to be documented in this set; 3) Any (previously documented) packages (if any) to link to from this set. You can also specify: 1) A title and unique ID for your documentation; 2) Dependencies to exclude from the generated documentation; 3) Security permissions (only when generating documentation within packages); 4) Whether resources should be copied into the new documentation set (the default) or linked to from another package. Specifying the output location If you generate directly into the /pub directory for a package, any Use the drop-down control beside “Create documentation” to choose a location for your documentation. You can generate documentation in one of three possible locations: 1) Inside the package being documented. existing home page for that package will be replaced by DocGen’s generated index.html page. 10 Use this option to create documentation you want to include with the package. The documentation is created relative to the package’s directory (i.e. IntegrationServer/<packageName>/…). It is strongly recommended that you place the documentation under either the /pub subdirectory or the /web subdirectory where it can be served up as web pages by the Integration Server. The suggested default is /pub/html_doc. Generate your documentation into a separate “Documentation” package, directly into the /pub directory. You can then access your documentation using http://yourServer:p You cannot specify ort/Documentation access control or a . resource location for documentation sets generated into a directory. 2) In a separate package. Use this option to create documentation in a separate package. The documentation is created relative to the package’s directory (i.e. IntegrationServer/<separatePackageName>/…). It is strongly recommended that you place the documentation under either the /pub subdirectory or the /web subdirectory where it can be served up as web pages by the Integration Server. The suggested default is /pub/html_doc. Once you select this option, you are able to specify a destination package for the documentation (from your existing packages), or create a new package to hold the generated documentation. 3) In a (file-system) directory Use this option to create documentation into a directory. The documentation is created into the directory you specify (the “directory name” and “path within directory” are combined to form the full toplevel destination directory). Any relative paths will be relative to the Integration Server’s current working directory. Selecting packages to document A documentation set must contain at least one Select the packages you want to include in the documentation set from the list of packages on the Generate page, by clicking the radio button in either the “Document (and link)” or “Exclude source” column. Clicking the underlined column heading will set all packages to the selected option. documented package. Fully documented packages will have a page for each node in the package. Flow and Java nodes will include the source code for the node. 11 FIGURE 12. Sample node - documented with source code Use the “exclude source” option to If you choose to “exclude source” for a package, then there will still be a page for all nodes in the package, but pages for any Flow and Java nodes will not include their source code. generate API-style documentation. 12 FIGURE 13. Sample node - documented with source code excluded Linking to other documentation sets DocGen does not check whether or not linked documentation A documentation set contains a node page for every node in the documented packages in the set. You can also access the documentation for nodes in other packages by “linking” to those other packages. You would commonly do this for utility packages, by first creating a “utility” documentation set containing the utility package(s), and then linking to the utility packages when you generate documentation sets for your solutions. exists. You can generate linked documentation after the documentation that is linking to it. Create a separate documentation set for your utility packages, and then link to those “Linked” packages will appear in the indexes for your documentation set, and any references within the documented packages (e.g. an INVOKE step in a Flow service calling a service in a linked package) will appear as hyperlinks in the generated documentation of the node making the reference. DocGen uses this approach (automatically) when you choose to document multiple packages with a location of “inside the package being documented”. Each documented package will have a set of index pages that include all documented nodes, but the node pages will only be created once. Each node page will appear only in the documentation pages generated for it’s package. packages from your solutions documentation. 13 Links to other nodes are created using standard HTML hyperlinks (e.g. “href” tags). To insert a link from your documented node to a node in a linked package, DocGen needs to be able to construct a link URL. This is done using either the “Standard Link URL prefix” or the “Link URL Prefix Override”. When creating the link, DocGen will replace any occurrence of “<packageName>” with the name of the linked package. Use relative links FIGURE 14. Use the link prefix options to control how references to linked packages are formed. where possible – this makes your generated documentation more usable from the file system. Don’t include “/pub” when specifying links to documentation within packages – this does not form To override the standard link prefix, you need to first select the “Override prefix” checkbox. This will enable the “Link URL Prefix Override” for that package, allowing you to type in the appropriate link prefix for that package. The link URL prefix is included verbatim (with the exception of any “<packageName>” string replacement done by DocGen). For example, assume that you have generated documentation for a utility package (“Utilities”) into the pub/docs directory of that package, and you now want to generate documentation for another package containing links to the Utilities package documentation. When generating your new package’s documentation, you would select the “Link Only” option for the Utilities package, and set the Link URL Prefix Override for Utilities to “/<packageName>/docs”. part of the URL to access the contents of the /pub directory. Identifying the documentation set Each “documentation set” has a unique documentation set ID used to identify it, plus a title which appears on the first page of the documentation. Use the “Documentation set ID” and “Documentation set title” fields on the 14 Generate page to set these values. You can also edit these values for generated documentation sets from the Status/History page. Clicking one of the column titles (e.g. “Exclude dependencies”) sets all packages to the selected FIGURE 15. Use the set ID and title fields to identify your documentation set state. Excluding dependencies When generating documentation for utility packages, first exclude all dependencies from other packages, and then select the utility packages to document. Each node page has a “Used / Referenced by” section that lists places where that node is referenced from. If the reference is from within the documentation set, then the list item will be a hyperlink; otherwise it will appear as plain text. By default, DocGen shows you every place that a particular node is used or referenced from. There are occasions where you don’t want all of these dependencies listed. This is particularly true in the case of utility packages, which might be used by many solutions – or if you want to generate documentation for use by external parties (who might be confused by references to services that they don’t have on their servers). For publicly distributed documentation, Use the “Exclude dependencies” option to exclude selected packages from the list of packages used to create the “used / referenced from” dependency lists for documented nodes. use the “exclude source” option. Securing access to documentation If you generate documentation into the Integration Server’s package hierarchy, by selecting a location of either “inside the package being documented” or “in a separate package”, you can use the Integration Server’s 15 ACL security facilities to help protect your documentation from unauthorized access. For example, you could use this feature to ensure that only members of the “Developers” group can view documentation containing source code. If you are using ACL security, you need to reload the package(s) containing the Use the Read access control (ACL security) drop down list box to select an appropriate ACL group you want to allow access to the generated documentation. A “.access” file is generated for each page in each directory. You need to reload the package(s) for the .access file to take effect. You can read more about security and using ACL settings to secure web pages in the webMethods Administrator’s Guide documentation. documentation for the security .access files to take effect. For additional protection, you would need to secure file-system access to the generated documentation files. FIGURE 16. Use Read access control (ACL Security) to help secure your documentation. Icons used in the generated documentation are copied from the DocGen package’s Locating resources (icons) Generated documentation contains a number of icons used to identify node types, variable types and for general navigation. These icons are copied from DocGen’s pub/resources directory, into a doc-resources directory in the generated documentation. \pub\resources directory. 16 We recommend You can choose to reference icons from a previously generated documentation set, using the “Access to resources (e.g. icons)” drop-down setting. Simply select another package, and the icons will be referenced from that package rather than copied into the new package (using the package’s link prefix). This option is not available when generating into a directory. you leave the resource location setting at the default value, letting DocGen Using this option will save a small amount (about 120KB) of disk space per documented package for the icons currently used by DocGen. The flip side of this relatively minor efficiency is that the newly documented package’s documentation is reliant on the “resource” package being available so it can access the icons. copy resources as they are needed. 17 4 Chapter The structure of generated documentation Use this section to gain a better understanding of the content and structure of the documentation created by DocGen. To better understand the options available to you when generating documentation, it is useful to look at the content and underlying structure of some generated documentation. To illustrate, we will generate a documentation set containing two packages (ATestPackage and SampleQueueAndResubmit) plus a link back to a package documented earlier (ASamplePackage). The SampleQueueAndResubmit package will be created with source code excluded, which is a useful option for generating API documentation. Figure 17. Generating the example documentation. Only relevant options are shown here. Once the generation process completes, the documentation set will be listed on the status/history page, with a link to the index.html (home) page. 18 Let’s examine the output documentation created by DocGen. The title you specify when generating appears on the first page seen by users of the documentation. Use it to identify the documentation set. Figure 18. Content of the sample documentation (combining several independent screenshots). The top-level index contains multiple different indexes into the documentation:- short (node) name, full (namespace) name, by node type and by namespace (directory style). Each package in the documentation set contains the same index types for nodes within that package. Documented packages contain a page for each documented node. For Flow and Java nodes, source code is generally included, but you may choose to exclude it when generating. Now let’s take a look at the directory structure for this documentation set. 19 FIGURE 19. Output directory structure. The top-level directory is named according to the options provided on the generate page. In this case, we chose to generate into the file-system, so the top-level directory is a combination of the directory name plus the path within the directory. When generating into a package, only the path within the (package) directory is available as an option. The top-level directory contains the top-level index pages and index.html page. The icons used throughout the documentation are also located directly under the top-level directory in a sub-directory called “doc-resources”. Linked packages do not contain node pages. A linked package is a link to node documentation in another documentation set. Under the top-level directory is a sub-directory for each package included in the documentation set. This package sub-directory contains the packagelevel index pages. If the package is documented in this set (either including or excluding source code) then the package subdirectory also includes a directory structure that reflects the webMethods namespace, containing documentation for the nodes within the package. When you generate documentation for multiple packages with the location set to “inside the package being generated”, DocGen creates documentation inside each of the documented packages. Each package’s documentation will contain top-level and package-level subdirectories (plus the doc-resources directory). The package level subdirectory corresponding to the package containing the documentation will contain the node pages for that package. 20 FIGURE 20. Directory structure for two packages generated "inside the package being generated" 21 5 Chapter Managing Documentation Use this section to discover how to manage the documentation you have generated through the Status / History page. Overview of the Status / History page The Status / History page shows you the progress of any document sets being currently generated, and also provides access to all of the document management functions. The status / history page is sorted to show current documentation first, followed by outdated documentation. Documentation is sorted by Documentation Set Id. 22 FIGURE 21. Overview of the Status / History page. Changing a documentation set Id and title Use the edit button documentation set. to change the unique Id and/or title of a Selecting the icon will open the “Edit Documentation Set” page. Provide new values for the documentation set and hit “Submit”. FIGURE 22. The Edit Documentation Set page. You need to regenerate the documentation set for any changes to the documentation set title to take effect in the generated documentation. 23 Re-generating documentation There may be a small delay Use the regenerate button to regenerate a documentation set. This is a convenient way to update your documentation after you have made changes to your code. between a generate request and a documentation set appearing in the list of currently generating documentation. While it is being regenerated, a documentation set is removed from the list of generated documentation (this helps to prevent multiple requests to regenerate the same documentation set). It will display in the list of currently generating documentation. Removing documentation from the history page Use the remove button to remove a documentation set from the history page. The generated documentation is still available, but the documentation set will no longer be displayed on the history page, and is not available for other management tasks (e.g. regenerate). Deleting generated documentation You cannot delete outdated documentation sets. Deleting a documentation set has no effect on linked or outdated packages within Use the delete button to delete a generated documentation set, including all generated pages. This will also remove the documentation set from the history page, making it unavailable for other management tasks (e.g. regenerate). The “Path” of the package(s) in the documentation set identifies the top-level directory for each package. This is where the delete operation will start. The delete operation deletes files from your system, so use it carefully. At the top-level directory (where index.html is created), it will only delete files that DocGen has created (i.e. any other files at the top-level are preserved). All other generated directories (i.e. package-level and documented node directories) are removed without checking the contents. Directories that DocGen did not create are preserved. that set. Regenerating a documentation set makes all If you have generated documentation directly into the home page of a package (i.e. <packageName>/pub), then DocGen will re-create a default index.html page for that package after deleting the one generated by DocGen. packages in the set current again. 24 Outdated documentation If you document two packages into the same location, then files generated from the first documentation set are overwritten by the second set. The documentation attached to the first documentation set is considered by DocGen to be “outdated”. Outdated packages are displayed with a shaded background, and their “Last generated” status contains a link back to the package that has replaced them. If a documentation set contains only outdated packages, then the entire documentation set is treated as “outdated”. Take backups of your packages Outdated documentation sets display at the bottom of the history list, using a different colored title bar and italic font. regularly! Delete operations are ignored for outdated and linked packages. You can only delete generated documentation through its current package. 25 6 Chapter Advanced Topics This section is intended for advanced users, and describes ways to enhance and customize the way DocGen works. Scheduling re-generation of documentation You can use the built-in scheduler in the Integration Server to automatically re-generate documentation sets. This is useful during times of active code changes to ensure that your documentation stays “in-sync” with the actual code. To do this, create a simple Flow service that calls DocGen.ui:refreshDocSet, passing the Id of the documentation set you want to regenerate (e.g. “D O C G E N _ 0 0 0 0 5 ” . Use pub.flow:debugLog to record the message output by refreshDocSet in your server log. Then, use the Integration Server’s task scheduler to execute your Flow service at an appropriate time (e.g. 8pm each night). Changing the documentation’s look-and-feel The look and feel of the documentation created by DocGen is affected by: Make a backup before changing any of these files! 1. icons used throughout the documentation, contained in the DocGen package’s /pub/resources directory, 2. stylesheet styles applied to text within the documentation, contained in the DocGen package’s /templates directory, and, 26 3. template files used to generate the documentation, contained in the DocGen package’s /templates directory. You are free to make modifications and/or replace any of these files to alter the look and feel of the generated documentation. Make sure you keep a backup copy of the original files though, just in case! Controlling access to DocGen Access to DocGen is controlled through the .access file located in the DocGen packages/pub directory. Initially, this is set to allow access by users within the Integration Server’s “Developers” ACL group. You can alter this file to select a more appropriate ACL group. 27 SOFTWARE LICENSE AGREEMENT PLEASE READ THIS SOFTWARE LICENCE AGREEMENT CAREFULLY. IF YOU DO NOT AGREE WITH ANY PART OF THIS AGREEMENT, DO NOT CLICK THE "I ACCEPT" BUTTON, OR USE THE SOFTWARE ON YOUR COMPUTER/SERVER. IF YOU CLICK THE "I ACCEPT" BUTTON OR USE THE SOFTWARE, THIS IS TAKEN TO MEAN THAT YOU AGREE WITH ALL ITEMS IN THIS AGREEMENT. This is the Software License Agreement ("SLA") between Vanguard Integration Pty Ltd whose ABN is 52 096 310 619 and whose registered office is 2.01, 365 Little Collins Street, Melbourne in the State of Victoria ("The Licensor") and The Licensee ("You") who has been granted a non-exclusive, non- transferable licence agreement for the right to use one of Licensor’s products (the "Software"), subject to one of the following conditions: (a) in return for a one-time license fee payable up front; or, (b) for the purpose of evaluating the Software for a period of not more than thirty (30) calendar days (the "Evaluation Period"), commencing from the earliest of the "License Start Date" as displayed in the "License Info" screen, or the date you first installed the Software. The Software's "License Info" screen displays information about Your currently installed license, including "License type" and "Licensed Users". The Licensor offers two (2) types of licenses: (a) Evaluation - This license type is designed to provide You with the opportunity to evaluate the Software prior to purchasing it. Up to 10 users may use an Evaluation license. You may not keep any documentation generated by the Software under an Evaluation license, unless you purchase a Professional or Corporate license. (b) Corporate - This license type is designed for use by project development teams working for a single company, and is designed to include use by contractors and other non-employees of Your company. A Corporate license is limited to a maximum number of users (the "Licensed User Limit"), representing the total number of individuals who are licensed to use the Software. You may install a Corporate license on any servers and/or desktop and/or portable machines within Your corporate network, provided that you take reasonable steps to ensure that: the total number of users who can access the Software on those servers will not exceed Your Licensed User Limit; and The Software is not made available for use outside of your corporate network. Note: The Licensed User Limit for a Corporate License may be "Unlimited users" meaning there is no restriction on the number of users who can use The Software, provided that The Software is used only on machines within the Licensee's corporate network. All clauses in this agreement apply to all license types, except where a clause or section of a clause is clearly designated as applying to a particular license type only. Where a clause or part of a clause applies only to a particular type of license, the clause(s) or part(s) of the clause(s) that apply to Your license type are indicated by the name of the license type displayed in square brackets, in the following manner: This text applies to all license types, and: [Evaluation] this text applies to Evaluation licenses only. [Corporate] this text applies to Corporate licenses only. SOFTWARE LICENSE 1. The Licensor is an Australian citizen and/or an Australian legal entity. 2. The Licensor, as creator of an original intellectual work or product, is the sole Owner of the Software and, under the Copyright Act 1968 (as amended) (Cth), has exclusive rights to publish and reproduce the Software, to assign, lease or licence others to use or deal with the Software, and/or to restrict any person or legal entity from using or dealing with the Software. 3. Under existing arrangements to protect the intellectual products of creators within Australia, which do not include any form or scheme of registration, and under reciprocal international treaties, these exclusive rights are automatically protected and shall continue to be protected within Australia and worldwide for at least fifty years from the moment this intellectual product was made available to the public. 4. This is a one-time, non-exclusive, non-transferable licence to use the Software: (i) [Evaluation] for evaluation purposes only. (ii) [Corporate] in return for the one-time license fee paid by You as full and final settlement. 5. The Licensor grants to You the right to install under Licence: (i) [Evaluation] one (1) copy of the Software on a single server to be used for evaluation purposes only, by up to 10 network users at any one time. (ii) [Corporate] multiple copies of the Software on multiple computers within Your corporate network, to be used by a number of individual network users not to exceed your Licensed User Limit. 6. The Software is licensed, not sold. 7. The Software is protected by intellectual property laws of Australia and current applicable international treaties. 28 8. The Licensor grants to You the right to make copies of the Software for use as backup copies of the Software in service and maintenance and restoration of the computer system and/or network server and for no other purpose. 9. If this Software contains documentation that is provided in the form of a book or printed material, You may print one copy of such printed documentation as is needed for each of the licensed users of the Software on Your computer system or network (implied by Clause 5 above) for use by the users in training in and operation of the Software and for no other purpose. 10. If this Software contains documentation that is provided only in electronic form, You may make this electronic documentation available on the network upon which the Software is installed and active or may print one copy of such electronic documentation for each of the licensed users of the Software on Your computer system or network (implied by Clause 5 above) for use by the users in training in and operation of the Software and for no other purpose. 11. All title and intellectual property rights in and to the Software and any and all accompanying electronic and/or printed materials, and any copies of the Software are owned by and shall remain with the Licensor. 12. All rights not specifically granted under this SLA are reserved by the Licensor. 13. You may not edit or modify the Software in any manner whatsoever without the express, signed, written agreement of the Licensor. 14. You may not market, distribute, sublicense, lease, or rent the Software to a third party without the express, signed, written agreement of the Licensor. 15. You may not reverse engineer, decompile, or disassemble the Software, without the express, signed, written agreement of the Licensor. 16. You may not use the Software in connection with any purpose or in connection with any Internet site that is likely to: (a) infringe any intellectual property rights of the Licensor or any other third party; or (b) violate any applicable law of the Commonwealth of Australia or any State or Territory of Australia; or (c) promote racism, hatred, or pornography. 17. Without prejudice to any other rights, the Licensor may terminate this SLA if You fail to comply with the terms and conditions of this SLA and, in the event that this occurs, You agree to immediately remove the Software from Your computer or server or network or web site. In such event, You must destroy all copies of the Software and all of its related documentation and component parts. 18. [Evaluation] This evaluation license terminates on expiry of the Evaluation Period. On termination of this evaluation license, unless you purchase a Corporate or Professional license, You agree to remove the Software from Your computer or network or web site, and destroy all copies of the Software and all of its related documentation and component parts, and any output files created by the Software in the course of Your evaluation. 19. If You have acquired this Software Licence in Australia, this SLA is governed by the Copyright Act 1968 (as amended) (Cth), any current relevant laws of the Commonwealth of Australia, any applicable international treaties entered into and agreed upon by the Commonwealth of Australia, and any applicable laws and regulations of the State of Victoria. You must agree to submit to the jurisdictions of the courts of Victoria. 20. The Software is designed to support development activities. Installation or use of The Software on production servers is not recommended or supported by the Licensor. LIMITED WARRANTY 21. Subject to clause 24, the Licensor warrants that the Software will perform substantially in accordance with the accompanying documentation for a period of 90 days from the date You install the Software on Your computer or server. 22. To the extent permitted by any laws of the Commonwealth of Australia or any relevant laws or regulations of the State of Victoria, the Licensor makes no warranties with respect to the Software and all other terms, conditions, warranties, undertakings or inducements, whether express or implied, are hereby expressly excluded. 23. In the event that any conditions or warranties are implied by the Trade Practices Act 1974 (as amended) ("The Act"), the entire liability of the Licensor for breach of any such conditions or warranties (other than a condition or warranty implied by s.69 of the Act) and the exclusive remedy to You shall be limited to, at the Licensor's choice, either (a) the replacement of the Software or the supply of an equivalent product, (b) the repair of the Software, (c) the payment of the cost of replacing the Software or of acquiring an equivalent product, or (d) the payment of having the goods repaired. Any replacement or repaired Software will be warranted from the moment of replacement or repair for the unused remainder of the original warranty period or 30 days, whichever is longer. 24. This limited warranty is void to the extent that failure of the Software results from modification, accident, abuse or misapplication or any failure by You to observe obligations under Clauses 12, 13, 14, 15 and/or 20 of this Agreement. 29