Abstract:
A method for generating a software development tool, including creating a definition file defining an action to be performed by the software development tool, creating a schema defining characteristics of a plurality of desired inputs for the software development tool, creating a resource file comprising information required by the software development tool at runtime, and generating the software development tool using the definition file, the schema, and the resource file.

Description:
BACKGROUND OF INVENTION  
         [0001]    Automatic code generation is becoming increasingly common in the software development lifecycle. The need for automatic code generation has resulted from the increasing complexity of applications and the acceptance of various standard and de facto standard application programming interfaces (APIs). For example, Java™ contains many APIs that software developers regard as de facto standard. The complexity of these APIs ranges from simple core Java™ APIs found in Java™ 2 Standard Edition to complex APIs used for specialized applications such as Java™ Media Framework. Automatic code generation tools allow developers to efficiently develop and integrate simple and complex APIs into new software products. Further, automatic code generation tools automate the process of typically tedious and error-prone coding tasks.  
           [0002]    Automatic code generation tools are typically specialized to produce a particular entity, e.g., an Extensible Markup Language (XML) document, an Enterprise JavaBean (EJB), etc. For example, Forte™ for Java™ is an integrated development environment (IDE) capable of creating Enterprise JavaBeans. Forte™ for Java™ contains productivity tools such as a graphical user interface, various wizards, etc. to aid in the development process. A wizard is an interactive help utility within an application that guides the developer through each step of a particular task, such as entering properties of a desired EJB. As new APIs are developed and/or new capabilities are desired, new specialized automatic code generation tools will need to be developed.  
         SUMMARY OF INVENTION  
         [0003]    In general, in one aspect, the invention relates to a method for generating a software development tool, comprising creating a definition file defining an action to be performed by the software development tool, creating a schema defining characteristics of a plurality of desired inputs for the software development tool, creating a resource file comprising information required by the software development tool at runtime, and generating the software development tool using the definition file, the schema, and the resource file.  
           [0004]    In general, in one aspect, the invention relates to a method for generating a software development tool, including creating a definition file defining an action to be performed by the software development tool, creating a schema defining characteristics of a plurality of desired inputs for the software development tool, creating a resource file comprising information required by the software development tool at runtime, creating a command list comprising a set of commands that are used to define the action, generating the software development tool using the definition file, the schema, and the resource file, and generating an annotation defining custom characteristics of a user interface of the software development tool using the schema.  
           [0005]    In general, in one aspect, the invention relates to a method for generating a software development tool, comprising creating a definition file defining an action to be performed by the software development tool, creating a schema defining characteristics of a plurality of desired inputs for the software development tool, creating a resource file comprising information required by the software development tool at runtime, creating a command list comprising a set of commands that are used to define the action, creating an annotation defining semantics of a graphical user interface of the software development tool, and generating the software development tool using the definition file, the schema, the, annotation, and the resource file.  
           [0006]    In general, in one aspect, the invention relates to a computer-readable medium having recorded thereon instructions executable by a processor, the instructions for receiving a definition file defining an action to be performed by the software development tool, receiving a schema defining characteristics of a plurality of desired inputs for the software development tool, receiving a resource file comprising information required by the software development tool at runtime, and generating the software development tool using the definition file, the schema, and the resource file.  
           [0007]    In general, in one aspect, the invention relates to a computer system to generate a software development tool, comprising a processor, a memory, an input means, a display device, and instructions stored in the memory for enabling the computer system under control of the processor, to perform: receiving a definition file defining an action to be performed by the software development tool, receiving a schema defining characteristics of a plurality of desired inputs for the software development tool, receiving a resource file comprising information required by the software development tool at runtime, receiving a command list comprising a set of commands that are used to define the action, generating the software development tool using the definition file, the schema, and the resource file, and generating an annotation defining custom characteristics of a user interface of the software development tool using the schema.  
           [0008]    In general, in one aspect, the invention relates to a computer system to generate a software development tool, comprising a processor, a memory, an input means, a display device, and software instructions stored in the memory for enabling the computer system under control of the processor, to perform: receiving a definition file defining an action to be performed by the software development tool, receiving a schema defining characteristics of a plurality of desired inputs for the software development tool, receiving a resource file comprising information required by the software development tool at runtime, receiving a command list comprising a set of commands that are used to define the action, receiving an annotation defining semantics of a graphical user interface of the software development tool, generating the software development tool using the definition file, the schema, the annotation, and the resource file.  
           [0009]    In general, in one aspect the invention relates to an apparatus for generating a software development tool, comprising means for creating a definition file defining an action to be performed by the software development tool, means for creating a schema defining characteristics of a plurality of desired inputs for the software development tool, means for creating a resource file comprising information required by the software development tool at runtime, means for creating a command list comprising a set of commands that are used to define the action, means for generating the software development tool using the definition file, the schema, and the resource file, and means for generating an annotation defining custom characteristics of a user interface of the software development tool using the schema.  
           [0010]    In general, in one aspect, the invention relates to an apparatus for generating a software development tool, comprising means for creating a definition file defining an action to be performed by the software development tool, means for creating a schema defining characteristics of a plurality of desired inputs for the software development tool, means for creating a resource file comprising information required by the software development tool at runtime, means for creating a command list comprising a set of commands that are used to define the action, means for creating an annotation defining semantics of a graphical user interface of the software development tool, and means for generating the software development tool using the definition file, the schema, the annotation, and the resource file.  
           [0011]    Other aspects and advantages of the invention will be apparent from the following description and the appended claims. 
       
    
    
     BRIEF DESCRIPTION OF DRAWINGS  
       [0012]    [0012]FIG. 1 illustrates a typical computer.  
         [0013]    [0013]FIG. 2 illustrates a flow diagram for a software development tool generator in accordance with one embodiment of the invention.  
         [0014]    [0014]FIG. 3 illustrates a software development tool generator integrated within an Integrated Development Environment in accordance with one embodiment of the invention.  
         [0015]    [0015]FIG. 4 illustrates a “Choose Name” panel in accordance with one embodiment of the invention.  
         [0016]    [0016]FIG. 5 illustrates a “Specify Session Property” panel in accordance with one embodiment of the invention.  
         [0017]    [0017]FIG. 6 illustrates a software development tool integrated within an Integrated Development Environment in accordance with one embodiment of the invention. 
     
    
     DETAILED DESCRIPTION  
       [0018]    Exemplary embodiments of the invention will be described with reference to the accompanying drawings. Like items in the drawings are shown with the same reference numbers.  
         [0019]    In the following detailed description of the invention, numerous specific details are set forth in order to provide a more thorough understanding of the invention. However, it will be apparent to one of ordinary skill in the art that the invention may be practiced without these specific details. In other instances, well-known features have not been described in detail to avoid obscuring the invention.  
         [0020]    The present invention relates to a method for generating a specialized software development tool. Further, the present invention relates to using a definition file, a schema, and a resource file to generate the software development tool. Further, the present invention relates to generating a software development tool with a user interface.  
         [0021]    The present invention may be implemented on virtually any type computer regardless of the platform being used. For example, as shown in FIG. 1, a typical computer ( 10 ) includes a processor ( 12 ), associated memory ( 14 ), a storage device ( 16 ), and numerous other elements and functionalities typical of today&#39;s computers (not shown). The computer ( 10 ) may also include input means, such as a keyboard ( 18 ) and a mouse ( 20 ), and output means, such as a monitor ( 22 ). Those skilled in the art will appreciate that these input and output means may take other forms in an accessible environment.  
         [0022]    [0022]FIG. 2 illustrates a flow diagram for a software development tool generator in accordance with one embodiment of the invention. The software development tool generator (SDTG) ( 24 ) takes a definition file ( 26 ), a schema ( 28 ), and a resource file ( 30 ) as inputs, and generates a software development tool (SDT) ( 34 ).  
         [0023]    The definition file ( 26 ) references all required files necessary for building the SDT ( 34 ). In one embodiment of the invention, the definition file is an XML document. Further, the definition file defines actions that the tool may perform.  
         [0024]    In one embodiment, the definition file includes 7 elements: &lt;Name&gt;, &lt;General&gt;, &lt;Source&gt;, &lt;Metadata&gt;, &lt;UserInterface&gt;, &lt;Runtime&gt;, and &lt;Action Definition&gt;. The &lt;Name&gt; element contains the name of the tool that the SDTG ( 24 ) produces. The &lt;General&gt; element contains information of general relevance such as the version of the SDT ( 34 ), a short description of the SDT ( 34 ), and a long description of the SDT ( 34 ).  
         [0025]    The &lt;Source&gt; element contains references to other files that serve as input to the SDTG ( 24 ), as well as describes general outputs. The &lt;Source&gt; element includes a number of sub-elements. The sub-elements may include, but are not limited to: a &lt;JavaPackage&gt; sub-element, a &lt;SchemaFile&gt; sub-element, an &lt;AnnotationsFile&gt; sub-element, a &lt;ResourceFile&gt; sub-element, and a &lt;PropertyFile&gt; sub-element. The &lt;AnnotationsFile&gt; and &lt;ResourceFile&gt; sub-elements are optional. The &lt;ResourceFile&gt; sub-element may be included multiple times. The &lt;JavaPackage&gt; sub-element identifies the Java™ package that is to contain all the Java™ source code generated for the SDT ( 34 ). The &lt;SchemaFile&gt; sub-element identifies the file that contains the schema ( 28 ). The schema ( 28 ) describes the input that the SDT ( 34 ) collects to generate a desired entity. The &lt;AnnotationsFile&gt; sub-element identifies the file that contains the annotations ( 36 ). The annotations ( 36 ) are a formal mechanism allowing the user to declare and/or customize the user interface of the SDT ( 34 ). In one embodiment, the SDTG ( 24 ) initially generates the annotations ( 36 ) and subsequently provides access to them such that the user may customize the user interface of the SDT ( 34 ). In another embodiment of the invention, the annotations ( 36 ) are generated by the user and input into the SDTG ( 34 ). The &lt;ResourceFile&gt; identifies files that are required by the SDT ( 34 ) at runtime. The &lt;PropertyFile&gt; sub-element includes functionality to support internationalization, localization, and accessibility. In one embodiment of the invention, the user of the SDTG ( 24 ) provides the &lt;PropertyFile&gt;. In another embodiment of the invention, the SDTG ( 24 ) generates the &lt;PropertyFile&gt;.  
         [0026]    Referring back to the definition file ( 26 ), the &lt;Metadata&gt; element identifies files that contain metadata default values for input specified in the schema ( 28 ). Metadata is an internal representation of data collected from the user used by the SDTG ( 24 ). In one embodiment of the invention, metadata is represented using Extensible Mark-up Language (XML). The metadata default values are consistent with the schema ( 28 ). The &lt;UserInterface&gt; element describes how the SDT&#39;s ( 34 ) functionality is made available within the user interface of the SDT ( 34 ). For example, the &lt;UserInterface&gt; element may specify that a specific functionality may only be accessible through a toolbar. The &lt;Runtime&gt; element describes the semantics of the runtime environment. The &lt;ActionDefinition&gt; element describes actions that the SDT ( 34 ) may perform. If the SDT ( 34 ) is to perform multiple actions, then each action is defined. The actions are defined in terms of a series of pre-defined commands. For example, an action may contain an &lt;Ant&gt; command followed by a &lt;Transform&gt; command. Where the &lt;Ant&gt; command processes input using an Ant script, the result is then passed to the &lt;Transform&gt; command which subsequently applies an Extensible Stylesheet Language Transformation (XSLT) to produce a desired entity.  
         [0027]    The following code illustrates an exemplary definition file, in accordance with the embodiment described above.  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     Code Sample 1. Definition File                                 1   &lt;?xml version=“1.0” encoding=“UTF-8”?&gt;        2   &lt;DefinitionFile&gt;        3   &lt;Name&gt;SessionEJBGenerator&lt;/Name&gt;             4   &lt;General&gt;             5   &lt;Version&gt;1.0&lt;/Version&gt;        6   &lt;ShortDescrpt&gt; Generates EJBs &lt;/ShortDescrpt&gt;        7   &lt;LongDescrpt&gt;Collects the data to generate EJBs&lt;/LongDescrpt&gt;             8   &lt;/General&gt;             9   &lt;Source&gt;             10   &lt;JavaPackage&gt;com.sun.forte4j.session&lt;/JavaPackage&gt;        11        12   &lt;Directory&gt;gen&lt;/Directory&gt;        13   &lt;SchemaFile&gt;session.xsd&lt;/SchemaFile&gt;        14   &lt;AnnotationsFile/&gt;        15   &lt;PropertyFile&gt;Bundle.properties&lt;/PropertyFile&gt;        16   &lt;ResourceFile&gt;bean.xsl&lt;/ResourceFile&gt;        17   &lt;ResourceFile&gt;home.xsl&lt;/ResourceFiie&gt;        18   &lt;ResourceFile&gt;remote.xsl&lt;/ResourceFile&gt;        19   &lt;ResourceFile&gt;sesejb.xsl&lt;/ResourceFile&gt;        20   &lt;ResourceFile&gt;ejbdd.xsl&lt;/ResourceFile&gt;             21   &lt;/Source&gt;        22   &lt;Metadata&gt;             23   &lt;Extension&gt;ses&lt;/Extension&gt;        24   &lt;Default&gt;             25   &lt;ResourceFile&gt;SessionEJBGenerator.ses&lt;/ResourceFile&gt;             26   &lt;/Default&gt;        27   &lt;RootElement&gt;Session&lt;/RootElement&gt;        28   &lt;ReplacementRootElement&gt;/&lt;/ReplacementRootElement&gt;             29   &lt;/Metadata&gt;        30   &lt;UserInterface&gt;             31   &lt;DisplayName&gt;Session EJB Generation Module&lt;/DisplayName&gt;        32   &lt;Description&gt;Creates Session EJBs&lt;/Description&gt;        33   &lt;Category&gt;J2EE Tools&lt;/Category&gt;        34   &lt;ExplorerNode&gt;             35   &lt;Icon&gt;             36   &lt;ResourceFile&gt;SessionEJBDataIcon.gif&lt;/ResourceFile&gt;             37   &lt;/Icon&gt;        38   &lt;ContextMenu&gt;             39   &lt;Action&gt;             40   &lt;Name&gt;Generate&lt;/Name&gt;        41   &lt;LabelKey&gt;LBL_Action_Generate&lt;/LabelKey&gt;        42   &lt;Shortcut/&gt;             43   &lt;/Action&gt;        44   &lt;Separator/&gt;        45   &lt;Folder&gt;             46   &lt;Name&gt;Tools&lt;/Name&gt;        47   &lt;Action&gt;             48   &lt;Name&gt;Build&lt;/Name&gt;        49   &lt;LabelKey&gt;LBL_Action_Build&lt;/LabelKey&gt;        50   &lt;Shortcut/&gt;             51   &lt;/Action&gt;        52   &lt;Separator/&gt;             53   &lt;/Folder&gt;             54   &lt;/ContextMenu&gt;             55   &lt;/ExplorerNode&gt;        56   &lt;Toolbar&gt;             57   &lt;Name&gt;Build&lt;/Name&gt;        58   &lt;Action&gt;             59   &lt;Name&gt;Generate&lt;/Name&gt;        60   &lt;LabelKey&gt;LBL_Action_Generate&lt;/LabelKey&gt;        61   &lt;Icon&gt;             62   &lt;ResourceFile&gt;SessionEJBDataIcon.gif&lt;/ResourceFile&gt;             63   &lt;/Icon&gt;             64   &lt;/Action&gt;        65   &lt;Separator/&gt;        66   &lt;Action&gt;             67   &lt;Name&gt;Build&lt;/Name&gt;        68   &lt;LabelKey&gt;LBL_Action_Build&lt;/LabelKey&gt;             69   &lt;/Action&gt;             70   &lt;/Toolbar&gt;             71   &lt;Menu&gt;             72   &lt;Name&gt;Tools&lt;/Name&gt;        73   &lt;Action&gt;             74   &lt;Name&gt;Generate&lt;/Name&gt;        75   &lt;LabelKey&gt;LBL_Action_Generate&lt;/LabelKey&gt;        76   &lt;Shortcut&lt;{circumflex over ( )}G&lt;/Shortcut&gt;             77   &lt;/Action&gt;        78   &lt;Folder&gt;             79   &lt;Name&gt;ISV Tools&lt;/Name&gt;             80   &lt;Action&gt;             81   &lt;Name&gt;Generate&lt;/Name&gt;        82   &lt;LabelKey&gt;LBL_Action_Generate&lt;/LabelKey&gt;        83   &lt;Shortcut&gt;{circumflex over ( )}G&lt;/Shortcut&gt;             84   &lt;/Action&gt;             85   &lt;/Folder&gt;             86   &lt;/Menu&gt;             87   &lt;/UserInterface&gt;             88   &lt;Runtime&gt;             89   &lt;Logger&gt;             90   &lt;MessagePrefix&gt;SessionEJB: &lt;/MessagePrefix&gt;        91   &lt;DefaultSetting&gt;*:*&lt;/DefaultSetting&gt;             92   &lt;/Logger&gt;             93   &lt;Classpath/&gt;             94   &lt;DependentModules/&gt;             95   &lt;/Runtime&gt;             96   &lt;ActionDefinition&gt;             97   &lt;Name&gt;Generate&lt;/Name&gt;        98             99   &lt;Command&gt;&lt;Transform&gt;            100   &lt;TransformFile&gt;&lt;Name&gt;sesejb.xsl&lt;/Name&gt;&lt;/TransformFile&gt;       101   &lt;OutputFile&gt;&lt;Name&gt;&lt;xsl:value-of select=“translate       102   (Session/Package,&#39;.&#39;, &#39;/&#39;) ”/&gt;/&lt;xsl:value-of            103   select=“Session/EjbName”/&gt;.sesejb&lt;/Name&gt;&lt;/OutputFile&gt;            104   &lt;/Transform&gt;&lt;/Command&gt;       105       106   &lt;Command&gt;&lt;Transform&gt;       107   &lt;TransformFile&gt;&lt;Name&gt;ejbdd.xsl&lt;/Name&gt;&lt;/TransformFile&gt;       108   &lt;OutputFile&gt;&lt;Name&gt;&lt;xsl:value-of select=“translate            109   (Session/Package,&#39;.&#39;, &#39;/&#39;) ”/&gt;/&lt;xsl:value-of            110   select=“Session/EjbName/&gt;.ejbdd&lt;/Name&gt;&lt;/OutputFile&gt;            111   &lt;/Transform&gt;&lt;/Command&gt;       112       113   &lt;Command&gt;&lt;Transform&gt;       114   &lt;TransformFile&gt;&lt;Name&gt;bean.xsl&lt;/Name&gt;&lt;/TransformFile&gt;            115   &lt;OutputFile&gt;&lt;Name&gt;&lt;xsl:value-of select=“translate       116   (Session/Package,&#39;.&#39;, &#39;/&#39;) ”/&gt;/&lt;xsl:value-of            117   select=“Session/EjbName”/&gt;EJB.java&lt;/Name&gt;&lt;/OutputFile&gt;            118   &lt;/Transform&gt;&lt;/Command&gt;       119            120   &lt;Command&gt;&lt;Transform&gt;       121   &lt;TransformFile&gt;&lt;Name&gt;home.xsl&lt;/Name&gt;&lt;/TransformFile&gt;       122   &lt;OutputFile&gt;&lt;Name&gt;&lt;xsl:value-of select=“translate            123   (Session/Package,&#39;.&#39;, &#39;/&#39;) ”/&gt;/&lt;xsl:value-of            124   select=“Session/EjbName”/&gt;Home.java&lt;/Name&gt;&lt;/OutputFile&gt;            125   &lt;/Transform&gt;&lt;/Command&gt;       126            127   &lt;Command&gt;&lt;Transform&gt;       128   &lt;TransformFile&gt;&lt;Name&gt;remote.xsl&lt;/Name&gt;&lt;/TransformFile&gt;       129   &lt;OutputFile&gt;&lt;Name&gt;&lt;xsl:value-of select=“translate(Session/Package,            130   &#39;.&#39;, &#39;/&#39;) ”/&gt;/&lt;xsl:value-of       131   select=“Session/EjbName”/&gt;.java&lt;/Name&gt;&lt;/OutputFile&gt;            132   &lt;/Transform&gt;&lt;/Command&gt;       133            134   &lt;/ActionDefinition&gt;            135   &lt;/DefinitionFile&gt;                  
 
         [0028]    In the code listed above referred to as “Code Sample 1”, lines  4 - 8  define the properties of the &lt;General&gt; element. For example, the short description denoted as &lt;ShortDescrpt&gt; provides the following short description “Generates EJBs”.  
         [0029]    Lines  9 - 21  define the properties of the &lt;Source&gt; element. In this particular example, the &lt;Source&gt; element lists a &lt;SchemaFile&gt; as session.xsd. Further, the &lt;Source&gt; element lists five &lt;ResourceFiles&gt;: beans.xsl, home.xsl, remote.xsl, sesjb.xsl, and ejbdd.xsl. Lines  22 - 29  define the properties of the &lt;Metadata&gt; element. For example, the file containing the default metadata values is SessionEJBGenerator.ses. Lines  30 - 87  define properties of the &lt;UserInterface Element&gt;. For example, the &lt;UserInterface&gt; element specifies that the action “Generate” is located in the “tool” menu and have a short cut of “{circle over ( )}G.” Lines  96 - 124  define the properties of the &lt;ActionDefinition&gt; element. In this example, there is only one action “Generate” that is defined as a series of transform commands. For example, the first &lt;transform&gt; command takes in the sesejb.xsl document as input and generates a .sesejb file as output.  
         [0030]    Referring back to FIG. 2, the schema ( 28 ) defines the data to be collected from the user of the SDT ( 34 ) at runtime. Consider the following exemplary schema referenced by the definition file above.  
                                                                                                                                                                                                                                                                                                                                                                                                                                       Code Sample 2. Schema.xsd                                     1   &lt;?xml version=“1.0” encoding=“UTF-8”?&gt;            2   &lt;xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”                 3   targetNamespace=“http://ejb.forte4j .sun.com”            4   xmlns=“http://ejb.forte4j .sun.com”            5   elementFormDefault=“qualified”&gt;                 6   &lt;xsd:element name=“Session”&gt;                 7   &lt;xsd:complexType&gt;                 8   &lt;xsd:sequence&gt;                 9   &lt;xsd:element name=“EjbName” type=“xsd:string”/&gt;           10   &lt;xsd:element name=“Package” type=“xsd:string”/&gt;           11   &lt;xsd:element name=“SessionType”&gt;                12   &lt;xsd:simpleType&gt;                13   &lt;xsd:restriction base=“xsd:string”&gt;                14   &lt;xsd:enumeration value=“Stateful”/&gt;           15   &lt;xsd:enumeration value=“Stateless”/&gt;                16   &lt;/xsd:restriction&gt;                17   &lt;/xsd:simpleType&gt;                18   &lt;/xsd:element&gt;           19   &lt;xsd:element name=“TransactionType”&gt;                20   &lt;xsd:simpleType&gt;                21   &lt;xsd:restriction base=“xsd:string”&gt;                22   &lt;xsd:enumeration value=“Container”/&gt;           23   &lt;xsd:enumeration value=“Bean”/&gt;                24   &lt;/xsd:restriction&gt;                25   &lt;/xsd:simpleType&gt;                26   &lt;/xsd:element&gt;           27   &lt;xsd:element name=“TransactionAttribute”&gt;                28   &lt;xsd:simpleType&gt;                29   &lt;xsd:restriction base=“xsd:string”&gt;                30   &lt;xsd:enumeration value=“Mandatory”/&gt;           31   &lt;xsd:enumeration value=“Never”/&gt;           32   &lt;xsd:enumeration value=“NotSupported”/&gt;           33   &lt;xsd:enumeration value=“Required”/&gt;           34   &lt;xsd:enumeration value=“RequiresNew”/&gt;           35   &lt;xsd:enumeration value=“Supports”/&gt;                36   &lt;/xsd:restriction&gt;                37   &lt;/xsd:simpleType&gt;                38   &lt;/xsd:element&gt;                39   &lt;/xsd:sequence&gt;                40   &lt;/xsd:complexType&gt;                41   &lt;/xsd:element&gt;                42   &lt;/xsd:schema&gt;                      
 
         [0031]    Referring to the schema above referred to as “Code Sample 2”, line  9  defines a first required input “EjbName” and indicates that “EjbName” must be of type string. Line  10  defines a second required input “Package” and indicates that “Package” must also be of type string. Lines  11 - 17  define a third required input “SessionType.” Unlike the first and the second required input, the third required input may only have one of two possible values: “Stateful” or “Stateless.” Similarly, lines  19 - 26  define a fourth required input “TransactionType” which may only have one of two possible values: “Container” or “Bean.” Lines  27 - 38  define a fifth and final required input “TransactionAttribute.” The “TransactionAttribute” may have one of six possible values: “Mandatory”, “Never”, “NotSupported”, Required”, “RequiresNew”, and “Supports.” In one embodiment of the present invention, the schema ( 28 ) is represented as an XML document.  
         [0032]    Referring back to FIG. 2, the resource file ( 30 ) contains data required by the SDT ( 34 ) at runtime. The resources files typically define how the data, input by the user of the SDT ( 34 ), is to be processed to produce the desired entity, e.g., an EJB. In one embodiment of the invention, the resource file ( 30 ) is an Extensible Stylesheet Language (XSL) document. In the particular case of an XSL document, the document defines transformations of the metadata stored in an XML format. Resource files ( 30 ) typically reference variables within the metadata using descriptors defined in the schema ( 28 ).  
         [0033]    The following code illustrates a resource file ( 30 ) referenced by the definition file above.  
                                                                                                                                                                                                         Code Sample 3. Bean.xsl                                 1   &lt;?xml version=“1.0”?&gt;             2   &lt;xsl:transform xmlns:xsl=http://www.w3.org/1999/XSL/Transform        3   version=“1.0”&gt;        4   &lt;xsl:output method=“xml” indent=“yes”/&gt;        5   &lt;xsl:strip-space elements=“*”/&gt;        5             6   &lt;xsl:template match=“Session”&gt;        7        8   &lt;ejb-jar&gt;             9   &lt;enterprise-beans&gt;            10   &lt;session&gt;            11   &lt;description&gt;&lt;xsl:value-of select=“EjbName”/&gt; Session       12   Bean&lt;/description&gt;       13   &lt;display-name&gt;&lt;xsl:value-of select=“EjbName”/&gt;&lt;/displayName&gt;       14   &lt;ejb-name&gt;&lt;xsl:value-of select=“EjbName”/&gt;&lt;/ejb-name&gt;       15   &lt;home&gt;&lt;xsl:value-of select=“Package“/&gt;.&lt;xsl:value-of       16   select=“EjbName”/&gt;Home&lt;/home&gt;       17   &lt;remote&gt;&lt;xsl:value-of select=“Package”/&gt;.&lt;xsl:value-of       18   select=“EjbName”/&gt;&lt;/remote&gt;       19   &lt;ejb-class&gt;&lt;xsl:value-of select=“Package”/&gt;.&lt;xsl:value-of       20   select=“EjbName”/&gt;EJB&lt;/ejb-class&gt;       21   &lt;session-type&gt;&lt;xsl:value-of select=“SessionType”/&gt;&lt;/transaction-type&gt;       22   &lt;transaction-type&gt;&lt;xsl:value-of       23   select=“TransactionType”/&gt;&lt;/transaction-type&gt;            24   &lt;/session&gt;            25   &lt;/enterprise-beans&gt;       26       27   &lt;assembly-descriptor&gt;            28   &lt;container-transaction&gt;            29   &lt;method&gt;            30   &lt;ejb-name&gt;&lt;xsl:value-of select=“EjbName”/&gt;&lt;/ejb-name&gt;       31   &lt;method-name&gt;*&lt;/method-name&gt;            32   &lt;/method&gt;       33   &lt;trans-attribute&gt;&lt;xsl:value-of       34   select=“TransactionAttribte”/&gt;&lt;/trans-attribute&gt;            35   &lt;/container-transaction&gt;            36   &lt;/assembly-descriptor&gt;            37   &lt;/ejb-jar&gt;       38            39   &lt;/xsl:template&gt;            40   &lt;/xsl:transform&gt;                  
 
         [0034]    The resource file listed above, referred to as “Code Sample 3”, contains definitions for processing data received from the user of the SDT ( 34 ) and generating a portion of a desired entity. Specifically, in the resource file listed above, line  13  indicates that the display name for the EJB being generated should have the value of the “EjbName” input. Further, line  15  indicates that the home interface, denoted as &lt;home&gt;, should have the value of the “Package” input. Further, line  21  indicates that the session-type should have the value of the “SessionType” input. Further, line  23  indicates that the transaction-type should have the value of the “TransactionType” input. Finally, line  33  indicates that the trans-attribute should have the value of the “TransactionAttribute” input.  
         [0035]    Referring to FIG. 2, the command list ( 32 ) defines a set commands that may be used in the definition file ( 26 ) to define the actions. In one embodiment of the invention, the command list ( 32 ) is provided to the SDTG ( 24 ) as an input. In another embodiment of the invention, the command list is coded into the SDTG ( 24 ). When the SDT ( 34 ) is generated by the SDTG ( 24 ), the SDT ( 34 ) contains the required functionality to interpret commands used within the &lt;ActionDefinition&gt;.  
         [0036]    In one embodiment, each command within the command list ( 32 ) is defined with a required input and output. Further, the functionality to process each command is also specified. For example, the &lt;Transform&gt; command used in the definition file (refer to Code Sample  1 , lines  96 - 134 ), listed above, uses a &lt;TransformFile&gt; parameter as input and an &lt;Output&gt; parameter to specify the location of the output of the command. In one embodiment of the invention, the &lt;Transform&gt; command initiates a Xalan™ Extensible Stylesheet Language Transformations (XSLT) processor that performs the transformations, specified in the &lt;TransformFile&gt;, upon the metadata collected from the user.  
         [0037]    While only one specific command has been detailed, those skilled in the art will appreciate that other commands may be incorporated into the SDT ( 34 ). For example, the SDT ( 34 ) may contain functionality to execute an Ant script, copy and delete data, execute an external executable, invoke another action, execute a Java™ method, raise a dialogue to a user, etc.  
         [0038]    In one embodiment of the invention, the SDTG ( 24 ) is a Java™ component that is run in a stand alone runtime environment.  
         [0039]    In another embodiment of the present invention, the SDTG ( 24 ) is a module with an Integrated Development Environment (IDE), such as Forte™ for Java™.  
         [0040]    [0040]FIG. 3 illustrates a software development tool generator integrated within an Integrated Development Environment in accordance with one embodiment of the invention. In this particular example, the SDTG ( 24 ) is generating a “sessionEJBGenerator” tool and has been integrated into the File System ( 38 ). Additionally, the functionality of the SDTG ( 34 ) is included in the menu ( 40 ). Specifically, in this example, the menu option to generate the tool is “build me a tool” ( 42 ).  
         [0041]    Once the SDT ( 34 ) has been generated, the user of the SDTG ( 34 ) may modify the source code or the annotations document prior to deploying the tool to an end user. This provides the user a means to customize the user interface of the tool by modifying the annotations, and a means to optimize the tool for a given platform or change its executable behavior by modifying the source code.  
         [0042]    As shown in FIG. 2, the SDTG ( 24 ) generates a SDT ( 24 ) and Annotations ( 36 ). Annotations define how the information specified in the schema ( 28 ) is obtained from the user, i.e., the layout of the user interface to the tool, etc. In one embodiment of the invention, the annotations ( 36 ) are stored as an XML document. Further, the decisions regarding the means for obtaining information from the user, e.g., to use a text box versus a drop-down menu to obtain a particular piece of information, is typically coded into the annotations ( 36 ) by the SDTG ( 24 ). The following code illustrates exemplary annotations corresponding to the schema listed above (refer to Code Sample 2).  
                                                                                                                                                                                                                   Code Sample 4. Annotations.xml                                 1   &lt;?xml version=“1.0”encoding=“UTF-8”?&gt;        2   &lt;ToolUI xmlns:xsd=http://www.w3.org/2001/XMLSchema             3   name=“SessionEJBGenerator”&gt;             4   &lt;Wizard name=“SessionEJBGeneratorWizard” xmlbean=“Session” label=“New        5   Session”&gt;             6   &lt;PanelRef ref=“targetChooser” built-in=“target” label=“Choose             7   Name”/&gt;             8   &lt;PanelRef ref=“SessionPanel” source=“.” multiplicity=“One”             9   xmlbean“Session” label=“Specify Session Properties”/&gt;            10   &lt;/Wizard&gt;       11   &lt;Panel name=“SessionPanel” xmlbean=“Session” multiplicity”One=”       12   label=“Session Properties”&gt;            13   &lt;TextField name=“EjbNameField” source=“EjbName” label=“EjbName”/&gt;       14   &lt;TextField name=“PackageField” source=“Package” label=“Package”/&gt;       15   &lt;RadioPanel source=“SessionType” label=“SessionType”&gt;            16   &lt;Choice value=“Stateful” label=“Stateful”/&gt;       17   &lt;Choice value=“Stateless” label=“Stateless”/&gt;            18   &lt;/RadioPanel&gt;       19   &lt;RadioPanel source=“TransactionType” label=“TransactionType”&gt;            20   &lt;Choice value=“Container” label=“Container”/&gt;       21   &lt;Choice value=“Bean” label=“Bean”/&gt;            22   &lt;/RadioPanel&gt;       23   &lt;ComboBox source=“TransactionAttribute”            24   label=“TransactionAttribute”&gt;            25   &lt;Choice value=“Mandatory” label=“Mandatory”/&gt;       26   &lt;Choice value=“Never” label=“Never”/&gt;       27   &lt;Choice value=“NotSupported” label=“NotSupported”/&gt;       28   &lt;Choice value=“Required” label=“Required”/&gt;       29   &lt;Choice value=“RequiresNew” label=“RequiresNew”/&gt;       30   &lt;Choice value=“Supports” label=“Supports/&gt;            31   &lt;/ComboBox&gt;            32   &lt;/Panel&gt;            33   &lt;/ToolUI&gt;                  
 
         [0043]    In the annotations document listed above referred to as “Code Sample 4”, lines  4 - 10  indicate that a wizard is used to obtain data from the user. Specifically, there are two panels: a “Choose Name” panel and a “Specify Session Properties” panel. Lines  11 - 31  detail how the various session property values are t obtained from the user. For example, line  13  indicated that the “EjbName” property is obtained using a TextField. Additionally, lines  15 - 18  indicate that the “SessionType” property is obtained using a RadioPanel. Further, lines  23 - 31  indicate that the “TransactionAttribute” property is to be obtained using a ComboBox.  
         [0044]    In one embodiment of the invention, the SDT ( 34 ) is a Java™ component that is run in a stand alone runtime environment.  
         [0045]    In another embodiment of the present invention, the SDT ( 34 ) is module with an Integrated Development Environment (IDE) such as Forte™ for Java™. In this particular example, the SDTG ( 24 ) has generated a tool to create EJBs using the “build me a tool command” ( 44  in FIG. 3). The user of the SDT ( 34 ) subsequently uses SDT ( 34 ) to generate an EJB.  
         [0046]    [0046]FIGS. 4 and 5 illustrate the wizard used to collect data to generate a desired EJB. FIG. 4 illustrates a “Choose Name” panel that is referenced above in the annotations document. The “Choose Name” panel ( 46 ) includes a textbox ( 48 ) to enter the name of the EJB to be generated. Further, the “Choose Name” panel contains a number of buttons for navigation ( 50 ).  
         [0047]    [0047]FIG. 5 illustrates a “Specify Session Property” panel ( 52 ) that is referenced in the above annotations document. The “Specify Session Property” panel ( 52 ) includes a textbox ( 54 ) to enter the “EjbName”, a textbox ( 56 ) to enter the “Package”, a radio button panel ( 58 ) to specify the “SessionType”, a radio button panel ( 60 ) to specify the “TransactionType”, a combo box ( 62 ) to specify the “TransactionAttribute”, and a number of buttons for navigation ( 50 ). Once the user clicks the “Finish Button” ( 64 ). The information collected by the wizard from the end user is typically stored as metadata.  
         [0048]    The end user may subsequently apply an action or multiple actions to the metadata using actions defined in the &lt;ActionDefinition&gt;. FIG. 6 illustrates a software development tool integrated within an Integrated Development Environment, in accordance with one embodiment of the invention. In this particular example, the EJB generator tool only has one action, “Generate EJB” ( 66 ), that is accessible via a pop-up menu ( 60 ). Once the user selects the “Generate EJB” action, the EJB generator tool applies the commands listed within the action to generate the desired entity.  
         [0049]    The invention has one or more of the following advantages. The present invention allows new software development tools to be generated and deployed in a shorter time span. Further, the present invention allows software development companies to readily develop internal tools customized to their specific requirements. Further, the present invention allows a user to create a series of tools which are consistent across a given environment. Further, the present invention allows graphical user interfaces to be created from the schema without the need to write additional source code. Further, the present invention allows the definition of semantics of a software development tool to be done through a schema and definition file without the need to write additional source code.  
         [0050]    While the invention has been described with respect to a limited number of embodiments, those skilled in the art, having benefit of this disclosure, will appreciate that other embodiments can be devised which do not depart from the scope of the invention as disclosed herein. Accordingly, the scope of the invention should be limited only by the attached claims.