platform-update-home/doc/eclipse_update_packaging.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16, Thu Jan 23 18:23:59 2003 UTC revision 1.17, Thu Jan 23 21:34:37 2003 UTC
# Line 14  Line 14 
14    
15  <h1> Eclipse Platform<br>  <h1> Eclipse Platform<br>
16              Update Packaging Conventions</h1>              Update Packaging Conventions</h1>
17              <font size="-1">Revision Date: 01/22/2003 9:56AM - Version: 2.0.18</font><br>               <font size="-1">Revision Date: 01/22/2003 9:56AM - Version:
18    2.0.18</font><br>
19             <a href="../../../../../hglegal.htm"><img src="ngibmcpy.gif"             <a href="../../../../../hglegal.htm"><img src="ngibmcpy.gif"
20   border="0" height="12" width="195">   border="0" height="12" width="195">
21             </a>             </a>
# Line 53  Line 54 
54                                </li>                                </li>
55             <li><small>2.0.14<br>             <li><small>2.0.14<br>
56                </small>                </small>
57    
58      <ul>      <ul>
59                  <li><small>added &lt;site&gt;&lt;feature&gt; label tag</small><br>                  <li><small>added &lt;site&gt;&lt;feature&gt; label tag</small><br>
60                  </li>                  </li>
# Line 63  Line 65 
65               </small> </li>               </small> </li>
66    
67    <ul>    <ul>
68                 <li><small>added &lt;includes name,optional,match,search_location</small>                  <li><small>added &lt;includes name,optional,match,search-location</small>
69       &gt;</li>       &gt;</li>
70                 <li><small>added &lt;import feature,patch&gt;</small></li>                 <li><small>added &lt;import feature,patch&gt;</small></li>
71    
# Line 92  Line 94 
94               <li> <font size="-1">2.0.9</font></li>               <li> <font size="-1">2.0.9</font></li>
95    
96    <ul>    <ul>
97              <li> <font size="-1">&lt;site&gt; &lt;feature&gt; changes - additional               <li> <font size="-1">&lt;site&gt; &lt;feature&gt; changes -
98       markup to optionally expose feature identification information to speed  additional      markup to optionally expose feature identification information
99     up  searches</font></li>  to speed    up  searches</font></li>
100               <li> <font size="-1">removed obsolete text</font></li>               <li> <font size="-1">removed obsolete text</font></li>
101               <li> <font size="-1">web-triggered update not in 2.0</font></li>               <li> <font size="-1">web-triggered update not in 2.0</font></li>
102               <li> <font size="-1">no assist in 2.0 for license/ "key file"               <li> <font size="-1">no assist in 2.0 for license/ "key file"
# Line 160  Line 162 
162   href="#Plug-In_Archive">Plug-In     Archive</a>  <br>   href="#Plug-In_Archive">Plug-In     Archive</a>  <br>
163             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Packaging_NL">Packaging             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Packaging_NL">Packaging
164      NL</a>   <br>      NL</a>   <br>
165             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
166   href="#Translated_Feature_Information"> Translated Feature Information</a>  <a href="#Translated_Feature_Information"> Translated Feature Information</a>
167        <br>        <br>
168             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
169   href="#Translated_Plug-In_Information"> Translated Plug-In Information</a>  <a href="#Translated_Plug-In_Information"> Translated Plug-In Information</a>
170        <br>        <br>
171             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a
172   href="#Packaging_Target-Specific_Support"> Packaging Target-Specific Support</a>   href="#Packaging_Target-Specific_Support"> Packaging Target-Specific Support</a>
# Line 217  Line 219 
219    is  merged  into <i>feature</i>. Features define the packaging structure    is  merged  into <i>feature</i>. Features define the packaging structure
220   for a group of related plug-ins, plug-in fragments, and optionally non-plug-in   for a group of related plug-ins, plug-in fragments, and optionally non-plug-in
221     files. Features are treated purely as an installation and packaging construct.     files. Features are treated purely as an installation and packaging construct.
222     They do not play a role during Eclipse plug-in execution. Features do     They do not play a role during Eclipse plug-in execution. Features do not
223  not    nest. They are simply an inclusive "manifest" of the plug-ins, fragments     nest. They are simply an inclusive "manifest" of the plug-ins, fragments
224    and other files that make up that feature. If features are logically made    and other files that make up that feature. If features are logically made
225    up of plug-ins from "sub-features", the top-level feature "manifest" must    up of plug-ins from "sub-features", the top-level feature "manifest" must
226    be fully resolved at packaging time. <li> <b>default feature archive format</b></li>    be fully resolved at packaging time. <li> <b>default feature archive format</b></li>
# Line 226  Line 228 
228             R1.0 components were packaged as a single Java .jar containing             R1.0 components were packaged as a single Java .jar containing
229  the   component    manifest as well as the actual plug-in files. The problem  the   component    manifest as well as the actual plug-in files. The problem
230  with   this approach    is lack of granularity at download time. In R2.0,  with   this approach    is lack of granularity at download time. In R2.0,
231  the feature   archive consists    of multiple separate .jars - one .jar per   the feature   archive consists    of multiple separate .jars - one .jar
232  plug-in and   fragment, plus one   .jar for the actual feature information.  per  plug-in and   fragment, plus one   .jar for the actual feature information.
233  The Installation   and Update support   selectively downloads only those jars   The Installation   and Update support   selectively downloads only those
234  required for the  installation. <li>    <b>site map</b></li>  jars required for the  installation. <li>    <b>site map</b></li>
235               <br>               <br>
236             Default Eclipse update server must contain a <i>site map</i> file              Default Eclipse update server must contain a <i>site map</i>
237    (site.xml).     This is an evolution of the R1.0 install.index support.  file   (site.xml).     This is an evolution of the R1.0 install.index support.
238  The  rationale for    using a structured site defined by the map rather than  The  rationale for    using a structured site defined by the map rather than
239  a  "free form" web   site, is the ability to present a consistent installation  a  "free form" web   site, is the ability to present a consistent installation
240    experience for  the user. Also, this provides the necessary structure for    experience for  the user. Also, this provides the necessary structure for
# Line 246  Line 248 
248     support  for understanding the Eclipse installation structure. In particular,     support  for understanding the Eclipse installation structure. In particular,
249     the native uninstallers will, by default, remove plug-in files that were     the native uninstallers will, by default, remove plug-in files that were
250    installed using the native installer without regard to these plug-ins being    installed using the native installer without regard to these plug-ins being
251    needed by other features. As a result, features installed using native    needed by other features. As a result, features installed using native installers
252  installers     must be written into private product-specific installation      must be written into private product-specific installation location and
253  location and   not  the shared Eclipse installation location. The shared    not  the shared Eclipse installation location. The shared Eclipse is made
254  Eclipse is made   aware  of the produce-specific location via an installed    aware  of the produce-specific location via an installed "link file". <li>
255  "link file". <li>           <b>custom  install handling</b></li>            <b>custom  install handling</b></li>
256               <br>                <br>
257             In many cases the standard installation handling supplied by Eclipse              In many cases the standard installation handling supplied by
258     is  not be sufficient to handle various custom requirements. To accommodate  Eclipse     is  not be sufficient to handle various custom requirements.
259      this,  R2.0 Eclipse supports custom install handlers packaged as part  To accommodate     this,  R2.0 Eclipse supports custom install handlers packaged
260  of   the feature  and executed during the feature installation. <li> <b>path  as part of   the feature  and executed during the feature installation. <li>
261   naming   conventions</b></li>      <b>path  naming   conventions</b></li>
262               <br>               <br>
263             R1.0 mandated the use of the various identifiers and versions             R1.0 mandated the use of the various identifiers and versions
264  inside    the   packaged archives (eg. directory path names for plug-ins).  inside    the   packaged archives (eg. directory path names for plug-ins).
265  This approach     has proven to be ackward and error prone. In 2.0, the packaging  This approach     has proven to be ackward and error prone. In 2.0, the packaging
266  requirements     no longer mandate that path names of packaged files precisely  requirements     no longer mandate that path names of packaged files precisely
267  reflect the    contained identifiers and versions. The properly identified  reflect the    contained identifiers and versions. The properly identified
268  install subdirectories    are created by the Eclipse support during the installation   install subdirectories    are created by the Eclipse support during the
269   and update process     based on the archive content (rather than explicit  installation  and update process     based on the archive content (rather
270   jar path structure set    up at packaging time)  than explicit  jar path structure set    up at packaging time)
271    
272  </ul>  </ul>
273    
274  <h3> <a name="Concepts"></a> Concepts</h3>  <h3> <a name="Concepts"></a> Concepts</h3>
# Line 279  Line 282 
282    
283  <p>While plug-ins are being developed (ie. are frequently being changed),  <p>While plug-ins are being developed (ie. are frequently being changed),
284        their internal file structure will reflect what is convenient to the        their internal file structure will reflect what is convenient to the
285   developer.     This will generally depend on the particular development   developer.     This will generally depend on the particular development tool
286  tool  being used.     Typically, however, the developer will likely setup   being used.     Typically, however, the developer will likely setup the
287  the plug-in  to execute     from a directory tree containing exposed .class  plug-in  to execute     from a directory tree containing exposed .class files,
288  files, rather  than executing     from a .jar (requires an extra step to  rather  than executing     from a .jar (requires an extra step to create
289  create the .jar  and we all know  developers  hate extra steps). Also, at  the .jar  and we all know  developers  hate extra steps). Also, at this stage
290  this stage the developer  does not  pay particular  attention to plug-in  the developer  does not  pay particular  attention to plug-in versioning
291  versioning information, because  the plug-in is continually  changing. </p>  information, because  the plug-in is continually  changing. </p>
292    
293  <p>However, when the plug-in is ready to be packaged, it needs to be converted  <p>However, when the plug-in is ready to be packaged, it needs to be converted
294        to a form suitable for packaging and installation. Typically it means        to a form suitable for packaging and installation. Typically it means
# Line 306  Line 309 
309  <p><b>Feature</b> <br>  <p><b>Feature</b> <br>
310             A feature is an installation packaging mechanism used to define             A feature is an installation packaging mechanism used to define
311   a  group    of versioned plug-ins and/or plug-in fragments plus non-plug-in   a  group    of versioned plug-ins and/or plug-in fragments plus non-plug-in
312   files that    is used to deliver some user function. A feature can also   files that    is used to deliver some user function. A feature can also include
313  include   other  features.  Features are exposed to users as part of the    other  features.  Features are exposed to users as part of the packaging
314  packaging  and installation   process,  because they represent a unit of   and installation   process,  because they represent a unit of function selection.
315  function selection.   Features also  represent  a unit of installation. Features    Features also  represent  a unit of installation. Features carry a version
316  carry a version   identifier.</p>    identifier.</p>
317    
318  <p>Features are packaged as a feature archive, referencing the required plug-ins,  <p>Features are packaged as a feature archive, referencing the required plug-ins,
319       plug-in fragments and optional non-plug-in files. The feature archives       plug-in fragments and optional non-plug-in files. The feature archives
320    are   placed on an update server for download and installation by the Eclipse     are   placed on an update server for download and installation by the
321     update  manager, or they can be used as the input into a formal packaging  Eclipse     update  manager, or they can be used as the input into a formal
322     process  using one of the "traditional" installer technologies. The format  packaging     process  using one of the "traditional" installer technologies.
323     of the feature archive is described later. </p>  The format     of the feature archive is described later. </p>
324    
325  <h3> <a name="Framework"></a> Framework</h3>  <h3> <a name="Framework"></a> Framework</h3>
326              The 2.0 installation and update support is provided as a framework              The 2.0 installation and update support is provided as a framework
# Line 329  Line 332 
332  feature   types   are  registere via the "org.eclipse.update.featureTypes"  feature   types   are  registere via the "org.eclipse.update.featureTypes"
333  extension   point.</li>  extension   point.</li>
334               <li> concrete implementations of site (ISite interface) that               <li> concrete implementations of site (ISite interface) that
335  can   be  used  to support alternate site layout, or site behavior. New concrete   can   be  used  to support alternate site layout, or site behavior. New
336    site  types   are registered via the "org.eclipse.update.siteTypes" extension  concrete    site  types   are registered via the "org.eclipse.update.siteTypes"
337     point.</li>  extension    point.</li>
338               <li> each feature can specify a custom install handler as part               <li> each feature can specify a custom install handler as part
339   of  its   feature  manifest. Install handlers (IInstallHandler interface)   of  its   feature  manifest. Install handlers (IInstallHandler interface)
340   are  dynamically   invoked as part of the installation process to handle   are  dynamically   invoked as part of the installation process to handle
341  non-plugin  data, plus   perform other custom processing allowed by the framework.</li>   non-plugin  data, plus   perform other custom processing allowed by the
342    framework.</li>
343    
344  </ul>  </ul>
345              Eclipse provides default implementations of feature and site.              Eclipse provides default implementations of feature and site.
# Line 344  Line 348 
348  <table border="1" cols="1" width="100%">  <table border="1" cols="1" width="100%">
349              <tbody>              <tbody>
350                 <tr>                 <tr>
351              <td><b>Note: <i>The reminder of this document describes the default               <td><b>Note: <i>The reminder of this document describes the
352     concrete   implementation of the framework delivered with Eclipse. It specifies  default     concrete   implementation of the framework delivered with Eclipse.
353     the  structure of the default feature implementation, as well as the default  It specifies    the  structure of the default feature implementation, as
354     site  implementation, plus the corresponding xml files (feature.xml and  well as the default    site  implementation, plus the corresponding xml files
355   site.xml).   Providers of alternate concrete implementations can extend&nbsp;  (feature.xml and  site.xml).   Providers of alternate concrete implementations
356   parts or   all of the default Eclipse implementation. This includes providing  can extend&nbsp;  parts or   all of the default Eclipse implementation. This
357   a mechanism   for dynamic computation of the site map (site.xml)</i></b></td>  includes providing  a mechanism   for dynamic computation of the site map
358    (site.xml)</i></b></td>
359              </tr>              </tr>
360    
361    </tbody>    </tbody>
# Line 371  Line 376 
376  </ul>  </ul>
377    
378  <h3> <a name="Feature_Archive"></a> Feature Archive</h3>  <h3> <a name="Feature_Archive"></a> Feature Archive</h3>
379              The feature packaging information is placed into a separate Java               The feature packaging information is placed into a separate
380    .jar.    Standard Java jar facilities are used for constructing feature  Java   .jar.    Standard Java jar facilities are used for constructing feature
381  archives.    Feature archives reference separately packaged plug-in archives  archives.    Feature archives reference separately packaged plug-in archives
382  (see next    section) and non-plug-in files.  (see next    section) and non-plug-in files.
383  <p>Features are identified using a structured identifier based on the provider  <p>Features are identified using a structured identifier based on the provider
# Line 386  Line 391 
391    
392  <p>Where <tt>&lt;id&gt;</tt> is the feature identifier and <tt>&lt;version&gt;</tt>  <p>Where <tt>&lt;id&gt;</tt> is the feature identifier and <tt>&lt;version&gt;</tt>
393        is the full version identifier contained in the respective feature.xml.        is the full version identifier contained in the respective feature.xml.
394       Note that this is a recommended convention that minimizes chance of       Note that this is a recommended convention that minimizes chance of collisions,
395  collisions,       but is not required by the Eclipse architecture. For example,        but is not required by the Eclipse architecture. For example, the following
396  the following       are valid feature archive names </p>        are valid feature archive names </p>
397    
398  <p><tt>org.eclipse.javatooling_1.0.3.jar</tt> <br>  <p><tt>org.eclipse.javatooling_1.0.3.jar</tt> <br>
399             <tt>org.eclipse.pde_2.0.jar</tt> <br>             <tt>org.eclipse.pde_2.0.jar</tt> <br>
400             <tt>my_feature.jar</tt> </p>             <tt>my_feature.jar</tt> </p>
401    
402  <p>Internally, each feature archive is packaged relative to its feature directory  <p>Internally, each feature archive is packaged relative to its feature directory
403       (but not including the directory path element). The archive has the following        (but not including the directory path element). The archive has the
404       structure </p>  following      structure </p>
405    
406  <p><tt>feature.xml</tt> <br>  <p><tt>feature.xml</tt> <br>
407             <tt>feature&lt;_locale&gt;.properties (see "Translated Feature             <tt>feature&lt;_locale&gt;.properties (see "Translated Feature
# Line 410  Line 415 
415    
416  <p><tt>&lt;?xml encoding="ISO-8859-1"?&gt;</tt> </p>  <p><tt>&lt;?xml encoding="ISO-8859-1"?&gt;</tt> </p>
417    
418  <p><tt>&lt;!ELEMENT feature (install-handler?, description?, copyright?,  <p><tt>&lt;!ELEMENT feature (install-handler?, description?, copyright?, license?,
419  license?, url?, includes*, requires?, plugin*, data*)&gt;</tt> <br>  url?, includes*, requires?, plugin*, data*)&gt;</tt> <br>
420             <tt>&lt;!ATTLIST feature</tt> <br>             <tt>&lt;!ATTLIST feature</tt> <br>
421             <tt>&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;             <tt>&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
422        CDATA #REQUIRED</tt> <br>        CDATA #REQUIRED</tt> <br>
# Line 497  Line 502 
502             </tt><tt>&nbsp;&nbsp;&nbsp; match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;             </tt><tt>&nbsp;&nbsp;&nbsp; match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
503        &nbsp;&nbsp;&nbsp; (perfect | equivalent | compatible | greaterOrEqual)        &nbsp;&nbsp;&nbsp; (perfect | equivalent | compatible | greaterOrEqual)
504      "compatible"</tt><tt> &nbsp; &nbsp;&nbsp;&nbsp; </tt><br>      "compatible"</tt><tt> &nbsp; &nbsp;&nbsp;&nbsp; </tt><br>
505             <tt>&nbsp;&nbsp;&nbsp; search_location&nbsp;&nbsp; </tt><tt>(</tt><font              <tt>&nbsp;&nbsp;&nbsp; search-location&nbsp;&nbsp; </tt><tt>(</tt><font
506   color="#000000"><tt> root | self | both) "root"</tt></font><br>   color="#000000"><tt> root | self | both) "root"</tt></font><br>
507             <tt>&gt;</tt> </p>             <tt>&gt;</tt> </p>
508    
# Line 573  Line 578 
578               <li> os - optional operating system specification. A comma-separated               <li> os - optional operating system specification. A comma-separated
579      list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>      list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
580       . Indicates this feature should only be installed on one of the specified       . Indicates this feature should only be installed on one of the specified
581        os systems. If this attribute is not specified, the feature can be        os systems. If this attribute is not specified, the feature can be installed
582  installed       on all systems (portable implementation). This information        on all systems (portable implementation). This information is used
583  is used as   a  hint by the installation and update support (user can force  as   a  hint by the installation and update support (user can force installation
584  installation    of feature regardless of this setting).</li>     of feature regardless of this setting).</li>
585               <li> arch - optional machine architecture specification. A comma-separated                <li> arch - optional machine architecture specification. A
586       list of architecture designators defined by Eclipse (see Javadoc for  comma-separated       list of architecture designators defined by Eclipse
587        <tt>     org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature  (see Javadoc for        <tt>     org.eclipse.core.boot.BootLoader)</tt>.
588   should only    be installed on one of the specified systems. If this attribute  Indicates this feature   should only    be installed on one of the specified
589   is not specified,   the feature can be installed on all systems (portable  systems. If this attribute   is not specified,   the feature can be installed
590   implementation).  This   information is used as a hint by the installation  on all systems (portable   implementation).  This   information is used as
591   and update support  (user   can force installation of feature regardless  a hint by the installation   and update support  (user   can force installation
592  of this setting).</li>  of feature regardless  of this setting).</li>
593               <li> ws - optional windowing system specification. A comma-separated               <li> ws - optional windowing system specification. A comma-separated
594      list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>      list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
595       . Indicates this feature should only be installed on one of the specified       . Indicates this feature should only be installed on one of the specified
596        ws systems. If this attribute is not specified, the feature can be        ws systems. If this attribute is not specified, the feature can be installed
597  installed       on all systems (portable implementation). This information        on all systems (portable implementation). This information is used
598  is used as   a  hint by the installation and update support (user can force  as   a  hint by the installation and update support (user can force installation
599  installation    of feature regardless of this setting).</li>     of feature regardless of this setting).</li>
600               <li> nl - optional locale specification. A comma-separated list                <li> nl - optional locale specification. A comma-separated
601    of  locale   designators defined by Java. Indicates this feature should  list   of  locale   designators defined by Java. Indicates this feature should
602  only  be installed   on a system running with a compatible locale (using  only  be installed   on a system running with a compatible locale (using Java
603  Java locale-matching    rules). If this attribute is not specified, the feature  locale-matching    rules). If this attribute is not specified, the feature
604   can be installed   on all systems (language-neutral implementation). This   can be installed   on all systems (language-neutral implementation). This
605   information is used   as a hint by the installation and update support (user    information is used   as a hint by the installation and update support
606   can force installation    of feature regardless of this setting).</li>  (user   can force installation    of feature regardless of this setting).</li>
607               <li> colocation-affinity - optional reference to another feature               <li> colocation-affinity - optional reference to another feature
608    identifier    used to select the default installation location for this    identifier    used to select the default installation location for this
609  feature.  When  this feature is being installed as a new feature (no other  feature.  When  this feature is being installed as a new feature (no other
610  versions  of it  are installed), an attempt is made to install this feature  versions  of it  are installed), an attempt is made to install this feature
611  in the same installation    location as the referenced feature.</li>  in the same installation    location as the referenced feature.</li>
612               <li> primary - optional indication specifying whether this feature                <li> primary - optional indication specifying whether this
613     can   be used as a <a href="#Dominant_Feature">primary feature</a> . Default  feature     can   be used as a <a href="#Dominant_Feature">primary feature</a>
614     if        <i>false</i> (not a primary feature).</li>  . Default     if        <i>false</i> (not a primary feature).</li>
615               <li> application - optional identifier of the Eclipse application               <li> application - optional identifier of the Eclipse application
616     that   is to be used during startup when the declaring feature is the     that   is to be used during startup when the declaring feature is the
617        <a href="#Dominant_Feature"> primary feature</a> . The application       <a href="#Dominant_Feature"> primary feature</a> . The application identifier
618  identifier      must represent a valid application registered in the <tt>org.eclipse.core.runtime.applications</tt>       must represent a valid application registered in the <tt>org.eclipse.core.runtime.applications</tt>
619       extension point. Default is <tt>org.eclipse.ui.workbench</tt>.</li>       extension point. Default is <tt>org.eclipse.ui.workbench</tt>.</li>
620       <li> plugin- optional identifier of the primary plugin associated with       <li> plugin- optional identifier of the primary plugin associated with
621  this <a  this <a
# Line 623  Line 628 
628               <li> &lt;install-handler&gt;</li>               <li> &lt;install-handler&gt;</li>
629    
630    <ul>    <ul>
631              <li> library - optional .jar library containing the install handler               <li> library - optional .jar library containing the install
632     classes.   If specified, the referenced .jar must be contained in the feature  handler     classes.   If specified, the referenced .jar must be contained
633     archive.   It is specified as a path within the feature archive, relative  in the feature    archive.   It is specified as a path within the feature
634     to the feature.xml   entry. If not specified, the feature archive itself  archive, relative    to the feature.xml   entry. If not specified, the feature
635    is used to load the install handler classes. This attribute is only interpreted  archive itself   is used to load the install handler classes. This attribute
636     if <i>class</i> attribute is also specified</li>  is only interpreted    if <i>class</i> attribute is also specified</li>
637               <li> handler - optional identifier of the install handler. The                <li> handler - optional identifier of the install handler.
638   value    is  interpreted depending on the value of the <i>library</i> attribute.  The   value    is  interpreted depending on the value of the <i>library</i>
639    If        <i>  library</i> is specified,&nbsp; the value is interpreted  attribute.    If        <i>  library</i> is specified,&nbsp; the value is
640  as  a fully qualified  name of a class contained in the specified <i>library</i>.  interpreted  as  a fully qualified  name of a class contained in the specified
641     If       <i>library</i>   is not specified, the value is is interpreted        <i>library</i>.     If       <i>library</i>   is not specified, the
642   as  an extension identifier  of an extension registered in the <i>org.eclipse.update.installHandlers</i>  value is is interpreted   as  an extension identifier  of an extension registered
643        extension point. In either case, the resulting class must implement  in the <i>org.eclipse.update.installHandlers</i>        extension point.
644  the          <i> IInstallHandler</i> interface. The class is dynamically loaded  In either case, the resulting class must implement  the          <i> IInstallHandler</i>
645    and called at specific points during feature processing. The handler has  interface. The class is dynamically loaded   and called at specific points
646   visibility to the API classes from the update plug-in, and Eclipse plug-ins  during feature processing. The handler has  visibility to the API classes
647     required by the update plugin.</li>  from the update plug-in, and Eclipse plug-ins    required by the update plugin.</li>
648    
649    </ul>    </ul>
650               <li> &lt;description&gt; - brief component description as simple               <li> &lt;description&gt; - brief component description as simple
# Line 649  Line 654 
654              <li> url - optional URL for the full description as HTML. The              <li> url - optional URL for the full description as HTML. The
655  URL   can   be  specified as absolute of relative. If relative, it is assumed  URL   can   be  specified as absolute of relative. If relative, it is assumed
656  to  be relative   to (and packaged in) the feature archive. Note, that for  to  be relative   to (and packaged in) the feature archive. Note, that for
657  NL  handling the  URL value should be separated to allow alternate URLs to   NL  handling the  URL value should be separated to allow alternate URLs
658  be  specified for  each national language. &nbsp;URL support keywords $os$,$ws$,$arch$  to  be  specified for  each national language. &nbsp;URL support keywords
659   and $nl$ that will be replaced by the appropriate operating system, windowing  $os$,$ws$,$arch$  and $nl$ that will be replaced by the appropriate operating
660   system, operating architecture or national language value.</li>  system, windowing  system, operating architecture or national language value.</li>
661    
662    </ul>    </ul>
663               <li> &lt;copyright&gt; - feature copyright as simple text. Intended                <li> &lt;copyright&gt; - feature copyright as simple text.
664      to  be translated.</li>  Intended     to  be translated.</li>
665    
666    <ul>    <ul>
667              <li> url - optional URL for the full description as HTML. The              <li> url - optional URL for the full description as HTML. The
668  URL   can   be  specified as absolute of relative. If relative, it is assumed  URL   can   be  specified as absolute of relative. If relative, it is assumed
669  to  be relative   to (and packaged in) the feature archive. Note, that for  to  be relative   to (and packaged in) the feature archive. Note, that for
670  NL  handling the  URL value should be separated to allow alternate URLs to   NL  handling the  URL value should be separated to allow alternate URLs
671  be  specified for  each national language. URL support keywords $os$,$ws$,$arch$  to  be  specified for  each national language. URL support keywords $os$,$ws$,$arch$
672   and $nl$ that will be replaced by the appropriate operating system, windowing   and $nl$ that will be replaced by the appropriate operating system, windowing
673   system, operating architecture or national language value.</li>   system, operating architecture or national language value.</li>
674    
# Line 672  Line 677 
677    text.    Intended to be translated. It is displayed in a standard dialog    text.    Intended to be translated. It is displayed in a standard dialog
678   with [Accept]    [Reject] actions during the download/ installation process.   with [Accept]    [Reject] actions during the download/ installation process.
679   Note, that click-through   license must be specified for any feature that   Note, that click-through   license must be specified for any feature that
680   will be selected for installation   or update using the Eclipse update manager.    will be selected for installation   or update using the Eclipse update
681    When using nested features, only the nesting parent (ie. the feature selected  manager.    When using nested features, only the nesting parent (ie. the
682    for installation or update) must have click-through license text defined.  feature selected    for installation or update) must have click-through license
683    The license text is required even if the optional <i>url</i> attribute is  text defined.    The license text is required even if the optional <i>url</i>
684    specified.</li>  attribute is   specified.</li>
685    
686    <ul>    <ul>
687              <li> url - optional URL for the full description as HTML. The              <li> url - optional URL for the full description as HTML. The
688  URL   can   be  specified as absolute of relative. If relative, it is assumed  URL   can   be  specified as absolute of relative. If relative, it is assumed
689  to  be relative   to (and packaged in) the feature archive. Note, that for  to  be relative   to (and packaged in) the feature archive. Note, that for
690  NL  handling the  URL value should be separated to allow alternate URLs to   NL  handling the  URL value should be separated to allow alternate URLs
691  be  specified for  each national language. Note, that the "content" of this  to  be  specified for  each national language. Note, that the "content" of
692  URL  is <b>not</b>    what is presented as the click-through license during  this  URL  is <b>not</b>    what is presented as the click-through license
693  installation  processing.    The click-through license is the actual value  during  installation  processing.    The click-through license is the actual
694  of the <i>&lt;license&gt;</i>      element (eg. <tt>&lt;license&gt;click through  value  of the <i>&lt;license&gt;</i>      element (eg. <tt>&lt;license&gt;click
695  text&lt;/license&gt;</tt>).&nbsp;URL support keywords $os$,$ws$,$arch$ and  through text&lt;/license&gt;</tt>).&nbsp;URL support keywords $os$,$ws$,$arch$
696  $nl$ that will be replaced by the appropriate operating system, windowing  and $nl$ that will be replaced by the appropriate operating system, windowing
697  system, operating architecture or national language value.</li>  system, operating architecture or national language value.</li>
698    
699    </ul>    </ul>
700               <li> &lt;url&gt; - optional URL specifying site(s) contain feature                <li> &lt;url&gt; - optional URL specifying site(s) contain
701     updates,   or new features</li>  feature     updates,   or new features</li>
702    
703    <ul>    <ul>
704              <li> &lt;update&gt; - URL to go to for updates to this feature</li>              <li> &lt;update&gt; - URL to go to for updates to this feature</li>
705    
706    
707      <ul>      <ul>
708              <li> url - actual URL</li>              <li> url - actual URL</li>
709               <li> label - displayable label (name) for the referenced site</li>               <li> label - displayable label (name) for the referenced site</li>
710    
711      </ul>      </ul>
712               <li> &lt;discovery&gt; - URL to go to for new features. In general,                <li> &lt;discovery&gt; - URL to go to for new features. In
713      a  provider  can use this element to reference its own site(s), or site(s)  general,     a  provider  can use this element to reference its own site(s),
714      of  partners  that offer complementary features. Eclipse uses this element  or site(s)     of  partners  that offer complementary features. Eclipse uses
715      simply  as a way to distribute new site URLs to the clients</li>  this element     simply  as a way to distribute new site URLs to the clients</li>
716    
717    
718      <ul>      <ul>
719              <li> url - actual URL</li>              <li> url - actual URL</li>
# Line 716  Line 723 
723    
724    </ul>    </ul>
725               <li> &lt;includes&gt; - optional reference to a nested feature               <li> &lt;includes&gt; - optional reference to a nested feature
726   that   is  considered to be part of this feature. Nested features must be    that   is  considered to be part of this feature. Nested features must
727   located   on  the same update site as this feature</li>  be   located   on  the same update site as this feature</li>
728    
729    <ul>    <ul>
730              <li> id - required nested feature identifier</li>              <li> id - required nested feature identifier</li>
731               <li> version - required nested feature version</li>               <li> version - required nested feature version</li>
732                 <li> name- optional displayable label (name). Intended to                 <li> name- optional displayable label (name). Intended to
733  be  translated.</li>  be  translated.</li>
734                 <li>optional - optional specification indicating if this included                  <li>optional - optional specification indicating if this
735      feature  can be optionally installed. Default is "false"<br>  included     feature  can be optionally installed. Default is "false"<br>
736                 </li>                 </li>
737                 <li>match&nbsp; - optional rule that will be applied when                 <li>match&nbsp; - optional rule that will be applied when
738  resolving      the feature reference. A <samp>perfect</samp> match (the default  resolving      the feature reference. A <samp>perfect</samp> match (the default
# Line 736  Line 743 
743  part to be included in the   consideration, while <samp>greaterOrEqual</samp>  part to be included in the   consideration, while <samp>greaterOrEqual</samp>
744    simply allows any version   that is more recent or identical to the one    simply allows any version   that is more recent or identical to the one
745  specified).</li>  specified).</li>
746                 <li>search_location&nbsp; - optional. Indicates whether the                  <li>search-location&nbsp; - optional. Indicates whether the
747   "New   Updates"   action should search the update location determined by   "New   Updates"   action should search the update location determined by
748  the nesting   root feature  (<tt>root</tt>, is the default), or the location  the nesting   root feature  (<tt>root</tt>, is the default), or the location
749  defined by   the nested feature  (<tt>self</tt>), or search both (<tt>both</tt>)  defined by   the nested feature  (<tt>self</tt>), or search both (<tt>both</tt>)
# Line 751  Line 758 
758              <li> &lt;import&gt; - dependency entry. Specification and processing              <li> &lt;import&gt; - dependency entry. Specification and processing
759      is  a subset of the &lt;import&gt; specification in plugin.xml</li>      is  a subset of the &lt;import&gt; specification in plugin.xml</li>
760    
761    
762      <ul>      <ul>
763              <li> plugin - identifier of dependent plug-in.</li>              <li> plugin - identifier of dependent plug-in.</li>
764                   <li> feature - identifier of dependent feature. If plugin                   <li> feature - identifier of dependent feature. If plugin
# Line 806  Line 814 
814       on all systems (portable implementation). This information is used as       on all systems (portable implementation). This information is used as
815   a  hint  by the installation and update support (user can force installation   a  hint  by the installation and update support (user can force installation
816     of entry  regardless of this setting).</li>     of entry  regardless of this setting).</li>
817               <li> arch - optional machine architecture specification. A comma-separated                <li> arch - optional machine architecture specification. A
818       list of architecture designators defined by Eclipse (see Javadoc for  comma-separated       list of architecture designators defined by Eclipse
819        <tt>     org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature  (see Javadoc for        <tt>     org.eclipse.core.boot.BootLoader)</tt>.
820   should only    be installed on one of the specified systems. If this attribute  Indicates this feature   should only    be installed on one of the specified
821   is not specified,   the feature can be installed on all systems (portable  systems. If this attribute   is not specified,   the feature can be installed
822   implementation).  This   information is used as a hint by the installation  on all systems (portable   implementation).  This   information is used as
823   and update support  (user   can force installation of feature regardless  a hint by the installation   and update support  (user   can force installation
824  of this setting).</li>  of feature regardless  of this setting).</li>
825               <li> ws - optional windowing system specification. A comma-separated               <li> ws - optional windowing system specification. A comma-separated
826      list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>      list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
827       . Indicates this entry should only be installed on one of the specified       . Indicates this entry should only be installed on one of the specified
# Line 821  Line 829 
829       on all systems (portable implementation). This information is used as       on all systems (portable implementation). This information is used as
830   a  hint  by the installation and update support (user can force installation   a  hint  by the installation and update support (user can force installation
831     of entry  regardless of this setting).</li>     of entry  regardless of this setting).</li>
832               <li> nl - optional locale specification. A comma-separated list                <li> nl - optional locale specification. A comma-separated
833    of  locale   designators defined by Java. Indicates this entry should only  list   of  locale   designators defined by Java. Indicates this entry should
834    be  installed   on a system running with a compatible locale (using Java  only   be  installed   on a system running with a compatible locale (using
835   locale-matching   rules). If this attribute is not specified, the entry  Java  locale-matching   rules). If this attribute is not specified, the entry
836  can  be installed on   all systems (language-neutral implementation). This  can  be installed on   all systems (language-neutral implementation). This
837  information  is used as  a hint by the installation and update support (user  information  is used as  a hint by the installation and update support (user
838  can force  installation   of entry regardless of this setting).</li>  can force  installation   of entry regardless of this setting).</li>
839               <li> download-size - optional hint supplied by the feature packager,                <li> download-size - optional hint supplied by the feature
840      indicating  the download size in KBytes of the referenced plug-in archive.The  packager,      indicating  the download size in KBytes of the referenced
841  size should not contain decimal.     If not specified,  the download size  plug-in archive.The size should not contain decimal.     If not specified,
842  is not known (<b>Implementation Note:</b>     the implementation  needs to   the download size is not known (<b>Implementation Note:</b>     the implementation
843  distinguish between "not known" and 0 size)</li>   needs to distinguish between "not known" and 0 size)</li>
844               <li> install-size - optional hint supplied by the feature packager,               <li> install-size - optional hint supplied by the feature packager,
845      indicating   the install size in KBytes of the referenced plug-in archive.      indicating   the install size in KBytes of the referenced plug-in archive.
846      The size should not contain decimal. If not specified,   the install      The size should not contain decimal. If not specified,   the install size
847  size is not known (<b>Implementation Note:</b>     the implementation   needs  is not known (<b>Implementation Note:</b>     the implementation   needs to
848  to distinguish between "not known" and 0 size)</li>  distinguish between "not known" and 0 size)</li>
849    
850    </ul>    </ul>
851               <li> &lt;data&gt; - identifies non-plugin and non-feature data               <li> &lt;data&gt; - identifies non-plugin and non-feature data
852   that  is part of the feature. Generally, data are post-install processed   that  is part of the feature. Generally, data are post-install processed
853  using feature Install handler. Feature files like feature.properties are not   using feature Install handler. Feature files like feature.properties are
854  considered  data.</li>  not considered  data.</li>
855    
856    <ul>    <ul>
857              <li> id - required data identifier in the form of a relative              <li> id - required data identifier in the form of a relative
# Line 855  Line 863 
863       on all systems (portable implementation). This information is used as       on all systems (portable implementation). This information is used as
864   a  hint  by the installation and update support (user can force installation   a  hint  by the installation and update support (user can force installation
865     of entry  regardless of this setting).</li>     of entry  regardless of this setting).</li>
866               <li> arch - optional machine architecture specification. A comma-separated                <li> arch - optional machine architecture specification. A
867       list of architecture designators defined by Eclipse (see Javadoc for  comma-separated       list of architecture designators defined by Eclipse
868        <tt>     org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature  (see Javadoc for        <tt>     org.eclipse.core.boot.BootLoader)</tt>.
869   should only    be installed on one of the specified systems. If this attribute  Indicates this feature   should only    be installed on one of the specified
870   is not specified,   the feature can be installed on all systems (portable  systems. If this attribute   is not specified,   the feature can be installed
871   implementation).  This   information is used as a hint by the installation  on all systems (portable   implementation).  This   information is used as
872   and update support  (user   can force installation of feature regardless  a hint by the installation   and update support  (user   can force installation
873  of this setting).</li>  of feature regardless  of this setting).</li>
874               <li> ws - optional windowing system specification. A comma-separated               <li> ws - optional windowing system specification. A comma-separated
875      list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>      list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
876       . Indicates this entry should only be installed on one of the specified       . Indicates this entry should only be installed on one of the specified
# Line 870  Line 878 
878       on all systems (portable implementation). This information is used as       on all systems (portable implementation). This information is used as
879   a  hint  by the installation and update support (user can force installation   a  hint  by the installation and update support (user can force installation
880     of entry  regardless of this setting).</li>     of entry  regardless of this setting).</li>
881               <li> nl - optional locale specification. A comma-separated list                <li> nl - optional locale specification. A comma-separated
882    of  locale   designators defined by Java. Indicates this entry should only  list   of  locale   designators defined by Java. Indicates this entry should
883    be  installed   on a system running with a compatible locale (using Java  only   be  installed   on a system running with a compatible locale (using
884   locale-matching   rules). If this attribute is not specified, the entry  Java  locale-matching   rules). If this attribute is not specified, the entry
885  can  be installed on   all systems (language-neutral implementation). This  can  be installed on   all systems (language-neutral implementation). This
886  information  is used as  a hint by the installation and update support (user  information  is used as  a hint by the installation and update support (user
887  can force  installation   of entry regardless of this setting).</li>  can force  installation   of entry regardless of this setting).</li>
888               <li> download-size - optional hint supplied by the feature packager,                <li> download-size - optional hint supplied by the feature
889      indicating  the download size in KBytes of the referenced data archive.  packager,      indicating  the download size in KBytes of the referenced
890    If  not specified,  the download size is not known (<b>Implementation Note:</b>  data archive.    If  not specified,  the download size is not known (<b>Implementation
891      the implementation  needs to distinguish between "not known" and 0 size)</li>  Note:</b>      the implementation  needs to distinguish between "not known"
892    and 0 size)</li>
893               <li> install-size - optional hint supplied by the feature packager,               <li> install-size - optional hint supplied by the feature packager,
894      indicating   the install size in KBytes of the referenced data archive.      indicating   the install size in KBytes of the referenced data archive.
895    If  not specified,   the install size is not known (<b>Implementation Note:</b>    If  not specified,   the install size is not known (<b>Implementation Note:</b>
# Line 899  Line 908 
908              <li> <tt>&lt;plugin&gt;</tt> element results in a path entry              <li> <tt>&lt;plugin&gt;</tt> element results in a path entry
909  in  the   form   "<tt>plugins/&lt;pluginId&gt;_&lt;pluginVersion&gt;.jar</tt>"  in  the   form   "<tt>plugins/&lt;pluginId&gt;_&lt;pluginVersion&gt;.jar</tt>"
910   (for   example,   "<tt>plugins/org.eclipse.core.boot_1.0.3.jar</tt>")</li>   (for   example,   "<tt>plugins/org.eclipse.core.boot_1.0.3.jar</tt>")</li>
911               <li> <tt>&lt;data&gt;</tt> element results in a path entry in                <li> <tt>&lt;data&gt;</tt> element results in a path entry
912   the   form   "<tt>features/&lt;featureId&gt;_&lt;featureVersion&gt;/&lt;dataId&gt;</tt>  in  the   form   "<tt>features/&lt;featureId&gt;_&lt;featureVersion&gt;/&lt;dataId&gt;</tt>
913       " (for example, "f<tt>eatures/com.xyz.tools_2.3.1/examples.zip</tt>")</li>       " (for example, "f<tt>eatures/com.xyz.tools_2.3.1/examples.zip</tt>")</li>
914    
915  </ul>  </ul>
# Line 910  Line 919 
919    
920  <p>Translatable text contained in the feature.xml can be separated into feature&lt;_locale&gt;.properties  <p>Translatable text contained in the feature.xml can be separated into feature&lt;_locale&gt;.properties
921       files using Java property bundle conventions. Note that the translated       files using Java property bundle conventions. Note that the translated
922    strings   are used at installation time (ie. do not employ the plug-in fragment     strings   are used at installation time (ie. do not employ the plug-in
923    runtime   mechanism). </p>  fragment   runtime   mechanism). </p>
924    
925  <h3> <a name="Plug-In_Archive"></a> Plug-In Archive</h3>  <h3> <a name="Plug-In_Archive"></a> Plug-In Archive</h3>
926              Plug-ins and plug-in fragments are individually packaged as separate               Plug-ins and plug-in fragments are individually packaged as
927      Java   .jars. Standard Java jar facilities are used for constructing  separate     Java   .jars. Standard Java jar facilities are used for constructing
928  plug-in     archives.   There is no distinction made between a plug-in archive  plug-in     archives.   There is no distinction made between a plug-in archive
929  containing     a plug-in   and one containing a plug-in fragment.  containing     a plug-in   and one containing a plug-in fragment.
930    
# Line 933  Line 942 
942             <tt>org.eclipse.ui.nl_2.0.jar</tt> <br>             <tt>org.eclipse.ui.nl_2.0.jar</tt> <br>
943             <tt>my_plugin.jar</tt> </p>             <tt>my_plugin.jar</tt> </p>
944    
945  <p>Internally, each plug-in archive packages all the relevant plug-in or  <p>Internally, each plug-in archive packages all the relevant plug-in or fragment
946  fragment files relative to its plug-in or fragment directory (but not including  files relative to its plug-in or fragment directory (but not including the
947  the directory path element). The archive has the following structure </p>  directory path element). The archive has the following structure </p>
948    
949  <p><tt>plugin.xml *OR* fragment.xml</tt> <br>  <p><tt>plugin.xml *OR* fragment.xml</tt> <br>
950             <tt>other plug-in or feature files and subdirectories</tt> <br>             <tt>other plug-in or feature files and subdirectories</tt> <br>
# Line 946  Line 955 
955  <h3> <a name="Packaging_NL"></a> Packaging NL</h3>  <h3> <a name="Packaging_NL"></a> Packaging NL</h3>
956              In Eclipse, translated plug-in information is packaged either              In Eclipse, translated plug-in information is packaged either
957  together     with the base plug-in, or as a plug-in fragment. At runtime,  together     with the base plug-in, or as a plug-in fragment. At runtime,
958  Eclipse locates     the translations for the required locale. The use of fragments   Eclipse locates     the translations for the required locale. The use of
959  allows translations     to be added to the runtime without the need to repackage  fragments allows translations     to be added to the runtime without the
960  the base plug-ins.  need to repackage the base plug-ins.
961  <p>This mechanism cannot be used for translating the actual packaging information  <p>This mechanism cannot be used for translating the actual packaging information
962        that is part of the installation xml files. Consequently the standard        that is part of the installation xml files. Consequently the standard
963    Java    translation conventions are used for the packaging information,    Java    translation conventions are used for the packaging information,
# Line 957  Line 966 
966    
967  <h4> <a name="Translated_Feature_Information"></a> Translated Feature Information</h4>  <h4> <a name="Translated_Feature_Information"></a> Translated Feature Information</h4>
968              <b>Note:</b> This section describes the conventions used for              <b>Note:</b> This section describes the conventions used for
969  translating       the information contained within the feature manifest.  translating       the information contained within the feature manifest. It
970  It allows for  the    update client to select the correctly localized strings  allows for  the    update client to select the correctly localized strings
971  from the update    server.  This section specifically does not describe localization  from the update    server.  This section specifically does not describe localization
972  of individual    plug-ins.  of individual    plug-ins.
973  <p>Several of the attributes within the feature manifest are strings intended  <p>Several of the attributes within the feature manifest are strings intended
# Line 992  Line 1001 
1001       </p>       </p>
1002    
1003  <p>The resulting resource bundle can be used in <tt>IPluginDescriptor.getResourceString(String,ResourceBundle)</tt>  <p>The resulting resource bundle can be used in <tt>IPluginDescriptor.getResourceString(String,ResourceBundle)</tt>
1004        to actually return the correct translated string for the manifest attribute.         to actually return the correct translated string for the manifest
1005        </p>  attribute.       </p>
1006    
1007  <h4> <a name="Translated_Plug-In_Information"></a> Translated Plug-In Information</h4>  <h4> <a name="Translated_Plug-In_Information"></a> Translated Plug-In Information</h4>
1008              No change from 1.0. Translated plug-in information should be              No change from 1.0. Translated plug-in information should be
# Line 1010  Line 1019 
1019  <h3> <a name="Packaging_Non_Plug_In_Files"></a> Packaging Non-Plug-In Files</h3>  <h3> <a name="Packaging_Non_Plug_In_Files"></a> Packaging Non-Plug-In Files</h3>
1020              Arbitrary non-plug-in files can be included as part of the feature              Arbitrary non-plug-in files can be included as part of the feature
1021     definition    using the <tt>&lt;data&gt;</tt> elements. Non-plug-in files     definition    using the <tt>&lt;data&gt;</tt> elements. Non-plug-in files
1022     typically also    requires specification of a custom install handler.     typically also    requires specification of a custom install handler. In
1023  In   general, the Eclipse    support only downloads the referenced non-plug-in    general, the Eclipse    support only downloads the referenced non-plug-in
1024    files and calls the custom    install handler to perform any actual installation    files and calls the custom    install handler to perform any actual installation
1025    steps.    steps.
1026  <p>Eclipse does not specify the format of the non-plug-in files. </p>  <p>Eclipse does not specify the format of the non-plug-in files. </p>
1027    
1028  <h3> <a name="Custom_Install_Handling"></a> Custom Install Handling</h3>  <h3> <a name="Custom_Install_Handling"></a> Custom Install Handling</h3>
1029              Custom install handlers are written as a Java class and are packaged               Custom install handlers are written as a Java class and are
1030      as  part of the <a href="#Feature_Archive">feature archive</a> . The  packaged     as  part of the <a href="#Feature_Archive">feature archive</a>
1031  installer      must implement the <tt>IInstallHandler</tt> interface (in  . The installer      must implement the <tt>IInstallHandler</tt> interface
1032  most cases will     extend the <tt>BaseInstallHandler</tt> abstract helper  (in most cases will     extend the <tt>BaseInstallHandler</tt> abstract helper
1033  class which implements     <tt>IInstallHandler</tt>). When required, the  class which implements     <tt>IInstallHandler</tt>). When required, the install
1034  install handler is dynamically     loaded by the installation and update  handler is dynamically     loaded by the installation and update code, and
1035  code, and is called at specific points    during its processing. The install  is called at specific points    during its processing. The install handler
1036  handler code has visibility to classes    from the installation and update  code has visibility to classes    from the installation and update support
1037  support plug-in, and its prerequisite  plug-ins.  plug-in, and its prerequisite  plug-ins.
1038  <p><b>Implementation Note:</b> the detailed list of visible prerequisite  <p><b>Implementation Note:</b> the detailed list of visible prerequisite plug-ins
1039  plug-ins is still evolving. It is expected to include <tt>org.eclipse.core.boot  is still evolving. It is expected to include <tt>org.eclipse.core.boot </tt>
1040  </tt> and <tt>org.eclipse.core.runtime</tt> in all cases, plus <tt>org.eclipse.ui</tt>  and <tt>org.eclipse.core.runtime</tt> in all cases, plus <tt>org.eclipse.ui</tt>
1041        and <tt>org.eclipse.swt</tt> when running with full workbench (ie. not         and <tt>org.eclipse.swt</tt> when running with full workbench (ie.
1042     "headless  mode"). Also, it would be useful to always expose <tt>org.eclipse.core.ant</tt>  not    "headless  mode"). Also, it would be useful to always expose <tt>org.eclipse.core.ant</tt>
1043        so that build scripts can be used as part of the install handler implementation.        so that build scripts can be used as part of the install handler implementation.
1044        </p>        </p>
1045    
1046  <p>The IInstallHandler interface supports the following methods [<b>Implementation  <p>The IInstallHandler interface supports the following methods [<b>Implementation
1047        Note:</b> the detailed definition of the IInstallHandler interface        Note:</b> the detailed definition of the IInstallHandler interface is
1048  is   still    evolving. The description below is not an API specification    still    evolving. The description below is not an API specification (simply
1049  (simply   a functional    description)]: </p>    a functional    description)]: </p>
1050    
1051  <ul>  <ul>
1052              <li> install-initiated - the install handler is called after              <li> install-initiated - the install handler is called after
# Line 1052  Line 1061 
1061   all   the   required  feature files were downloaded (feature, plugins, data)   all   the   required  feature files were downloaded (feature, plugins, data)
1062   but   before   the actual  installation is performed. The install handler   but   before   the actual  installation is performed. The install handler
1063   is expected   to   perform verification  of the non-plug-in data files (eg.   is expected   to   perform verification  of the non-plug-in data files (eg.
1064   security),  or any   other pre-install processing.&nbsp; On return this   security),  or any   other pre-install processing.&nbsp; On return this method
1065  method  indicates   success   (installation continues) or failure (installation   indicates   success   (installation continues) or failure (installation is
1066  is  aborted).</li>   aborted).</li>
1067               <li> install-completion - the install handler is called after               <li> install-completion - the install handler is called after
1068   the   feature   information and the plug-ins were installed. It is expected   the   feature   information and the plug-ins were installed. It is expected
1069   to  complete the  installation of any non-plug-in data that was part of   to  complete the  installation of any non-plug-in data that was part of the
1070  the  feature.  On return  this method indicates success (returns custom install   feature.  On return  this method indicates success (returns custom install
1071   log) or failure (installation  is aborted). On failure, the install handler   log) or failure (installation  is aborted). On failure, the install handler
1072   is expected to perform any required cleanup.</li>   is expected to perform any required cleanup.</li>
1073               <li> uninstall-initiated - the install handler is called when               <li> uninstall-initiated - the install handler is called when
# Line 1066  Line 1075 
1075    processing    has taken place. It is passed the custom install log created    processing    has taken place. It is passed the custom install log created
1076    by the install    handler install-completion step.</li>    by the install    handler install-completion step.</li>
1077               <li> uninstall-completion - the install handler is called on               <li> uninstall-completion - the install handler is called on
1078  completion      of the standard uninstall steps. It is passed the custom install   completion      of the standard uninstall steps. It is passed the custom
1079  log created     by the install handler install-completion step.</li>  install log created     by the install handler install-completion step.</li>
1080    
1081  </ul>  </ul>
1082              Note, that as a general practice, install handlers should be              Note, that as a general practice, install handlers should be
# Line 1080  Line 1089 
1089  <p>Features are verified as follows: </p>  <p>Features are verified as follows: </p>
1090    
1091  <ul>  <ul>
1092              <li> download and verify the feature archive (use base Java jar               <li> download and verify the feature archive (use base Java
1093   verification)</li>  jar   verification)</li>
1094               <li> for each plug-in archive</li>               <li> for each plug-in archive</li>
1095    
1096    <ul>    <ul>
# Line 1110  Line 1119 
1119   in a site   map file, <i>site.xml</i>. This file can be manually maintained,   in a site   map file, <i>site.xml</i>. This file can be manually maintained,
1120   or can be  dynamically   computed by the server.   or can be  dynamically   computed by the server.
1121  <h3> <a name="Site_Map"></a> Site Map</h3>  <h3> <a name="Site_Map"></a> Site Map</h3>
1122              The update server URL can be specified as a full URL to the site               The update server URL can be specified as a full URL to the
1123    map   file,   or a URL of a directory path containing the site map file  site   map   file,   or a URL of a directory path containing the site map
1124  (similar    to index.html   processing). The site map site.xml format is  file (similar    to index.html   processing). The site map site.xml format
1125  defined by  the  following dtd:  is defined by  the  following dtd:
1126  <p><tt>&lt;?xml encoding="ISO-8859-1"?&gt;</tt> </p>  <p><tt>&lt;?xml encoding="ISO-8859-1"?&gt;</tt> </p>
1127    
1128  <p><tt>&lt;!ELEMENT site (description?, feature*, archive*, category-def*)&gt;</tt>  <p><tt>&lt;!ELEMENT site (description?, feature*, archive*, category-def*)&gt;</tt>
# Line 1189  Line 1198 
1198     Eclipse site  type (as specified in this document).</li>     Eclipse site  type (as specified in this document).</li>
1199               <li> url - optional URL defining the update site baseline URL               <li> url - optional URL defining the update site baseline URL
1200   (used    to  determine individual &lt;feature&gt; and &lt;archive&gt; location).&nbsp;   (used    to  determine individual &lt;feature&gt; and &lt;archive&gt; location).&nbsp;
1201       Can be relative or absolute. If relative, is relative to site.xml. If        Can be relative or absolute. If relative, is relative to site.xml.
1202   not    specified, the default is the URL location of the site.xml file.</li>  If   not    specified, the default is the URL location of the site.xml file.</li>
1203    
1204    </ul>    </ul>
1205               <li> &lt;description&gt; - brief description as simple text.               <li> &lt;description&gt; - brief description as simple text.
# Line 1201  Line 1210 
1210  URL   can   be  specified as absolute of relative. If relative, If relative,  URL   can   be  specified as absolute of relative. If relative, If relative,
1211  is   relative   to site.xml.</li>  is   relative   to site.xml.</li>
1212               <br>               <br>
1213             Note, that for NL handling the URL value should be separated to              Note, that for NL handling the URL value should be separated
1214   allow    alternate  URLs to be specified for each national language.  to  allow    alternate  URLs to be specified for each national language.
1215    
1216    </ul>    </ul>
1217               <li> &lt;feature&gt; - identifies referenced feature archive</li>               <li> &lt;feature&gt; - identifies referenced feature archive</li>
# Line 1211  Line 1220 
1220              <li> type - optional feature type specification. The value refers              <li> type - optional feature type specification. The value refers
1221    to  a  type  string registered via the <a href="#Framework">install framework</a>    to  a  type  string registered via the <a href="#Framework">install framework</a>
1222        extension point. If not specified, the type is assumed to be the default        extension point. If not specified, the type is assumed to be the default
1223       feature type for the site. If the site type is the default Eclipse site        feature type for the site. If the site type is the default Eclipse
1224     type,  the default feature type is the packaged feature type (as specified  site     type,  the default feature type is the packaged feature type (as
1225     in this  document).</li>  specified     in this  document).</li>
1226               <li> id - optional feature identifier. The information is used               <li> id - optional feature identifier. The information is used
1227   as  a  performance   optimization to speed up searches for features. Must   as  a  performance   optimization to speed up searches for features. Must
1228   match  the identifier   specified in the feature.xml of the referenced archive    match  the identifier   specified in the feature.xml of the referenced
1229    (the  url attribute).   If specified, the version attribute must also be  archive   (the  url attribute).   If specified, the version attribute must
1230   specified.</li>  also be  specified.</li>
1231               <li> version - optional feature version. The information is               <li> version - optional feature version. The information is
1232  used   as  a  performance  optimization to speed up searches for features.  used   as  a  performance  optimization to speed up searches for features.
1233  Must  match  the  version specified in the feature.xml of the referenced  Must  match  the  version specified in the feature.xml of the referenced archive
1234  archive  (the url attribute).  If specified, the id attribute must also be   (the url attribute).  If specified, the id attribute must also be specified.</li>
 specified.</li>  
1235               <li> url - required URL reference to the feature archive. Can               <li> url - required URL reference to the feature archive. Can
1236   be  relative    or absolute. If relative, it is relative to the location   be  relative    or absolute. If relative, it is relative to the location
1237  of the  site.xml   file.       <b>Note</b>: the default site implementation  of the  site.xml   file.       <b>Note</b>: the default site implementation
1238   allows  features  to be accessed without being explicitly declared using   allows  features  to be accessed without being explicitly declared using
1239  a &lt;feature&gt;  entry. By default, an undeclared features reference is  a &lt;feature&gt;  entry. By default, an undeclared features reference is
1240  interpreted as "features/&lt;id&gt;_&lt;version&gt;.jar"</li>  interpreted as "features/&lt;id&gt;_&lt;version&gt;.jar"</li>
1241                <li>label - optional feature label. The value is used for optimization                 <li>label - optional feature label. The value is used for
1242       when browsing the site from the update manager. Intended to be translated.<br>  optimization      when browsing the site from the update manager. Intended
1243    to be translated.<br>
1244               </li>               </li>
1245               <li> os - optional operating system specification. A comma-separated               <li> os - optional operating system specification. A comma-separated
1246      list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>      list  of os designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
1247       . Indicates this feature should only be installed on one of the specified       . Indicates this feature should only be installed on one of the specified
1248        os systems. If this attribute is "*", the feature can be installed        os systems. If this attribute is "*", the feature can be installed
1249     on   all systems (portable implementation). This information is used as a
1250    hint   by the installation and update support (user can force installation
1251     of feature   regardless of this setting).</li>
1252                  <li> arch - optional machine architecture specification. A
1253    comma-separated       list of architecture designators defined by Eclipse
1254    (see Javadoc for        <tt>     org.eclipse.core.boot.BootLoader)</tt>.
1255    Indicates this feature   should only    be installed on one of the specified
1256    systems. If this attribute&nbsp;is     "*",  the feature can be installed
1257    on   all systems (portable implementation). This information is used as    on   all systems (portable implementation). This information is used as
1258  a hint   by the installation and update support (user can force installation  a hint   by the installation and update support (user can force installation
1259   of feature   regardless of this setting).</li>   of feature   regardless of this setting).</li>
              <li> arch - optional machine architecture specification. A comma-separated  
      list of architecture designators defined by Eclipse (see Javadoc for  
       <tt>     org.eclipse.core.boot.BootLoader)</tt>. Indicates this feature  
  should only    be installed on one of the specified systems. If this attribute&nbsp;is  
     "*",  the feature can be installed on all systems (portable implementation).  
     This  information is used as a hint by the installation and update support  
     (user  can force installation of feature regardless of this setting).</li>  
1260               <li> ws - optional windowing system specification. A comma-separated               <li> ws - optional windowing system specification. A comma-separated
1261      list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>      list  of ws designators defined by Eclipse (see Javadoc for <tt>org.eclipse.core.boot.BootLoader)</tt>
1262       . Indicates this feature should only be installed on one of the specified       . Indicates this feature should only be installed on one of the specified
1263        ws systems. If this attribute&nbsp;is "*", the feature can be installed        ws systems. If this attribute&nbsp;is "*", the feature can be installed
1264        on all systems (portable implementation). This information is used        on all systems (portable implementation). This information is used as
1265  as   a  hint by the installation and update support (user can force installation    a  hint by the installation and update support (user can force installation
1266     of feature regardless of this setting).</li>     of feature regardless of this setting).</li>
1267               <li> nl - optional locale specification. A comma-separated list                <li> nl - optional locale specification. A comma-separated
1268    of  locale   designators defined by Java. Indicates this feature should  list   of  locale   designators defined by Java. Indicates this feature should
1269  only  be installed   on a system running with a compatible locale (using  only  be installed   on a system running with a compatible locale (using Java
1270  Java locale-matching    rules). If this attribute&nbsp;is "*", the feature  locale-matching    rules). If this attribute&nbsp;is "*", the feature can
1271  can be installed on all  systems (language-neutral implementation). This  be installed on all  systems (language-neutral implementation). This information
1272  information is used as a hint by the installation and update support (user  is used as a hint by the installation and update support (user can force
1273  can force installation  of feature regardless of this setting).</li>  installation  of feature regardless of this setting).</li>
1274               <li>patch - optional specification indicating if this feature               <li>patch - optional specification indicating if this feature
1275   is  a   patch. Default is "false".&nbsp;</li>   is  a   patch. Default is "false".&nbsp;</li>
1276    
# Line 1277  Line 1287 
1287    <ul>    <ul>
1288              <li> path - required archive path identifier. This is a string              <li> path - required archive path identifier. This is a string
1289   that   is  determined  by the <a   that   is  determined  by the <a
1290   href="#Feature_Archive_Mapping_Id_To_Path">feature</a>      referencing   href="#Feature_Archive_Mapping_Id_To_Path">feature</a>      referencing this
1291  this archive and is not otherwise interpreted by the site  (other   than  archive and is not otherwise interpreted by the site  (other   than as a
1292  as a lookup token).</li>  lookup token).</li>
1293               <li> url - required URL reference to the archive. Can be relative               <li> url - required URL reference to the archive. Can be relative
1294     or  absolute.  If relative, it is relative to the location of the site.xml     or  absolute.  If relative, it is relative to the location of the site.xml
1295     file.</li>     file.</li>
1296    
1297    </ul>    </ul>
1298               <li> &lt;category-def&gt; - an optional definition of a category               <li> &lt;category-def&gt; - an optional definition of a category
1299    that   can be used by installation and update support to hierarchicaly organize     that   can be used by installation and update support to hierarchicaly
1300     features</li>  organize    features</li>
1301    
1302    <ul>    <ul>
1303              <li> name - category name. Is specified as a path of name tokens              <li> name - category name. Is specified as a path of name tokens
# Line 1309  Line 1319 
1319    
1320  <p>Translatable text contained in the site.xml can be separated into site&lt;_locale&gt;.properties  <p>Translatable text contained in the site.xml can be separated into site&lt;_locale&gt;.properties
1321        files using Java property bundle conventions. Note that the translated        files using Java property bundle conventions. Note that the translated
1322     strings  are used at installation time (ie. do not employ the plug-in     strings  are used at installation time (ie. do not employ the plug-in fragment
1323  fragment    runtime  mechanism). The property bundles are located relative     runtime  mechanism). The property bundles are located relative to the
1324  to the site.xml    location.   </p>  site.xml    location.   </p>
1325    
1326  <h3> <a name="Default_Site_Layout"></a> Default Site Layout</h3>  <h3> <a name="Default_Site_Layout"></a> Default Site Layout</h3>
1327              <tt>&lt;site root&gt;/</tt> <br>              <tt>&lt;site root&gt;/</tt> <br>
# Line 1343  Line 1353 
1353  with   any server-side   logic support the required control mechanisms.</li>  with   any server-side   logic support the required control mechanisms.</li>
1354    
1355  </ul>  </ul>
1356              Eclipse provides an example demonstrating an implementation of               Eclipse provides an example demonstrating an implementation
1357   an  access    mechanism based on feature key files.  of  an  access    mechanism based on feature key files.
1358  <h2> <a name="Eclipse_Install"></a> Eclipse Install</h2>  <h2> <a name="Eclipse_Install"></a> Eclipse Install</h2>
1359    
1360  <h3> <a name="Default_Install_Layout"></a> Default Install Layout</h3>  <h3> <a name="Default_Install_Layout"></a> Default Install Layout</h3>
# Line 1372  Line 1382 
1382             <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;             <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1383      META_INF/</tt>   </p>      META_INF/</tt>   </p>
1384    
1385  <p><b>Implementation Note:</b> we will go back to the original design of  <p><b>Implementation Note:</b> we will go back to the original design of not
1386  not splitting out fragments (ie. plugin and fragments go into the same install  splitting out fragments (ie. plugin and fragments go into the same install
1387       location) </p>       location) </p>
1388    
1389  <h3> <a name="Unmanaged_Plugins"></a> "Unmanaged" Plug-Ins</h3>  <h3> <a name="Unmanaged_Plugins"></a> "Unmanaged" Plug-Ins</h3>
# Line 1381  Line 1391 
1391  plug-ins     that were directly installed into the Eclipse file tree without  plug-ins     that were directly installed into the Eclipse file tree without
1392  being part    of a feature (eg. developer unzipping plug-in archive directly  being part    of a feature (eg. developer unzipping plug-in archive directly
1393  into the  Eclipse  file tree).  into the  Eclipse  file tree).
1394  <p>Eclipse runtime recognizes these plugins during startup and loads the  <p>Eclipse runtime recognizes these plugins during startup and loads the plug-in
1395  plug-in information into the runtime registry following the standard plug-in  information into the runtime registry following the standard plug-in binding
1396  binding rules. The update support also recognizes the presence of this new  rules. The update support also recognizes the presence of this new plug-in,
1397  plug-in, but since this plug-in is not part of any feature it cannot be updated  but since this plug-in is not part of any feature it cannot be updated using
1398  using the update support (hence "unmanaged"). Unmanaged plug-in that become  the update support (hence "unmanaged"). Unmanaged plug-in that become referenced
1399  referenced by a feature as a result of some future installation or update  by a feature as a result of some future installation or update action become
1400  action become "managed" (can be updated as part of the feature). </p>  "managed" (can be updated as part of the feature). </p>
1401    
1402  <p>Unmanaged plug-ins are not displayed as part of the installation and update  <p>Unmanaged plug-ins are not displayed as part of the installation and update
1403       UI. </p>       UI. </p>
# Line 1395  Line 1405 
1405  <h3> <a name="Using_Native_Platform_Installers"></a> Using Native Platform  <h3> <a name="Using_Native_Platform_Installers"></a> Using Native Platform
1406       Installers</h3>       Installers</h3>
1407              The Eclipse installation contains plugins that can be shared              The Eclipse installation contains plugins that can be shared
1408  across    multiple   features. When installing and uninstalling features  across    multiple   features. When installing and uninstalling features using
1409  using the   Eclipse installation   and update support, these relationship  the   Eclipse installation   and update support, these relationship are correctly
1410  are correctly   maintained. Only one   copy of any version of a plug-in is    maintained. Only one   copy of any version of a plug-in is used.
1411  used.  
1412  <p>However, when using native platform installers, performing native uninstall  <p>However, when using native platform installers, performing native uninstall
1413        creates problems because plug-ins would be removed without regard to        creates problems because plug-ins would be removed without regard to
1414   any    sharing relationships. As a result, Eclipse <b>does not allow</b>   any    sharing relationships. As a result, Eclipse <b>does not allow</b>
1415  plug-ins    to be installed using native installers into the shared installation  plug-ins    to be installed using native installers into the shared installation
1416  tree.    Instead, native installers must establish their own installation  tree.    Instead, native installers must establish their own installation
1417  root directory.    The subdirectory structure is the same as defined for  root directory.    The subdirectory structure is the same as defined for base
1418  base Eclipse. The  private  root directory is logically linked into the shared  Eclipse. The  private  root directory is logically linked into the shared
1419    Eclipse installation   via  a link file installed by the native installer.    Eclipse installation   via  a link file installed by the native installer.
1420    The file path for the   link  file is <tt>&lt;configRoot&gt;/links/</tt>.    The file path for the   link  file is <tt>&lt;configRoot&gt;/links/</tt>.
1421    The <tt>&lt;configRoot&gt;   </tt>  location is computed by Eclipse relative    The <tt>&lt;configRoot&gt;   </tt>  location is computed by Eclipse relative
1422    to the launch <a href="#Multiple%20Launch%20Points"> configuration file</a>    to the launch <a href="#Multiple%20Launch%20Points"> configuration file</a>
1423    . By default,    this is the <tt>install/</tt> directory in the shared    . By default,    this is the <tt>install/</tt> directory in the shared Eclipse
1424  Eclipse   installation    tree. </p>    installation    tree. </p>
1425    
1426  <p>The name of the link file is not specified by Eclipse. The name is determined  <p>The name of the link file is not specified by Eclipse. The name is determined
1427        by the native installer. To minimize the potential for naming collisions,        by the native installer. To minimize the potential for naming collisions,
1428        it is recommended that the file name contain the identifier and version        it is recommended that the file name contain the identifier and version
1429      of the feature being installed by the native installer. For example,      of the feature being installed by the native installer. For example, <tt>&lt;featureId&gt;_&lt;featureVersion&gt;.properties</tt>
1430  <tt>&lt;featureId&gt;_&lt;featureVersion&gt;.properties</tt>      . The file       . The file content is in the form of a Java properties file, with the
1431  content is in the form of a Java properties file, with the  following   following    properties defined: </p>
 properties defined: </p>  
1432    
1433  <p><tt>path=[r|rw] install-path[,[r|rw] install-path]*</tt> </p>  <p><tt>path=[r|rw] install-path[,[r|rw] install-path]*</tt> </p>
1434    
# Line 1431  Line 1440 
1440    Default is to  allow updates&nbsp; (w). </p>    Default is to  allow updates&nbsp; (w). </p>
1441    
1442  <p>Eclipse does not manage the linked directories in any way. It simply detects  <p>Eclipse does not manage the linked directories in any way. It simply detects
1443       their existence by the presence of the link files, and includes the linked        their existence by the presence of the link files, and includes the
1444       plug-ins during the platform startup. The native installer is responsible  linked      plug-ins during the platform startup. The native installer is
1445       for uninstalling the link when the corresponding directory is removed.  responsible      for uninstalling the link when the corresponding directory
1446    Eclipse   runtime ignores any links that cannot be resolved. <br>  is removed.   Eclipse   runtime ignores any links that cannot be resolved.
1447    <br>
1448             &nbsp; </p>             &nbsp; </p>
1449             <br>             <br>
1450            <br>            <br>
# Line 1444  Line 1454 
1454        <br>        <br>
1455          <br>          <br>
1456   <br>   <br>
1457     <br>
1458  </body>  </body>
1459  </html>  </html>

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17