1    /* 
     2     *  Copyright (c) 2009 Texas Instruments and others.
     3     *  All rights reserved. This program and the accompanying materials
     4     *  are made available under the terms of the Eclipse Public License v1.0
     5     *  which accompanies this distribution, and is available at
     6     *  http://www.eclipse.org/legal/epl-v10.html
     7     * 
     8     *  Contributors:
     9     *      Texas Instruments - initial implementation
    10     * 
    11     * */
    12    
    13    /*! 
    14     *  ======== IProduct ========
    15     *  Interface specifying product details. 
    16     *
    17     *  This interface allows products describe themselves for the benefit
    18     *  of development tools such as IDE's.  For example, a tool
    19     *  can read the information provided by a product that implements this
    20     *  interface and generate an eclipse plugin that leverages the product's
    21     *  "resources".
    22     *
    23     *  By expressing the product's information in this interface, a product
    24     *  can be delivered into multiple development tools without explicit
    25     *  knowledge of these tools.  For example, an online "product repository"
    26     *  can extract sufficient information from this interface to enable it
    27     *  to provide a searchable catalog of interesting products.
    28     *
    29     *  This is an experimental interface and is subject to change
    30     */
    31    metaonly interface IProduct
    32    {
    33        /*!
    34         *  ======== HelpToc ========    
    35         *  Help table of contents (TOC) element
    36         *
    37         *  A help element is a file inside the product that may be referenced 
    38         *  from a global table of contents.
    39         *
    40         *  @field(label)    Summary description of help element
    41         *  @field(filePath) Path to help documentation relative to  
    42         *                   directory specified in {@link #docsLoc} 
    43         *  @field(tocFile)  Flag indicates whether the element is a 
    44         *                   table of content(TOC) file. Tools may
    45         *                   process TOC files in a special way. For
    46         *                   example a tool to generate eclipse plugins may
    47         *                   want to copy the TOC file in the plugin folder
    48         *                   for integrating with eclipse help.
    49         */
    50        struct HelpToc {
    51            String label;       /*! Help element description */   
    52            String filePath;    /*! Path to help doc */
    53            Bool   tocFile;     /*! Indicates whether element is a TOC file  */
    54        };
    55         
    56        /*!
    57         *  ========= Target ==============
    58         *  Structure containing information on RTSC targets
    59         *
    60         *  Products may specify RTSC target modules by associating
    61         *  them with device name and family regular expressions. This
    62         *  information may be leveraged by tools to derive the RTSC target
    63         *  given a device name and family. Devices implement the
    64         *  {@link xdc.platform.ICpuDataSheet} interface. Devices may be
    65         *  grouped in a family and delivered as a package.
    66         *
    67         *  For example, the device module  TMS320DA830 in the package 
    68         *  `ti.catalog.C6000` may be associated  with a RTSC target 
    69         *  `ti.targets.C674` by setting  `deviceNamePattern` to `TMS320DA8*`,
    70         *  `deviceFamilyPattern` to `C6*`, `packageName` to 
    71         *  `ti.targets` and `baseTargetName` to `C674`. 
    72         *
    73         *  @field(deviceNamePattern)   A regular expression for device names
    74         *  @field(deviceFamilyPattern) A regular expression for device families
    75         *  @field(packageName)         The name of a package containing a
    76         *                              target module that  can be used with
    77         *                              the  devices that match the
    78         *                              device name and family patterns
    79         *  @field(baseTargetName)      The name of the module 
    80         *                              (without the package prefix) in 
    81         *                              the package named by `packageName`.
    82         */
    83        struct Target {
    84            String deviceNamePattern;   /*! Device name regex eg. MSP430*  */
    85            String deviceFamilyPattern; /*! Device family regex eg. C6* */
    86            String packageName;         /*! Package containing RTSC target  */
    87            String baseTargetName;      /*! Name of RTSC target module */
    88        };
    89    
    90        /*!
    91         *  ======== UrlDescriptor ========
    92         *  URL Descriptor structure
    93         *
    94         *  @field(url)  Uniform Resource Locator(URL)
    95         *  @field(text) Summary text for the URL
    96         */
    97        struct UrlDescriptor {
    98            String url;     /*! Uniform Resource Locator(URL) */
    99            String text;    /*! Summary text for the URL */
   100        };
   101    
   102        /*!
   103         *  ======== PluginDescriptor ========
   104         *  Plugin Descriptor structure
   105         *
   106         *  @field(id) Plugin id
   107         *  @field(version)  Plugin version
   108         *  @field(path) Path to plugin relative to `IProduct` implementation
   109         */
   110        struct PluginDescriptor {
   111            String id;          /*! Plugin id */
   112            String version;     /*! Plugin version */
   113            String path;        /*! Plugin path */
   114        };
   115    
   116        /*!
   117         *  ======== MacroDescriptor ========
   118         *  Macro Descriptor structure
   119         *
   120         *  @field(id) Plugin id
   121         *  @field(version)  Plugin version
   122         *  @field(path) Path to plugin relative to `IProduct` implementation
   123         */
   124        struct MacroDescriptor {
   125            String name;     /*! Macro name */
   126            String desc;     /*! Macro description */
   127        };
   128        
   129    
   130        /*!
   131         *  ======== name ========
   132         *  Product name
   133         *
   134         *  String containing product name eg. System BIOS
   135         */
   136        config String name;
   137    
   138        /*!
   139         *  ======== id ========
   140         *  A unique product id 
   141         *
   142         *  For example, product developers may choose to  follow namespace
   143         *  conventions for Java packages or Eclipse plugins to specify a
   144         *  unique id like `org.eclipse.rtsc.xdctools.product`.
   145         *
   146         */
   147        config String id;
   148    
   149    
   150        /*!
   151         *  ======== version ========
   152         *  Product version
   153         *
   154         *  The product version should follow the format 
   155         *  -`major.minor.service.qualifier`  where 
   156         *  `major`,`minor` and `service` are integers and 
   157         *  `qualifier` is a string. Example - 3.16.02.31-eng. 
   158         *
   159         *  Products may  specify their own guidelines for
   160         *  updating `major`,`minor`,`service` and `qualifier` portions of the
   161         *  version number as long as they are unique for the product.
   162         *  Products may also choose to follow popular versioning conventions
   163         *  like those followed for versioning Eclipse plugins.
   164         */
   165        config String version;
   166    
   167        /*!
   168         *  ======== featureId ========
   169         *  A unique feature id
   170         *
   171         *  A feature maybe used by a system to install product upgrades.
   172         *  Typically a system will look at various versions of a
   173         *  feature available in the system and allow the user to upgrade
   174         *  to the latest version. The product developer can use the `featureId`
   175         *  to manage the granularity of product upgrades in a system. For 
   176         *  example the version `3.20.0.00` for product 
   177         *  `org.eclipse.rtsc.xdctools.product` may have the `featureId`
   178         *  `org.eclipse.rtsc.xdctools.product_3.20`.
   179         *  The product developer may allow the upgrade system to pick up
   180         *  patch releases to `3.20.0.00` release by specifying different
   181         *  versions of the product (eg. 3.20.0.01) with `featureId` 
   182         *  `org.eclipse.rtsc.xdctools.product_3.20`
   183         */
   184        config String featureId;
   185    
   186    
   187        /*!
   188         *  ======== updateSite ========
   189         *  Update site for product
   190         *
   191         *  @field(url) the `url` field should contain the URL containing
   192         *  product upgrades.
   193         *
   194         *  @field(text) the `text` field should contain summary description of
   195         *  the update site
   196         */
   197        config  UrlDescriptor updateSite;
   198    
   199    
   200        /*!
   201         *  ======== companyName ========
   202         *  Name of company releasing product
   203         *
   204         *  Example : "Texas Instruments"
   205         */
   206        config String companyName;
   207    
   208        /*!
   209         *  ======== productDescriptor ========
   210         *  Product description
   211         *
   212         *  @field(url) the `url` field should contain the URL of the organization
   213         *  releasing the product.
   214         *
   215         *  @field(text) the `text` field should contain summary description of
   216         *  the product
   217         */
   218        config UrlDescriptor productDescriptor;
   219    
   220        /*!
   221         *  ======== licenseDescriptor ========
   222         *  License information for product
   223         *
   224         *  @field(url) field should contain the URL containing the 
   225         *  license text.
   226         *
   227         *  @field(text) field should contain a summary description of the license
   228         */
   229        config UrlDescriptor licenseDescriptor;
   230    
   231        /*!
   232         *  ======== copyRightNotice ========
   233         *  Copyright notice for product
   234         *
   235         */
   236        config String copyRightNotice;
   237        
   238        /*!
   239         *  ======== repositoryArr ========
   240         *  Repositories contained in product
   241         *
   242         *  Repositories are specified relative to the product installation
   243         *  directory.
   244         */
   245        config String repositoryArr[];
   246    
   247        /*!
   248         *  ======== docsLoc ========
   249         *  Directories containing documents in the product
   250         *
   251         *  Directories are specified relative to the product installation
   252         *  directory.
   253         */
   254        config String docsLocArr[];
   255    
   256        /*!
   257         *  ======== templateModule ========
   258         *  Name of module implementing {@link xdc.tools.product.IProductTemplate}
   259         *
   260         *  Template module should be delivered
   261         *  in the repositories defined in {@link #repositoryArr}
   262         */
   263        config String templateModule;
   264        
   265        /*!
   266         *  ======== productViewModule ========
   267         *  Name of module implementing {@link xdc.tools.product.IProductView}
   268         *
   269         *  Product view module should be delivered
   270         *  in the repositories defined in {@link #repositoryArr}
   271         */
   272        config String productViewModule;
   273    
   274        /*!
   275         *  ======== bundleName ========
   276         *  Product bundle name
   277         *  
   278         *  Product bundle name is embedded in the top level folder name of
   279         *  the product. Example: The top level folder for XDCtools version 
   280         *  3.16.02.31-eng is `xdctools_3_16_02_31-eng`. In this case the 
   281         *  bundle name is `xdctools`.
   282         *  The bundle name maybe used by tools to discover the product 
   283         *  installed on a filesystem.
   284         */
   285        config String bundleName;
   286    
   287        /*!
   288         *  ======== targetArr ========
   289         *  RTSC target modules contained in product
   290         *
   291         *  The RTSC target modules should be delivered
   292         *  in the repositories defined in {@link #repositoryArr}
   293         *
   294         */
   295        config Target targetArr[];
   296    
   297        
   298        /*!
   299         *  ======== helpTocArr ========
   300         *  Array of table of contents elements in product
   301         * 
   302         *  Tools generating table of contents are required
   303         *  to preserve the order of elements specified in this array
   304         */ 
   305        config HelpToc helpTocArr[];
   306    
   307    
   308        /*!
   309         *  ======== tocIndexFile ========
   310         *  Top level index file referred in table of contents
   311         */
   312        config String tocIndexFile;
   313    
   314    
   315        /*!
   316         *  ======== exclusive ========
   317         *  Indicates whether product allows existence of multiple 
   318         *  versions in a system
   319         *
   320         *  When flag is set to `true` it indicates that only one 
   321         *  version of the product can be active in the system. Otherwise
   322         *  the system can handle multiple versions of the same product. 
   323         */
   324        config Bool exclusive = false;
   325    
   326        /*!
   327         *  ======== otherFiles ========
   328         *  Array of paths to files that describe the product
   329         *
   330         *  A product may wish to supply files that describing certain aspects 
   331         *  of itself. For example a product may provide text, images and video
   332         *  files that provide branding information for the product. 
   333         *  These files may then be consumed by tools like IDE's via 
   334         *  hooks defined in the IDE framework.
   335         *  The file path is defined relative to the directory containing the
   336         *  implementation  of `IProduct`.
   337         */
   338        config String otherFiles[];
   339    
   340    
   341        /*!
   342         *  ======== macro ========
   343         *
   344         *  Macro associated with the product 
   345         *
   346         *  Product macros are often used in IDEs for providing
   347         *  portable build environments. A unique macro name should
   348         *  be selected for the product. 
   349         */
   350        config MacroDescriptor macro;
   351    
   352        /*!
   353         *  ======== externalPlugins ========
   354         *
   355         *  External plugins delivered with the product
   356         *
   357         */
   358        config PluginDescriptor externalPlugins[];
   359    
   360    
   361    }
   362    /*
   363     *  @(#) xdc.tools.product; 1, 0, 0,52; 4-27-2011 15:33:59; /db/ztree/library/trees/xdctools/xdctools-e14x/src/
   364     */
   365