blob: 28b65ea19e05ff852dd9b52d8b3afc8211223f52 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_181) on Fri Sep 14 11:34:43 BST 2018 -->
<title>Overview (Task List API)</title>
<meta name="date" content="2018-09-14">
<link rel="stylesheet" type="text/css" href="javadoc.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Overview (Task List API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li class="navBarCell1Rev">Overview</li>
<li><a href="org/netbeans/spi/tasklist/package-summary.html">Package</a></li>
<li>Class</li>
<li>Use</li>
<li><a href="org/netbeans/spi/tasklist/package-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage">org.netbeans.spi.tasklist/1 1.37.1 1</div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 class="title">Task List API<br/><span style='font-style:normal; font-size:medium; font-weight:normal; background-color:#ffffff;'><a href='http://wiki.netbeans.org/API_Stability#Official' target='_blank'>Official</a></span></h1>
</div>
<div class="header">
<p>See: <a href="#overview.description">Description</a></p>
</div>
<div class="contentContainer">
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Task List API table, listing packages, and an explanation">
<caption><span>Task List API</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Package</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="org/netbeans/spi/tasklist/package-summary.html">org.netbeans.spi.tasklist</a></td>
<td class="colLast">
<div class="block">Task List is a window that shows problems or tasks - error/warnings/todos etc - associated with
files and folder under selected scope.</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="contentContainer"><a name="overview.description">
<!-- -->
</a>
<div class="block"><p>
<p>
<b>IMPORTANT:</b> Since NB 7.2 the Tasks window has been renamed to Action Items window. Labels in UI now refer to "action items" but the code terms used in Task List API refer to "tasks".
<br>
<br>
This is a framework for Task List window that shows tasks (errors, warnings, todos) generated
by plugable modules for selected files/folders.<br>
<br>
<br>
<a href="org/netbeans/spi/tasklist/package-summary.html">TaskListSPI</a>
</p>
<p>
TaskListXMLLayer
<p>Task List framework defines the following folders in XML layer:
<br>
<br>
<em>/TaskList/Scanners</em> - register your instances of task scanners here<br>
<em>/TaskList/ScanningScopes</em> - here you can add additional scanning <a href="org/netbeans/spi/tasklist/TaskScanningScope.html" shape="rect">scopes</a>
<br>
<em>/TaskList/Groups</em> - here you can define additional task groups, for example: <br>
<samp>
<br>
&lt;folder name="TaskList"&gt; <br>
&nbsp;&lt;folder name="Groups"&gt; <br>
&nbsp;&nbsp;&lt;file name="mygroup.instance"&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="instanceCreate" methodvalue="org.netbeans.spi.tasklist.Task.createGroup"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="localizingBundle" stringvalue="org.mymodule.resources.Bundle"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="groupName" stringvalue="my-unique-group-name"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="diplayNameKey" stringvalue="LBL_my_group"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="descriptionKey" stringvalue="HINT_my_group"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="iconKey" stringvalue="ICON_my_group"/&gt; <br>
&nbsp;&nbsp;&lt;/file&gt; <br>
&nbsp;&lt;/folder&gt; <br>
&lt;/folder&gt; <br>
<br>
</samp>
</p>
</p>
<p>
TaskGroups
<p>
<a href="org/netbeans/spi/tasklist/Task.html" shape="rect">Task</a>s are organized into groups according
to their importance (error/warning/todo etc). The task group is specified when the Task is created.
Each group is identified by its unique name. The Task List framework provides the following groups:
<br>
<br>
<em>"nb-tasklist-error"</em> - for error-type tasks <br>
<em>"nb-tasklist-warning"</em> - for warning-type tasks
</p>
<p>Additional task groups can be specified in xml layers, see above.</p>
</p>
</p>
<h3>What is New (see <a href="apichanges.html">all changes</a>)?</h3>
<ul>
<!--Search for dates that are later or equal to 1997-09-01 in
.-->
<!--Checking date 2013-3-6 with count of newer 0--><!--year ok-->
<li>Mar 6 '13 <a href="apichanges.html#callback_api">PushTaskScanner.Callback provides additional information.</a>
<p>
<p>
PushTaskScanner.Callback provides information whether the framework is observed and whether the current editor scope is set.
Both these methods are needed for performance improvements of NB PushTaskScanners.
</p>
</p>
</li>
<!--Checking date 2009-8-7 with count of newer 1--><!--year ok-->
<li>Aug 7 '09 <a href="apichanges.html#issue_support">Task List implementation uses Indexing API to cache scanned tasks.</a>
<p>
<p>
Task List API and user interface has been extended to support a generic URL
as the resource the task is associated with. This allows for example
bug tracking issues to be displayed in Task List window.
</p>
</p>
</li>
<!--Checking date 2009-3-31 with count of newer 2--><!--year ok-->
<li>Mar 31 '09 <a href="apichanges.html#indexing_api">Task List implementation uses Indexing API to cache scanned tasks.</a>
<p>
<p>
Task List implementation uses Indexing API to persist tasks created
by FileTaskScanners. If a file hasn't changed since the last scan
then the tasks associated with that file are loaded from cache to improve
Task List performance. Therefore task's ActionListener isn't available when
the task is restored from cache. Task providers must switch to PushTaskScanner
if ActionListener is required to be available at all times.
</p>
</p>
</li>
<!--Checking date 2007-4-11 with count of newer 3--><!--year ok-->
<li>Apr 11 '07 <a href="apichanges.html#api_review">API changes to reflect the results of API inception review.</a>
<p>
<p>
API has changed due to the results of API inception review.
</p>
</p>
</li>
</ul>
<h3>Use Cases</h3>
<answer id="arch-usecases">
<h5>Task Scanners</h5>
<p>The main feature of the Task List SPI is the ability to 'plug-in' additional task providing
modules that generate tasks for the task list window.</p>
<p>The plugable task scanners can either <a href="org/netbeans/spi/tasklist/PushTaskScanner.Callback.html#setTasks-org.openide.filesystems.FileObject-java.util.List-" shape="rect">push</a>
new <a href="org/netbeans/spi/tasklist/Task.html" shape="rect">Task</a>s to the Task List window whenever they want -
<a href="org/netbeans/spi/tasklist/PushTaskScanner.html" shape="rect">PushTaskScanner</a> - or they
can inherit from <a href="org/netbeans/spi/tasklist/FileTaskScanner.html" shape="rect">FileTaskScanner</a>
and the Task List framework will actively <a href="org/netbeans/spi/tasklist/FileTaskScanner.html#scan-org.openide.filesystems.FileObject-" shape="rect">poll</a>
them for new tasks for each file under the current scanning scope (see below).</p>
<p>Scanner instances are registered in XML layer in folder "/TaskList/Scanners". The framework keeps track of modified files
and notifies the scanners whenever a file under the scanning scope needs to be rescanned.</p>
<h5>Task Scanning Scope</h5>
<p>Scanning scope defines which files/folders will be scanned for tasks. The default implementation
includes scopes for currently edited file, scope for files and folders in the main project and projects
that depend on it and scope for all opened projects.</p>
<p>Additional scopes may be provided by extending
<a href="org/netbeans/spi/tasklist/TaskScanningScope.html" shape="rect">TaskScanningScope</a> class
and registering instances in folder "/TaskList/ScanningScopes" in XML layer.</p>
<h5>Task Groups</h5>
<p>Tasks are organized into Groups according to their importance. Each task can be in one group only.
The default implementation includes "Error", "Warning" and "TODO" groups. Additional groups can be
registered in XML layer in folder "/TaskList/Groups". Each task group is identified by its unique name.</p>
</answer>
<h3>Exported Interfaces</h3>
This table lists all of the module exported APIs
with
defined stability classifications. It is generated
based on answers to questions about the architecture
of the module. <a href="architecture-summary.html">Read them all</a>...
<a name="group-java">
<h5>Group of java interfaces</h5>
</a>
<table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%">
<tr>
<td>
<table border="0" cellpadding="3" cellspacing="1" width="100%">
<tr class="tablersh">
<td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td>
</tr>
<tr class="tabler">
<td>TaskListSPI</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Official">Official</a></td><td><a name="java-TaskListSPI"><a href="org/netbeans/spi/tasklist/package-summary.html">
.../spi/tasklist/package-summary.html</a>
<p></p>
<p></p>
<p></p>
</a></td>
</tr>
</table>
</td>
</tr>
</table>
<p></p>
<a name="group-layer">
<h5>Group of layer interfaces</h5>
</a>
<table cellpadding="1" cellspacing="0" border="0" class="tablebg" width="100%">
<tr>
<td>
<table border="0" cellpadding="3" cellspacing="1" width="100%">
<tr class="tablersh">
<td align="CENTER" width="25%"><span class="titlectable">Interface Name</span></td><td align="CENTER" width="10%"><span class="titlectable">In/Out</span></td><td align="CENTER" width="10%"><span class="titlectable">Stability</span></td><td align="CENTER"><span class="titlectable">Specified in What Document?</span></td>
</tr>
<tr class="tabler">
<td>TaskListXMLLayer</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Official">Official</a></td><td><a name="layer-TaskListXMLLayer">
<p></p>
<p>Task List framework defines the following folders in XML layer:
<br>
<br>
<em>/TaskList/Scanners</em> - register your instances of task scanners here<br>
<em>/TaskList/ScanningScopes</em> - here you can add additional scanning <a href="org/netbeans/spi/tasklist/TaskScanningScope.html" shape="rect">scopes</a>
<br>
<em>/TaskList/Groups</em> - here you can define additional task groups, for example: <br>
<samp>
<br>
&lt;folder name="TaskList"&gt; <br>
&nbsp;&lt;folder name="Groups"&gt; <br>
&nbsp;&nbsp;&lt;file name="mygroup.instance"&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="instanceCreate" methodvalue="org.netbeans.spi.tasklist.Task.createGroup"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="localizingBundle" stringvalue="org.mymodule.resources.Bundle"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="groupName" stringvalue="my-unique-group-name"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="diplayNameKey" stringvalue="LBL_my_group"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="descriptionKey" stringvalue="HINT_my_group"/&gt; <br>
&nbsp;&nbsp;&nbsp;&lt;attr name="iconKey" stringvalue="ICON_my_group"/&gt; <br>
&nbsp;&nbsp;&lt;/file&gt; <br>
&nbsp;&lt;/folder&gt; <br>
&lt;/folder&gt; <br>
<br>
</samp>
</p>
<p></p>
</a></td>
</tr>
<tr class="tabler">
<td>TaskGroups</td><td>Exported</td><td><a href="http://wiki.netbeans.org/API_Stability#Official">Official</a></td><td><a name="layer-TaskGroups">
<p></p>
<p>
<a href="org/netbeans/spi/tasklist/Task.html" shape="rect">Task</a>s are organized into groups according
to their importance (error/warning/todo etc). The task group is specified when the Task is created.
Each group is identified by its unique name. The Task List framework provides the following groups:
<br>
<br>
<em>"nb-tasklist-error"</em> - for error-type tasks <br>
<em>"nb-tasklist-warning"</em> - for warning-type tasks
</p>
<p>Additional task groups can be specified in xml layers, see above.</p>
<p></p>
</a></td>
</tr>
</table>
</td>
</tr>
</table>
<p></p>
<h3>Implementation Details</h3>
<h5>Where are the sources for the module?</h5>
<p>
<p>
The sources for the module are in the
<a href="http://hg.netbeans.org/" shape="rect">NetBeans Mercurial repositories</a>.
</p>
</p>
<h5>What do other modules need to do to declare a dependency on this one, in addition to or instead of a plain module dependency?</h5>
<p>
no special dependency declarations
</p>
<p>
Read more about the implementation in the <a href="architecture-summary.html">answers to
architecture questions</a>.
</p></div>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li class="navBarCell1Rev">Overview</li>
<li><a href="org/netbeans/spi/tasklist/package-summary.html">Package</a></li>
<li>Class</li>
<li>Use</li>
<li><a href="org/netbeans/spi/tasklist/package-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage">org.netbeans.spi.tasklist/1 1.37.1 1</div>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev</li>
<li>Next</li>
</ul>
<ul class="navList">
<li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
<li><a href="overview-summary.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><span class="footnote">Built on September 14 2018.&nbsp;&nbsp;|&nbsp;&nbsp; Copyright &#169; 2017-2018 Apache Software Foundation. All Rights Reserved.</span></small></p>
</body>
</html>