blob: 0a5aa7907afc121ea054ff2f9d362406889ba5b9 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<TITLE>NetBeans New Features</TITLE>
<LINK REL="Stylesheet" HREF="https://netbeans.org/netbeans.css" TYPE="text/css" TITLE="NetBeans OpenSource Style">
</HEAD><BODY>
<H1>NetBeans New Features</H1>
<p><i>$Revision: 1.2 $</i><br>
<i>author: <a href="mailto:petr.hamernik@czech.sun.com">Petr Hamernik</a></i></p>
<p><i>special thanks to <a href="mailto:Daniel.Pfeffer@czech.sun.com">Dan
Pfeffer</a> for the xsl and ant scripts and <a href="mailto:Petr.Hrebejk@czech.sun.com">Petr
Hrebejk</a> for original ideas.</i></p>
<hr>
<br>
<i>Abstract:</i>
<ul>
This document proposes the format of New features plans and describes how they
can be used.
</ul>
<hr>
<p><i>Changes:</i> available in release33/features/infrastructure/index.html CVS
<hr>
<p><b>Contents:</b></p>
<ol>
<li>Overview</li>
<li>How to write features for your module</li>
<li>XSL styles</li>
<li>Strenghts and Weaknesses</li>
</ol>
<hr>
<h2>1. Overview</h2>
<p>
The main reson of this proposal is to simplify the work with new features
proposals and plans in NetBeans. It will allow to write xsl files, which will generate the
exact collection of features you need (e.g. only significant features for the
whole release). An example can be the generation of &quot;WhatIsNew.html&quot;
file at the end of release cycle.</p>
<p>The features will be collected per module in one <b>plan.xml</b> file.
Using xsl it is possible to generate html files for every module and also
features for whole release. In order to to track the implementation
progress during different phases of release the features can and are suggested
to link into an issue in <a href="https://netbeans.org/bugzilla/">issuezilla</a>.
The actual information (progress, status, target version, responsible persons) will be extracted from the
associated issue and updated dynamically each time the pages are regenerated.
</p>
<p>
The whole infrastructure consists of the following parts:
<ul>
<li><b><font color="red">Source</font> data for each module:</b></li>
<ul>
<li>plan.xml file for every module. This file is located in /www/plans/ directory of every module. Examples:
vcscore,
debugger,
java
</li>
</ul>
<li><b>Source data for whole release:</b></li>
<ul>
<li>/nbbuild/plans/modules.xml - The list of modules collected to projects.</li>
<li>/nbbuild/plans/all_features.xml - Features for all modules included in one xml file - used for transformation.</li>
</ul>
<li><b>XSL styles for transformation:</b>(stored in nbbuild module)</li>
<ul>
<li>/nbbuild/plans/nb33-features-overview.xsl - Style for generation the main features overview.</li>
<li>/nbbuild/plans/nb33-features-module.xsl - Style for generation features for one module.</li>
</ul>
<li><b>Build script for transformation:</b></li>
<ul>
<li>/nbbuild/plans/build.xml - ANT script.</li>
<li>Plan.xml generator (nbbuild/antsrc/org/netbeans/nbbuild/NoPlans.java) - and Ant task that creates draft plan.xml file to be postprocessed by:</li>
<li>/nbbuild/antsrc/org/netbeans/nbbuild/PlansPreprocess.java
- an ANT task that connects to issuezilla and updates the the features with values from issuzilla</li>
</ul>
<li><b><font color="red">Generated overview</font> of features for whole release:</b></li>
<ul>
<li><a href="../nb33-features-overview.html">nb33-features-overview.html</a> - List for projects (one or more modules), only features which has high impact on users</li>
</ul>
<li><b><font color="red">Generated module</font> list:</b></li>
<ul>
<li>features.html file for every module. This file is located in /www/plans/ directory of every module. Examples:
vcscore,
debugger,
java
</li>
</ul>
<li><b>Instructions</b>:</li>
<ul>
<li><a href="index.html">index.html</a> - this document</li>
</ul>
</ul>
</p>
<h2>2. How to write features for your module</h2>
<p>
<ul>
<li>Use any example and modify it for your module:
vcscore,
debugger,
java ,
nbbuild
</li>
<li>Use this DTD if you prefer: https://netbeans.org/dtds/module_features-1_0.dtd
The DTD is <b>commented</b>!
</li>
<li>Each proposal is formated in <b>xml</b>.</li>
<li>Check if the xml is well-formed.</li>
<li>Check if the xml is valid with the DTD</li>
<li>The file is stored in the same place for every module: <b>/&lt;yourmodule&gt;/www/plans/plan.xml</b></li>
</ul>
<h3>Three Examples</h3>
<ul>
<li>Example <a href="#storing">storing</a> all information in Issuezilla
<li>Example <a href="#extending">extending</a> information from Issuesilla
<li>Example <a href="#overwriting">overwriting</a> information from Issuezilla
</ul>
<h4 id="storing">Example fully generated from IssueZilla</h4>
Fill planned issue into IssueZilla. There is conventionally
introduced status whileboard attribute named "duration" that
maps directly to plan.xml's <requirement>'s duration attribute.
Usage duration=5 means that given issue takes 5 responsible developer
days. (More status whileboard attributes may be introduced if needed).
<p>
Mark somehow issues that you have planned. I used a "mykeyword"
placed in status whiteboard.
<p>
Create a build script that will generate plan.xml draft:
<pre>
&lt;taskdef name="noplans"
classname="org.netbeans.nbbuild.NoPlans"
classpath="${nbbuild_root}/nbantext.jar"
/&gt;
&lt;!-- For those behind firewall. --&gt;
&lt;property name="http.proxyPort" value="..." /&gt;
&lt;property name="http.proxyHost" value="..." /&gt;
&lt;target name="generate-plans"&gt;
&lt;noplans target="plans.xml"
query="component=mycomponent&amp;target_milestone=4.0&amp;status_whiteboard=mykeyword&amp;status_whiteboard_type=allwords"
group="MyPlan"
/&gt;
&lt;/target&gt;
</pre>
where:
<dl>
<dt>target <dd>points to plans file to be generated,
<dt>query <dd>selects issues that you want to include in your plan
(it can go over multiple modules if needed)
<dt>group <dd>names generated plan, it must be module name
for module plans.
</dl>
<p>
Let <tt>PlanPreprocess</tt> task genereates all requirement details from Issuezilla connection.
<h4 id="extending">Example of one requirement that uses connection with issuezilla</h4>
<pre>
&lt;requirement issue="14234" duration="5" user-impact="high"&gt;
&lt;short-description&gt;
Create list of planned features for NetBeans release 3.3.
&lt;/short-description&gt;
&lt;long-description&gt;
&lt;body&gt;&lt;p&gt;Make features list for NetBeans 3.3.&lt;/p&gt;&lt;p&gt;
All modules will have own list in $modulehome/www/plans/plan.xml
This features will be collected to one list for whole NetBeans 3.3&lt;/p&gt;&lt;/body&gt;
&lt;/long-description&gt;
&lt;req-link href="https://netbeans.org/release33/">NetBeans - Release 3.3 Homepage&lt;/req-link&gt;
&lt;req-link href="https://netbeans.org/release33/features/infrastructure/index.html">Instructions&lt;/&gt;
&lt;/requirement&gt;
</pre>
<h4 id="overwriting">Another example that overrides name, roles and percentage-complete</h4>
<pre>
&lt;requirement issue="17132" name="Features list" percentage-complete="90" user-impact="high"&gt;
&lt;short-description&gt;
Create list of planned features for NetBeans release 3.3.
&lt;/short-description&gt;
&lt;long-description&gt;
&lt;body&gt;&lt;p&gt;Make features list for NetBeans 3.3.&lt;/p&gt;&lt;p&gt;
All modules will have own list in $modulehome/www/plans/plan.xml
This features will be collected to one list for whole NetBeans 3.3&lt;/p&gt;&lt;/body&gt;
&lt;/long-description&gt;
&lt;roles&gt;
&lt;person nickname="Petr Hamernik"&gt;
&lt;e-mail&gt;petr.hamernik@czech.sun.com&lt;/e-mail&gt;
&lt;role name="owner"/&gt;
&lt;/person&gt;
&lt;/roles&gt;
&lt;req-link href="https://netbeans.org/release33/">NetBeans - Release 3.3 Homepage&lt;/req-link&gt;
&lt;req-link href="https://netbeans.org/release33/features/infrastructure/index.html">Instructions&lt;/&gt;
&lt;/requirement&gt;
</pre>
<p>
<b>FAQs:</b>
<ul>
<li>Use issue="number" to connect your requirement with issuezilla</li>
<li>Use user-impact="high" if you want the feature is listed in release features overview or
do not use the user-impact attribute and change type of your issuezilla issue to <em>FEATURE</em></li>
<li>Use short-description as a description at features overview (just plain text 1-3 lines), if it is missing the first text description from
issuezilla is taken</li>
<li>Use long-description in plain text or in xhtml format starting with &lt;body&gt; element. xhtml is the same like html,
but all tags has to be coupled, for example: &lt;p&gt;text&lt;/p&gt;. Long descriptions are used in per-module pages</li>
<li>Use percentage-complete to notify users, which feature is already implemented in dev build or leave it out to update it from issue,
if you do not use this attribute it will be automatically taken from issuezilla</li>
<li>XSL transformation are scheduled to run automatically every two hours.</li>
</ul>
<h2>3. XSL styles</h2>
<ul>
<li>Using <b>xsl</b> and <b>ant</b> scripts it is possible to generate the
output from plan.xml files</li>
<li>The scripts are stored in <b>nbbuild </b>module in <b>/plans</b> directory</li>
<li>The scripts are not finished yet, but are already available at <b>/nbbuild/plans/ CVS</b><b>.</b></li>
</ul>
<h2>4. Strengths and weaknesses</h2>
<p>Strengths of this solution are:</p>
<ul>
<li>Issuezilla can be used as the only data entry point.</li>
<li>The simple format of plan.xml (the same effort as features.html)</li>
<li>Possibility to generate more then just a collection of features - generation of whatisnew.html in the end of release cycle</li>
<li>Possibility tracking of implementation status</li>
<li>Allow future extension of xsl styles </li>
<li>Many others...</li>
</ul>
<p>Weaknesses:</p>
<ul>
<li>Extra work with filling the content to the plan.xml files which is now reduced by live integration with issuezilla. </li>
<li>Generated reports do not distinguish between subtasks and external dependencies.</li>
</ul>
<hr>
<p><i>Please send comments to <a href="mailto:nbdev@netbeans.org">nbdev@netbeans.org</a>
or to directly to me: <a href="mailto:daniel.pfeffer@sun.com">Dan Pfeffer</a>.
Thanks.</i></p>
<p>&nbsp;</p>
</BODY>
</HTML>