Commit e427fa23 authored by Christian Schudt's avatar Christian Schudt

Fixing some JavaDoc errors in order to make it build with Java 8's DocLint eventually

parent 55236937
......@@ -43,27 +43,27 @@ import java.io.IOException;
* <li><tt>currentcss</tt> (optional) - the CSS class name used to decorate the LI of the
* currently selected sidebar item.</li>
* <li><tt>heaadercss</tt> (optional) - the CSS class name used to decorate the LI of the header
* section.</li></ul></p>
* section.</li></ul>
*
* <p>This class assumes there is a request attribute with the name specified by the bean attribute.</p>
*
* <p>This tag prints out minimal HTML. It basically prints an unordered list (UL element) with each
* LI containing an "A" tag specfied by the body content of this tag. For example, the body should contain
* a template A tag which will have its values replaced at runtime: <ul><tt>
* a template A tag which will have its values replaced at runtime: <pre><tt>
*
* &lt;jive:sidebar bean="jivepageinfo"&gt; <br>
* &nbsp;&nbsp;&nbsp;&lt;a href="[url]" title="[description]"&gt;[name]&lt;/a&gt; <br>
* &nbsp;&nbsp;&nbsp;&lt;jive:subsidebar&gt; ... &lt;/jive:subsidebar&gt; <br>
* &lt;/jive:sidebar&gt;</tt></ul>
* &lt;/jive:sidebar&gt;</tt></pre>
*
* There is a subsidebar tag for rendering the sub-sidebars. For more info, see the
* {@link SubSidebarTag} class.</p>
* {@link SubSidebarTag} class.
*
* <p>Available tokens for the "A" tag are: <ul>
* <p>Available tokens for the "A" tag are:</p> <ul>
* <li><tt>[id]</tt> - the ID of the sidebar item, usually not needed.</li>
* <li><tt>[name]</tt> - the name of the sidebar item, should be thought of as the display name.</li>
* <li><tt>[url]</tt> - the URL of the sidebar item.</li>
* <li><tt>[description]</tt> - the description of the sidebar item, good for mouse rollovers.</li></ul></p>
* <li><tt>[description]</tt> - the description of the sidebar item, good for mouse rollovers.</li></ul>
*/
public class SidebarTag extends BodyTagSupport {
......
......@@ -27,14 +27,14 @@ import javax.servlet.jsp.JspTagException;
* <p>A simple tag to gather its body content and pass it to the parent tag. This tag must be used
* as a child of the {@link SidebarTag}.</p>
*
* <p>Sample usage:<ul><tt>
* <p>Sample usage:</p><pre><tt>
*
* &lt;jive:sidebar bean="jivepageinfo"&gt; <br>
* &nbsp;&nbsp;&nbsp;&lt;a href="[url]" title="[description]"&gt;[name]&lt;/a&gt; <br>
* &nbsp;&nbsp;&nbsp;&lt;jive:subsidebar&gt; <br>
* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href="[url]"&gt;[name]&lt;/a&gt; <br>
* &nbsp;&nbsp;&nbsp;&lt;/jive:subsidebar&gt; <br>
* &lt;/jive:sidebar&gt;</tt></ul></p>
* &lt;/jive:sidebar&gt;</tt></pre>
*
* <p>Note, this class has no attributes.</p>
*/
......
......@@ -34,7 +34,7 @@ import java.io.IOException;
* <p>A simple JSP tag for displaying sub-navigation bar information in the admin console. The
* {@link TabsTag} is similiar to this one.</p>
*
* <p>Attributes: <ul>
* <p>Attributes:</p> <ul>
* <li><tt>bean</tt> (required) - the id of the request attribute which is a
* {@link AdminPageBean} instance. This class holds information
* needed to properly render the admin console sidebar.</li>
......@@ -42,27 +42,27 @@ import java.io.IOException;
* <li><tt>currentcss</tt> (optional) - the CSS class name used to decorate the LI of the
* currently selected sidebar item.</li>
* <li><tt>heaadercss</tt> (optional) - the CSS class name used to decorate the LI of the header
* section.</li></ul></p>
* section.</li></ul>
*
* <p>This class assumes there is a request attribute with the name specified by the bean attribute.</p>
*
* <p>This tag prints out minimal HTML. It basically prints an unordered list (UL element) with each
* LI containing an "A" tag specfied by the body content of this tag. For example, the body should contain
* a template A tag which will have its values replaced at runtime: <ul><tt>
* a template A tag which will have its values replaced at runtime: <pre><tt>
*
* &lt;jive:sidebar bean="jivepageinfo"&gt; <br>
* &nbsp;&nbsp;&nbsp;&lt;a href="[url]" title="[description]"&gt;[name]&lt;/a&gt; <br>
* &nbsp;&nbsp;&nbsp;&lt;jive:subsidebar&gt; ... &lt;/jive:subsidebar&gt; <br>
* &lt;/jive:sidebar&gt;</tt></ul>
* &lt;/jive:sidebar&gt;</tt></pre>
*
* There is a subsidebar tag for rendering the sub-sidebars. For more info, see the
* <p>There is a subsidebar tag for rendering the sub-sidebars. For more info, see the
* {@link SubSidebarTag} class.</p>
*
* <p>Available tokens for the "A" tag are: <ul>
* <p>Available tokens for the "A" tag are:</p> <ul>
* <li><tt>[id]</tt> - the ID of the sidebar item, usually not needed.</li>
* <li><tt>[name]</tt> - the name of the sidebar item, should be thought of as the display name.</li>
* <li><tt>[url]</tt> - the URL of the sidebar item.</li>
* <li><tt>[description]</tt> - the description of the sidebar item, good for mouse rollovers.</li></ul></p>
* <li><tt>[description]</tt> - the description of the sidebar item, good for mouse rollovers.</li></ul>
*/
public class SubnavTag extends BodyTagSupport {
......
......@@ -34,29 +34,29 @@ import java.util.List;
* <p>A simple JSP tag for displaying tab information in the admin console. The
* {@link SidebarTag} is similiar to this one.</p>
*
* <p>Attributes: <ul>
* <p>Attributes:</p> <ul>
* <li><tt>bean</tt> (required) - the id of the request attribute which is a
* {@link AdminPageBean} instance. This class holds information
* needed to properly render the admin console tabs.</li>
* <li><tt>css</tt> (optional) - the CSS class name used to decorate the LI of the tab.</li>
* <li><tt>currentcss</tt> (optional) - the CSS class name used to decorate the LI of the
* currently selected tab.</li></ul></p>
* currently selected tab.</li></ul>
*
* <p>This class assumes there is a request attribute with the name specified by the bean attribute.</p>
*
* <p>This tag prints out minimal HTML. It basically prints an unordered list (UL element) with each
* LI containing an "A" tag specfied by the body content of this tag. For example, the body should contain
* a template A tag which will have its values replaced at runtime: <ul><tt>
* a template A tag which will have its values replaced at runtime:</p> <pre><tt>
*
* &lt;jive:tabs bean="jivepageinfo"&gt; <br>
* &nbsp;&nbsp;&nbsp;&lt;a href="[url]" title="[description]"&gt;[name]&lt;/a&gt; <br>
* &lt;/jive:tabs&gt;</tt></ul>
* &lt;/jive:tabs&gt;</tt></pre>
*
* Available token are: <ul>
* <li><tt>[id]</tt> - the ID of the tab, usually not needed.</li>
* <li><tt>[name]</tt> - the name of the tab, should be thought of as the display name.</li>
* <li><tt>[url]</tt> - the URL of the tab.</li>
* <li><tt>[description]</tt> - the description of the tab, good for mouse rollovers.</li></ul></p>
* <li><tt>[description]</tt> - the description of the tab, good for mouse rollovers.</li></ul>
*/
public class TabsTag extends BodyTagSupport {
......
......@@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory;
/**
* Allows PreparedStatement information to be cached. A prepared statement consists of
* a SQL statement containing bind variables as well as variable values. For example,
* the SQL statement <tt>"SELECT * FROM person WHERE age > ?"</tt> would have the integer
* the SQL statement <tt>"SELECT * FROM person WHERE age &gt; ?"</tt> would have the integer
* variable <tt>18</tt> (which replaces the "?" chracter) to find all adults. This class
* encapsulates both the SQL string and bind variable values so that actual
* PreparedStatement can be created from that information later.
......
......@@ -25,10 +25,10 @@ import java.sql.SQLException;
/**
* Abstract class that defines the connection provider framework. Other classes
* extend this abstract class to make connection to actual data sources.<p>
* <p/>
* extend this abstract class to make connection to actual data sources.
* <p>
* It is expected that each subclass be a JavaBean, so that properties of
* the connection provider are exposed through bean introspection.
* the connection provider are exposed through bean introspection.</p>
*
* @author Jive Software
*/
......
......@@ -329,8 +329,7 @@ public class DbConnectionManager {
* ...
* } </pre>
*
* @param rs the result set to close.
* @param stmt the statement to close.
* @param pstmt the statement to close.
*/
public static void fastcloseStmt(PreparedStatement pstmt) throws SQLException
{
......@@ -357,8 +356,7 @@ public class DbConnectionManager {
* ...
* } </pre>
*
* @param rs the result set to close.
* @param stmt the statement to close.
* @param pstmt the statement to close.
*/
public static void fastcloseStmt(ResultSet rs, PreparedStatement pstmt) throws SQLException
{
......@@ -402,7 +400,6 @@ public class DbConnectionManager {
* Closes a statement and database connection (returning the connection to
* the connection pool). This method should be called within the finally section of
* your database logic, as in the following example:
* <p/>
* <pre>
* Connection con = null;
* PrepatedStatment pstmt = null;
......@@ -431,7 +428,6 @@ public class DbConnectionManager {
* statements associated with the connection should be closed before calling this method.
* This method should be called within the finally section of your database logic, as
* in the following example:
* <p/>
* <pre>
* Connection con = null;
* try {
......
......@@ -35,11 +35,11 @@ import org.slf4j.LoggerFactory;
* An implementation of ConnectionProvider that utilizes a JDBC 2.0 DataSource
* made available via JNDI. This is useful for application servers where a pooled
* data connection is already provided so Jive can share the pool with the
* other applications.<p>
* <p/>
* other applications.
* <p>
* The JNDI location of the DataSource stored as the Jive property
* <code>database.JNDIProvider.name</code>. This can be overridden by setting
* the provider's <code>name</code> property if required.
* the provider's <code>name</code> property if required.</p>
*
* @author <a href="mailto:joe@truemesh.com">Joe Walnes</a>
* @see ConnectionProvider
......
......@@ -34,18 +34,17 @@ import org.slf4j.LoggerFactory;
/**
* Manages sequences of unique ID's that get stored in the database. Database support for sequences
* varies widely; some don't use them at all. Instead, we handle unique ID generation with a
* combination VM/database solution.<p/>
*
* combination VM/database solution.
* <p>
* A special table in the database doles out blocks of unique ID's to each
* virtual machine that interacts with Jive. This has the following consequences:
* virtual machine that interacts with Jive. This has the following consequences:</p>
* <ul>
* <li>There is no need to go to the database every time we want a new unique id.
* <li>Multiple app servers can interact with the same db without id collision.
* <li>The order of unique id's may not correspond to the creation date of objects.
* <li>There can be gaps in ID's after server restarts since blocks will get "lost" if the block
* size is greater than 1.
* </ul><p/>
*
* </ul>
* Each sequence type that this class manages has a different block size value. Objects that aren't
* created often have a block size of 1, while frequently created objects such as entries and
* comments have larger block sizes.
......@@ -95,10 +94,10 @@ public class SequenceManager {
/**
* Returns the next id for an object that has defined the annotation {@link JiveID}.
* The JiveID annotation value is the synonymous for the type integer.<p/>
* The JiveID annotation value is the synonymous for the type integer.<p>
*
* The annotation JiveID should contain the id type for the object (the same number you would
* use to call nextID(int type)). Example class definition:
* use to call nextID(int type)). Example class definition:</p>
* <code>
* \@JiveID(10)
* public class MyClass {
......
......@@ -23,7 +23,6 @@ package org.jivesoftware.openfire;
/**
* <p>A simple meta-data class that stores several related tools for
* generic IQ protocol handling.</p>
* <p/>
* <p>To handle an IQ packet, the server needs to know:</p>
* <ul>
* <li>The fully qualified name of the iq sub-element. IQ packets are
......@@ -32,7 +31,6 @@ package org.jivesoftware.openfire;
* server (no 'to' attribute).</li>
* <li>The IQ parser to use to generate the correct IQ packet.</li>
* </ul>
* <p/>
* <p>We provide this information by having all IQHandlers report
* their info. Interested parties can watch for IQHandlers in the service
* lookup and build appropriate data structures on the current state of
......
......@@ -46,7 +46,6 @@ import java.util.List;
* <p>In almost all cases, the caller should not be concerned with what
* handler is associated with a given node. Simply obtain the packet handler
* and deliver the packet to the node, leaving the details up to the handler.</p>
* <p/>
* <p>Routes are matched using the stringprep rules given in the XMPP specification.
* Wildcard routes for a particular name or resource is indicated by a null. E.g.
* routing to any address at server.com should set the name to null, the host to
......@@ -55,7 +54,6 @@ import java.util.List;
* managers should add a route for both the generic user@server.com as well as
* user@server.com/resource routes (knowing that one is an alias for the other
* is the responsibility of the session or session manager).</p>
* <p/>
* <p>In order to accomodate broadcasts, you can also do partial matches by querying
* all 'child' nodes of a particular node. The routing table contains a forest of
* node trees. The node tree is arranged in the following heirarchy:</p>
......@@ -81,7 +79,6 @@ import java.util.List;
* getBestRoute() if you'd like to search for both the resource leaf route, as well as a valid user
* branch for that node if no leaf exists.</li>
* </ul>
* <p/>
* <p>Note: it is important that any component or action affecting routes
* update the routing table immediately.</p>
*
......
......@@ -27,14 +27,14 @@ import java.util.Date;
/**
* Filters and sorts lists of sessions. This allows for a very rich set of possible
* queries that can be run on session data. Some examples are: "Show all sessions
* started during the last hour by a certain user".<p>
*
* started during the last hour by a certain user".
* <p>
* The class also supports pagination of results with the setStartIndex(int)
* and setNumResults(int) methods. If the start index is not set, it will
* begin at index 0 (the start of results). If the number of results is not set,
* it will be unbounded and return as many results as available.<p>
*
* Factory methods to create common queries are provided for convenience.
* it will be unbounded and return as many results as available.</p>
* <p>
* Factory methods to create common queries are provided for convenience.</p>
*
* @author Matt Tucker
*/
......@@ -267,19 +267,20 @@ public class SessionResultFilter {
* the time portion of the date is shown for brevity) <p>
*
* <table border="1">
* <caption></caption>
* <tr><th>Date</th><th>Seconds</th><th>Result</th></tr>
* <tr><td>1:37.48</td><td>5</td><td>1:37.45</td></tr>
* <tr><td>1:37.48</td><td>10</td><td>1:37.40</td></tr>
* <tr><td>1:37.48</td><td>30</td><td>1:37.30</td</tr>
* <tr><td>1:37.48</td><td>30</td><td>1:37.30</td></tr>
* <tr><td>1:37.48</td><td>60</td><td>1:37.00</td></tr>
* <tr><td>1:37.48</td><td>120</td><td>1:36.00</td></tr>
* </table><p>
* </table>
*
* This method is useful when calculating the last post in
* <p>This method is useful when calculating the last post in
* a forum or the number of new messages from a given date. Using a rounded
* date allows Jive to internally cache the results of the date query.
* Here's an example that shows the last posted message in a forum accurate
* to the last 60 seconds:<p>
* to the last 60 seconds:</p>
*
* <pre>
* SessionResultFilter filter = new SessionResultFilter();
......
......@@ -100,21 +100,21 @@ import org.xmpp.packet.JID;
/**
* The main XMPP server that will load, initialize and start all the server's
* modules. The server is unique in the JVM and could be obtained by using the
* {@link #getInstance()} method.<p>
* <p/>
* {@link #getInstance()} method.
* <p>
* The loaded modules will be initialized and may access through the server other
* modules. This means that the only way for a module to locate another module is
* through the server. The server maintains a list of loaded modules.<p>
* <p/>
* through the server. The server maintains a list of loaded modules.
* </p>
* <p>
* After starting up all the modules the server will load any available plugin.
* For more information see: {@link org.jivesoftware.openfire.container.PluginManager}.<p>
* <p/>
* A configuration file keeps the server configuration. This information is required for the
* For more information see: {@link org.jivesoftware.openfire.container.PluginManager}.
* </p>
* <p>A configuration file keeps the server configuration. This information is required for the
* server to work correctly. The server assumes that the configuration file is named
* <b>openfire.xml</b> and is located in the <b>conf</b> folder. The folder that keeps
* the configuration file must be located under the home folder. The server will try different
* methods to locate the home folder.
* <p/>
* methods to locate the home folder.</p>
* <ol>
* <li><b>system property</b> - The server will use the value defined in the <i>openfireHome</i>
* system property.</li>
......
......@@ -25,7 +25,6 @@ import org.xmpp.packet.Packet;
/**
* <p>Use auditors to audit events and messages on the server.</p>
* <p/>
* <p>All events and messages are sent to the auditor for recording.
* The auditor will determine if auditing should take place, and what
* to do with the data.</p>
......
......@@ -30,14 +30,14 @@ public interface ClusterEventListener {
/**
* Notification event indicating that this JVM is now part of a cluster. At this point the
* {@link org.jivesoftware.openfire.XMPPServer#getNodeID()} holds the new nodeID value.<p>
* {@link org.jivesoftware.openfire.XMPPServer#getNodeID()} holds the new nodeID value.
*
* When joining the cluster as the senior cluster member the {@link #markedAsSeniorClusterMember()}
* event will be sent right after this event.<p>
* <p>When joining the cluster as the senior cluster member the {@link #markedAsSeniorClusterMember()}
* event will be sent right after this event.</p>
*
* At this point the CacheFactory holds clustered caches. That means that modifications
* <p>At this point the CacheFactory holds clustered caches. That means that modifications
* to the caches will be reflected in the cluster. The clustered caches were just
* obtained from the cluster and no local cached data was automatically moved.<p>
* obtained from the cluster and no local cached data was automatically moved.</p>
*/
void joinedCluster();
......
......@@ -24,7 +24,7 @@ import org.jivesoftware.openfire.XMPPServer;
/**
* A default Module implementation that basically avoids subclasses having to implement the whole
* Module interface.</p>
* Module interface.
*
* @author Gaston Dombiak
*/
......@@ -60,7 +60,6 @@ public class BasicModule implements Module {
/**
* <p>Initializes the basic module.</p>
* <p/>
* <p>Inheriting classes that choose to override this method MUST
* call this initialize() method before accessing BasicModule resources.</p>
*
......@@ -71,7 +70,6 @@ public class BasicModule implements Module {
/**
* <p>Starts the basic module.</p>
* <p/>
* <p>Inheriting classes that choose to override this method MUST
* call this start() method before accessing BasicModule resources.</p>
*
......@@ -83,7 +81,6 @@ public class BasicModule implements Module {
/**
* <p>Stops the basic module.</p>
* <p/>
* <p>Inheriting classes that choose to override this method MUST
* call this stop() method before accessing BasicModule resources.</p>
*/
......@@ -92,7 +89,6 @@ public class BasicModule implements Module {
/**
* <p>Destroys the module.</p>
* <p/>
* <p>Does nothing in the basic module.</p>
*/
public void destroy() {
......
......@@ -26,23 +26,21 @@ import org.jivesoftware.openfire.XMPPServer;
* Logical, server-managed entities must implement this interface. A module
* represents an operational unit and may contain zero or more services
* and rely on zero or more services that may be hosted by the container.
* <p/>
* <p>
* In order to be hosted in the Jive server container, all modules must:
* </p>
* <ul>
* <li>Implement the Module interface</li>
* <li>Have a public no-arg constructor</li>
* </ul>
* <p/>
* The Jive container will run all modules through a simple lifecycle:
* <p>The Jive container will run all modules through a simple lifecycle:</p>
* <pre>
* constructor -> initialize() -> start() -> stop() -> destroy() -> finalizer
* |<-----------------------| ^
* constructor -&gt; initialize() -&gt; start() -&gt; stop() -&gt; destroy() -&gt; finalizer
* |&lt;-----------------------| ^
* | |
* V----------------------------------->
* V-----------------------------------&gt;
* </pre>
* </p>
* <p/>
* <p>
* The Module interface is intended to provide the simplest mechanism
* for creating, deploying, and managing server modules.
* </p>
......
......@@ -57,9 +57,9 @@ import java.io.File;
* &lt;minServerVersion&gt;3.0.0&lt;/minServerVersion&gt;
* &lt;licenseType&gt;gpl&lt;/licenseType&gt;
* &lt;/plugin&gt;</pre>
* <p/>
* <p>
* Each plugin will be loaded in its own class loader, unless the plugin is configured
* with a parent plugin.<p/>
* with a parent plugin.</p>
*
* Please see the Plugin Developer Guide (available with the
* Openfire documentation) for additional details about plugin development.
......
......@@ -35,8 +35,8 @@ import org.slf4j.LoggerFactory;
/**
* A helper class to read cache configuration data for a plugin and register the defined caches with
* the cache factory. Definitions should look something like this:
* <code>
*
* <pre>
* {@code
* <cache-config>
* <cache-mapping>
* <cache-name>My Cache</cache-name>
......@@ -57,8 +57,8 @@ import org.slf4j.LoggerFactory;
* </init-params>
* </cache-mapping>
* </cache-config>
*
* </code>
* }
* </pre>
*/
public class PluginCacheConfigurator {
......
......@@ -37,10 +37,10 @@ import org.slf4j.LoggerFactory;
/**
* ClassLoader for plugins. It searches the plugin directory for classes
* and JAR files, then constructs a class loader for the resources found.
* Resources are loaded as follows:<ul>
* <p/>
* <li>Any JAR files in the <tt>lib</tt> will be added to the classpath.
* <li>Any files in the classes directory will be added to the classpath.
* Resources are loaded as follows:
* <ul>
* <li>Any JAR files in the <tt>lib</tt> will be added to the classpath.</li>
* <li>Any files in the classes directory will be added to the classpath.</li>
* </ul>
*
* @author Derek DeMoro
......
......@@ -67,9 +67,9 @@ import org.slf4j.LoggerFactory;
/**
* Loads and manages plugins. The <tt>plugins</tt> directory is monitored for any
* new plugins, and they are dynamically loaded.<p/>
* new plugins, and they are dynamically loaded.
*
* An instance of this class can be obtained using:<p/>
* <p>An instance of this class can be obtained using:</p>
*
* <tt>XMPPServer.getInstance().getPluginManager()</tt>
*
......@@ -575,9 +575,10 @@ public class PluginManager {
* and not the name as given by the plugin meta-data. This method only removes
* the plugin but does not delete the plugin JAR file. Therefore, if the plugin JAR
* still exists after this method is called, the plugin will be started again the next
* time the plugin monitor process runs. This is useful for "restarting" plugins.<p>
* <p/>
* time the plugin monitor process runs. This is useful for "restarting" plugins.
* <p>
* This method is called automatically when a plugin's JAR file is deleted.
* </p>
*
* @param pluginName the name of the plugin to unload.
*/
......
......@@ -53,15 +53,15 @@ import org.xml.sax.SAXException;
* The plugin servlet acts as a proxy for web requests (in the admin console)
* to plugins. Since plugins can be dynamically loaded and live in a different place
* than normal Openfire admin console files, it's not possible to have them
* added to the normal Openfire admin console web app directory.<p>
* <p/>
* added to the normal Openfire admin console web app directory.
* <p>
* The servlet listens for requests in the form <tt>/plugins/[pluginName]/[JSP File]</tt>
* (e.g. <tt>/plugins/foo/example.jsp</tt>). It also listens for non JSP requests in the
* form like <tt>/plugins/[pluginName]/images/*.png|gif</tt>,
* <tt>/plugins/[pluginName]/scripts/*.js|css</tt> or
* <tt>/plugins/[pluginName]/styles/*.css</tt> (e.g.
* <tt>/plugins/foo/images/example.gif</tt>).<p>
* <p/>
* <tt>/plugins/foo/images/example.gif</tt>).
* </p>
* JSP files must be compiled and available via the plugin's class loader. The mapping
* between JSP name and servlet class files is defined in [pluginName]/web/web.xml.
* Typically, this file is auto-generated by the JSP compiler when packaging the plugin.
......@@ -259,7 +259,7 @@ public class PluginServlet extends HttpServlet {
* the servlet destroy method.
*
* @param plugin the owner of the servlet
* @param servletUrl the relative url where servlet has been bound
* @param url the relative url where servlet has been bound
* @return the unregistered servlet, so that it can be destroyed
*/
public static GenericServlet unregisterServlet(Plugin plugin, String url)
......
......@@ -25,13 +25,13 @@ import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXB;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.JID;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.JID;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
......@@ -134,13 +134,12 @@ public class CrowdManager {
* @param username
* @param password
* @throws RemoteException
* @throws UnsupportedEncodingException
*/
public void authenticate(String username, String password) throws RemoteException {
username = JID.unescapeNode(username);
if (LOG.isDebugEnabled()) LOG.debug("authenticate '" + String.valueOf(username) + "'");
PostMethod post = new PostMethod(crowdServer.resolve("authentication?username=" + urlEncode(username)).toString());
*/
public void authenticate(String username, String password) throws RemoteException {
username = JID.unescapeNode(username);
if (LOG.isDebugEnabled()) LOG.debug("authenticate '" + String.valueOf(username) + "'");
PostMethod post = new PostMethod(crowdServer.resolve("authentication?username=" + urlEncode(username)).toString());
AuthenticatePost creds = new AuthenticatePost();
creds.value = password;
......@@ -156,14 +155,14 @@ public class CrowdManager {
} catch (IOException ioe) {
handleError(ioe);
} finally {
post.releaseConnection();
}
LOG.info("authenticated user:" + username);
}
} finally {
post.releaseConnection();
}
LOG.info("authenticated user:" + username);
}
/**
* Get all the users from Crowd
* @return a List of User containing all the users stored in Crowd
......@@ -193,13 +192,13 @@ public class CrowdManager {
} finally {
get.releaseConnection();
}
if (users != null && users.user != null) {
for (User user : users.user) {
user.name = JID.escapeNode(user.name);
results.add(user);
}
if (users != null && users.user != null) {
for (User user : users.user) {
user.name = JID.escapeNode(user.name);
results.add(user);
}
if (users.user.size() != maxResults) {
break;
} else {
......@@ -275,13 +274,13 @@ public class CrowdManager {
* Get all the groups of a given username
* @param username
* @return a List of groups name
* @throws RemoteException
*/
public List<String> getUserGroups(String username) throws RemoteException {
username = JID.unescapeNode(username);
if (LOG.isDebugEnabled()) LOG.debug("fetch all crowd groups for user:" + username);
int maxResults = 100;
* @throws RemoteException
*/
public List<String> getUserGroups(String username) throws RemoteException {
username = JID.unescapeNode(username);
if (LOG.isDebugEnabled()) LOG.debug("fetch all crowd groups for user:" + username);
int maxResults = 100;
int startIndex = 0;
List<String> results = new ArrayList<String>();
StringBuilder request = new StringBuilder("user/group/nested?username=").append(urlEncode(username))
......@@ -386,13 +385,13 @@ public class CrowdManager {
} finally {
get.releaseConnection();
}
if (users != null && users.user != null) {
for (org.jivesoftware.openfire.crowd.jaxb.User user : users.user) {
results.add(JID.escapeNode(user.name));
}
if (users.user.size() != maxResults) {
if (users != null && users.user != null) {
for (org.jivesoftware.openfire.crowd.jaxb.User user : users.user) {
results.add(JID.escapeNode(user.name));
}
if (users.user.size() != maxResults) {
break;
} else {
startIndex += maxResults;
......
......@@ -29,11 +29,12 @@ import java.util.Iterator;
/**
* A DiscoInfoProvider is responsible for providing information about a JID's name and its node. For
* example, the room service could implement this interface in order to provide disco#info about
* its rooms. In this case, the JID's name will be the room's name and node will be null.<p>
* <p/>
* its rooms. In this case, the JID's name will be the room's name and node will be null.
* <p>
* The information to provide has to include the entity's identity and the features offered and
* protocols supported by the target entity. The identity will be provided as an Element that will
* include the categoty, type and name attributes. Whilst the features will be just plain Strings.
* </p>
*
* @author Gaston Dombiak
*/
......
......@@ -27,11 +27,11 @@ import java.util.Iterator;
/**
* A DiscoItemsProvider is responsible for providing the items associated with a JID's name and
* node. For example, the room service could implement this interface in order to provide
* the existing rooms as its items. In this case, the JID's name and node won't be used.<p>
* <p/>
* the existing rooms as its items. In this case, the JID's name and node won't be used.
* <p>
* The items to provide must have a JID attribute specifying the JID of the item and may possess a
* name attribute specifying a natural-language name for the item. The node attribute is optional
* and must be used only for items that aren't addressable as a JID.
* and must be used only for items that aren't addressable as a JID.</p>
*
* @author Gaston Dombiak
*/
......
......@@ -25,8 +25,8 @@ import org.xmpp.packet.JID;
/**
* Represent a DiscoItem provided by the server. Therefore, the DiscoServerItems are responsible
* for providing the DiscoInfoProvider and DiscoItemsProvider that will provide the information and
* items related to this item.<p>
* <p/>
* items related to this item.
* <p>
* When the server starts up, IQDiscoItemsHandler will request to all the services that implement
* the ServerItemsProvider interface for their DiscoServerItems. Each DiscoServerItem will provide
* its DiscoInfoProvider which will automatically be included in IQDiscoInfoHandler as the provider
......@@ -34,6 +34,7 @@ import org.xmpp.packet.JID;
* which will automatically be included in IQDiscoItemsHandler. Special attention must be paid to
* the JID since all the items with the same host will share the same DiscoInfoProvider or
* DiscoItemsProvider.
* </p>
*
* @author Gaston Dombiak
*/
......
......@@ -50,8 +50,8 @@ import java.util.concurrent.locks.Lock;
* IQDiscoInfoHandler is responsible for handling disco#info requests. This class holds a map with
* the main entities and the associated DiscoInfoProvider. We are considering the host of the
* recipient JIDs as main entities. It's the DiscoInfoProvider responsibility to provide information
* about the JID's name together with any possible requested node.<p>
* <p/>
* about the JID's name together with any possible requested node.
* <p>
* For example, let's have in the entities map the following entries: "localhost" and
* "conference.localhost". Associated with each entry we have different DiscoInfoProviders. Now we
* receive a disco#info request for the following JID: "room@conference.localhost" which is a disco
......@@ -62,7 +62,7 @@ import java.util.concurrent.locks.Lock;
* could find its identity and the features it supports (e.g. 'muc_passwordprotected',
* 'muc_unmoderated', etc.). Finally, after we have collected all the information provided by the
* provider we will add it to the reply. On the other hand, if no provider was found or the provider
* has no information for the requested name/node then a not-found error will be returned.
* has no information for the requested name/node then a not-found error will be returned.</p>
*
* @author Gaston Dombiak
*/
......
......@@ -57,8 +57,8 @@ import java.util.concurrent.locks.Lock;
* IQDiscoItemsHandler is responsible for handling disco#items requests. This class holds a map with
* the main entities and the associated DiscoItemsProvider. We are considering the host of the
* recipient JIDs as main entities. It's the DiscoItemsProvider responsibility to provide the items
* associated with the JID's name together with any possible requested node.<p>
* <p/>
* associated with the JID's name together with any possible requested node.
* <p>
* For example, let's have in the entities map the following entries: "localhost" and
* "conference.localhost". Associated with each entry we have different DiscoItemsProvider. Now we
* receive a disco#items request for the following JID: "room@conference.localhost" which is a disco
......@@ -69,9 +69,10 @@ import java.util.concurrent.locks.Lock;
* the list of existing occupants if that information is publicly available. Finally, after we have
* collected all the items provided by the provider we will add them to the reply. On the other
* hand, if no provider was found or the provider has no information for the requested name/node
* then a not-found error will be returned.<p>
* <p/>
* then a not-found error will be returned.</p>
* <p>
* Publishing of client items is still not supported.
* </p>
*
* @author Gaston Dombiak
*/
......
......@@ -25,13 +25,12 @@ import java.util.Iterator;
/**
* ServerFeaturesProviders are responsible for providing the features offered and supported
* protocols by the SERVER. Example of server features are: jabber:iq:agents, jabber:iq:time, etc.
* <p/>
* <p/>
* <p>
* When the server starts up, IQDiscoInfoHandler will request to all the services that implement
* the ServerFeaturesProvider interface for their features. Whenever a disco request is received
* IQDiscoInfoHandler will add to the provided information all the collected features. Therefore, a
* service must implement this interface in order to offer/publish its features as part of the
* server features.
* server features.</p>
*
* @author Gaston Dombiak
*/
......
......@@ -28,9 +28,8 @@ import java.util.Iterator;
* <p>
* A <code>ServerIdentitiesProvider</code> is responsible for providing the identities
* of protocols supported by the SERVER. An example of a server identity is that
* for PEP (XEP-0163): <identity category="pubsub" type="pep" />
* <p/>
*
* for PEP (XEP-0163): {@code <identity category="pubsub" type="pep" />}
* </p>
* <p>
* When the server starts up, IQDiscoInfoHandler will request to all the services that implement
* the ServerIdentitiesProvider interface for their identities. Whenever a disco request is received
......
......@@ -24,8 +24,8 @@ import java.util.Iterator;
/**
* ServerItemsProvider are responsible for providing the items associated with the SERVER. Example
* of server items are: Public Chatrooms, PubSub service, etc.<p>
* <p/>
* of server items are: Public Chatrooms, PubSub service, etc.
* <p>
* When the server starts up, IQDiscoItemsHandler will request to all the services that implement
* the ServerItemsProvider interface for their DiscoServerItems. Each DiscoServerItem will provide
* its DiscoInfoProvider which will automatically be included in IQDiscoInfoHandler as the provider
......@@ -33,7 +33,7 @@ import java.util.Iterator;
* which will automatically be included in IQDiscoItemsHandler. Special attention must be paid to
* the JID since all the items with the same host will share the same DiscoInfoProvider or
* DiscoItemsProvider. Therefore, a service must implement this interface in order to get its
* services published as items associatd with the server.
* services published as items associatd with the server.</p>
*
* @author Gaston Dombiak
*/
......
......@@ -28,9 +28,8 @@ import java.util.Iterator;
* <p>
* A <code>UserIdentitiesProvider</code> is responsible for providing the identities
* of protocols supported by users. An example of a user identity is one
* for PEP (XEP-0163): <identity category="pubsub" type="pep" />
* <p/>
*
* for PEP (XEP-0163): {@code <identity category="pubsub" type="pep" />}
* </p>
* <p>
* When the server starts up, IQDiscoInfoHandler will request to all the services that implement
* the UserIdentitiesProvider interface for their identities. Whenever a disco request is received
......
......@@ -38,7 +38,6 @@ import java.util.Iterator;
* <li>For discovering PEP items of a user.</li>
* <li>For discovering available resources of a user.</li>
* </ul>
* </p>
*
* @author Armando Jagucki
*/
......
......@@ -27,16 +27,16 @@ import java.util.List;
/**
* Represents a form that could be use for gathering data as well as for reporting data
* returned from a search.
* <p/>
* <p>
* The form could be of the following types:
* </p>
* <ul>
* <li>form -> Indicates a form to fill out.</li>
* <li>submit -> The form is filled out, and this is the data that is being returned from
* <li>form -&gt; Indicates a form to fill out.</li>
* <li>submit -&gt; The form is filled out, and this is the data that is being returned from
* the form.</li>
* <li>cancel -> The form was cancelled. Tell the asker that piece of information.</li>
* <li>result -> Data results being returned from a search, or some other query.</li>
* <li>cancel -&gt; The form was cancelled. Tell the asker that piece of information.</li>
* <li>result -&gt; Data results being returned from a search, or some other query.</li>
* </ul>
* <p/>
* In case the form represents a search, the report will be structured in columns and rows. Use
* {@link #addReportedField(FormField)} to set the columns of the report whilst the report's rows
* can be configured using {@link #addItemFields(ArrayList)}.
......@@ -54,7 +54,7 @@ public interface DataForm {
/**
* Sets the description of the data. It is similar to the title on a web page or an X window.
* You can put a <title/> on either a form to fill out, or a set of data results.
* You can put a {@code <title/>} on either a form to fill out, or a set of data results.
*
* @param title description of the data.
*/
......@@ -71,16 +71,17 @@ public interface DataForm {
/**
* Returns the meaning of the data within the context. The data could be part of a form
* to fill out, a form submission or data results.<p>
* <p/>
* to fill out, a form submission or data results.
* <p>
* Possible form types are:
* </p>
* <ul>
* <li>form -> This packet contains a form to fill out. Display it to the user (if your
* <li>form -&gt; This packet contains a form to fill out. Display it to the user (if your
* program can).</li>
* <li>submit -> The form is filled out, and this is the data that is being returned from
* <li>submit -&gt; The form is filled out, and this is the data that is being returned from
* the form.</li>
* <li>cancel -> The form was cancelled. Tell the asker that piece of information.</li>
* <li>result -> Data results being returned from a search, or some other query.</li>
* <li>cancel -&gt; The form was cancelled. Tell the asker that piece of information.</li>
* <li>result -&gt; Data results being returned from a search, or some other query.</li>
* </ul>
*
* @return the form's type.
......@@ -89,7 +90,7 @@ public interface DataForm {
/**
* Returns the description of the data. It is similar to the title on a web page or an X
* window. You can put a <title/> on either a form to fill out, or a set of data results.
* window. You can put a {@code <title/>} on either a form to fill out, or a set of data results.
*
* @return description of the data.
*/
......
......@@ -68,21 +68,20 @@ public interface FormField {
/**
* Sets an indicative of the format for the data to answer. Valid formats are:
* <p/>
* <ul>
* <li>text-single -> single line or word of text
* <li>text-private -> instead of showing the user what they typed, you show ***** to
* <li>text-single -&gt; single line or word of text
* <li>text-private -&gt; instead of showing the user what they typed, you show ***** to
* protect it
* <li>text-multi -> multiple lines of text entry
* <li>list-single -> given a list of choices, pick one
* <li>list-multi -> given a list of choices, pick one or more
* <li>boolean -> 0 or 1, true or false, yes or no. Default value is 0
* <li>fixed -> fixed for putting in text to show sections, or just advertise your web
* <li>text-multi -&gt; multiple lines of text entry
* <li>list-single -&gt; given a list of choices, pick one
* <li>list-multi -&gt; given a list of choices, pick one or more
* <li>boolean -&gt; 0 or 1, true or false, yes or no. Default value is 0
* <li>fixed -&gt; fixed for putting in text to show sections, or just advertise your web
* site in the middle of the form
* <li>hidden -> is not given to the user at all, but returned with the questionnaire
* <li>jid-single -> Jabber ID - choosing a JID from your roster, and entering one based
* <li>hidden -&gt; is not given to the user at all, but returned with the questionnaire
* <li>jid-single -&gt; Jabber ID - choosing a JID from your roster, and entering one based
* on the rules for a JID.
* <li>jid-multi -> multiple entries for JIDs
* <li>jid-multi -&gt; multiple entries for JIDs
* </ul>
*
* @param type an indicative of the format for the data to answer.
......@@ -107,9 +106,10 @@ public interface FormField {
/**
* Sets a description that provides extra clarification about the question. This information
* could be presented to the user either in tool-tip, help button, or as a section of text
* before the question.<p>
* <p/>
* before the question.
* <p>
* If the question is of type FIXED then the description should remain empty.
* </p>
*
* @param description provides extra clarification about the question.
*/
......@@ -140,21 +140,20 @@ public interface FormField {
/**
* Returns an indicative of the format for the data to answer. Valid formats are:
* <p/>
* <ul>
* <li>text-single -> single line or word of text
* <li>text-private -> instead of showing the user what they typed, you show ***** to
* <li>text-single -&gt; single line or word of text
* <li>text-private -&gt; instead of showing the user what they typed, you show ***** to
* protect it
* <li>text-multi -> multiple lines of text entry
* <li>list-single -> given a list of choices, pick one
* <li>list-multi -> given a list of choices, pick one or more
* <li>boolean -> 0 or 1, true or false, yes or no. Default value is 0
* <li>fixed -> fixed for putting in text to show sections, or just advertise your web
* <li>text-multi -&gt; multiple lines of text entry
* <li>list-single -&gt; given a list of choices, pick one
* <li>list-multi -&gt; given a list of choices, pick one or more
* <li>boolean -&gt; 0 or 1, true or false, yes or no. Default value is 0
* <li>fixed -&gt; fixed for putting in text to show sections, or just advertise your web
* site in the middle of the form
* <li>hidden -> is not given to the user at all, but returned with the questionnaire
* <li>jid-single -> Jabber ID - choosing a JID from your roster, and entering one based
* <li>hidden -&gt; is not given to the user at all, but returned with the questionnaire
* <li>jid-single -&gt; Jabber ID - choosing a JID from your roster, and entering one based
* on the rules for a JID.
* <li>jid-multi -> multiple entries for JIDs
* <li>jid-multi -&gt; multiple entries for JIDs
* </ul>
*
* @return format for the data to answer.
......@@ -172,9 +171,10 @@ public interface FormField {
/**
* Returns a description that provides extra clarification about the question. This information
* could be presented to the user either in tool-tip, help button, or as a section of text
* before the question.<p>
* <p/>
* before the question.
* <p>
* If the question is of type FIXED then the description should remain empty.
* </p>
*
* @return description that provides extra clarification about the question.
*/
......
......@@ -22,7 +22,7 @@ import org.xmpp.packet.JID;
* addition, group search operations are disabled.
*
* Subclasses may optionally implement these capabilities, and must also
* at minimum implement the {@link GroupProvider.getGroup(String)} method.
* at minimum implement the {@link GroupProvider#getGroup(String)} method.
*
* @author Tom Evans
*/
......@@ -253,7 +253,7 @@ public abstract class AbstractGroupProvider implements GroupProvider {
* Returns a custom {@link Map} that updates the database whenever
* a property value is added, changed, or deleted.
*
* @param name The target group
* @param group The target group
* @return The properties for the given group
*/
public PersistableMap<String,String> loadProperties(Group group) {
......
......@@ -46,10 +46,11 @@ import org.xmpp.packet.JID;
public interface GroupProvider {
/**
* Creates a group with the given name (optional operation).<p>
*
* Creates a group with the given name (optional operation).
* <p>
* The provider is responsible for setting the creation date and
* modification date to the current date/time.
* </p>
*
* @param name name of the group.
* @return the newly created group.
......@@ -131,7 +132,7 @@ public interface GroupProvider {
/**
* Returns an unmodifiable Collection of all shared groups in the system for a given user.
*
* @param JID The bare JID for the user (node@domain)
* @param user The bare JID for the user (node@domain)
* @return unmodifiable Collection of all shared groups in the system for a given user.
*/
Collection<String> getSharedGroupNames(JID user);
......
......@@ -35,20 +35,19 @@ import org.slf4j.LoggerFactory;
* web browser for the current user of the system to the given URL. It may support other
* protocols depending on the system -- mailto, ftp, etc. -- but that has not been rigorously
* tested and is not guaranteed to work.
* <p/>
* Yes, this is platform-specific code, and yes, it may rely on classes on certain platforms
* <p>Yes, this is platform-specific code, and yes, it may rely on classes on certain platforms
* that are not part of the standard JDK. What we're trying to do, though, is to take something
* that's frequently desirable but inherently platform-specific -- opening a default browser --
* and allow programmers (you, for example) to do so without worrying about dropping into native
* code or doing anything else similarly evil.
* <p/>
* Anyway, this code is completely in Java and will run on all JDK 1.1-compliant systems without
* </p>
* <p>Anyway, this code is completely in Java and will run on all JDK 1.1-compliant systems without
* modification or a need for additional libraries. All classes that are required on certain
* platforms to allow this to run are dynamically loaded at runtime via reflection and, if not
* found, will not cause this to do anything other than returning an error when opening the
* browser.
* <p/>
* There are certain system requirements for this class, as it's running through Runtime.exec(),
* </p>
* <p>There are certain system requirements for this class, as it's running through Runtime.exec(),
* which is Java's way of making a native system call. Currently, this requires that a Macintosh
* have a Finder which supports the GURL event, which is true for Mac OS 8.0 and 8.1 systems that
* have the Internet Scripting AppleScript dictionary installed in the Scripting Additions folder
......@@ -57,15 +56,15 @@ import org.slf4j.LoggerFactory;
* (Windows 95, 98, and NT 4.0, as well as later versions of all). On other systems, this drops
* back from the inherently platform-sensitive concept of a default browser and simply attempts
* to launch Netscape via a shell command.
* <p/>
* This code is Copyright 1999-2001 by Eric Albert (ejalbert@cs.stanford.edu) and may be
* </p>
* <p>This code is Copyright 1999-2001 by Eric Albert (ejalbert@cs.stanford.edu) and may be
* redistributed or modified in any form without restrictions as long as the portion of this
* comment from this paragraph through the end of the comment is not removed. The author
* requests that he be notified of any application, applet, or other binary that makes use of
* this code, but that's more out of curiosity than anything and is not required. This software
* includes no warranty. The author is not repsonsible for any loss of data or functionality
* or any adverse or unexpected effects of using this software.
* <p/>
* </p>
* Credits:
* <br>Steven Spencer, JavaWorld magazine (<a href="http://www.javaworld.com/javaworld/javatips/jw-javatip66.html">Java Tip 66</a>)
* <br>Thanks also to Ron B. Yeh, Eric Shapiro, Ben Engber, Paul Teitlebaum, Andrea Cantatore,
......
......@@ -341,8 +341,8 @@ public final class GraphicUtils {
* not be loaded, then <code>null</code> is returned. Images loaded here
* will be added to an internal cache based upon the full {@link URL} to
* their location.
* <p/>
* <em>This method replaces legacy code from JDeveloper 3.x and earlier.</em>
* <p>
* <em>This method replaces legacy code from JDeveloper 3.x and earlier.</em></p>
*
* @see Class#getResource(String)
* @see Toolkit#createImage(URL)
......
......@@ -26,9 +26,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
/**
* Dispatches lockout events. The following events are supported:
* <ul>
* <li><b>accountLocked</b> --> An account has been disabled/locked out.</li>
* <li><b>accountUnlocked</b> --> An account has been enabled/unlocked.</li>
* <li><b>lockedAccountDenied</b> --> A locked out account has been denied login.</li>
* <li><b>accountLocked</b> --&gt; An account has been disabled/locked out.</li>
* <li><b>accountUnlocked</b> --&gt; An account has been enabled/unlocked.</li>
* <li><b>lockedAccountDenied</b> --&gt; A locked out account has been denied login.</li>
* </ul>
* Use {@link #addListener(LockOutEventListener)} and {@link #removeListener(LockOutEventListener)}
* to add or remove {@link LockOutEventListener}.
......
......@@ -27,12 +27,12 @@ import java.util.concurrent.ConcurrentLinkedQueue;
/**
* Dispatches MUC events. The following events are supported:
* <ul>
* <li><b>occupantJoined</b> --> Someone joined a room.</li>
* <li><b>occupantLeft</b> --> Someone left a room.</li>
* <li><b>nicknameChanged</b> --> A nickname was changed in a room.</li>
* <li><b>messageReceived</b> --> A message was received in a room.</li>
* <li><b>roomCreated</b> --> A room was created.</li>
* <li><b>roomDestryod</b> --> A room was destroyed.</li>
* <li><b>occupantJoined</b> --&gt; Someone joined a room.</li>
* <li><b>occupantLeft</b> --&gt; Someone left a room.</li>
* <li><b>nicknameChanged</b> --&gt; A nickname was changed in a room.</li>
* <li><b>messageReceived</b> --&gt; A message was received in a room.</li>
* <li><b>roomCreated</b> --&gt; A room was created.</li>
* <li><b>roomDestroyed</b> --&gt; A room was destroyed.</li>
* </ul>
* Use {@link #addListener(MUCEventListener)} and {@link #removeListener(MUCEventListener)}
* to add or remove {@link MUCEventListener}.
......
......@@ -29,9 +29,9 @@ import org.xmpp.packet.Presence;
* Defines the permissions and actions that a MUCUser may use in
* a particular room. Each MUCRole defines the relationship between
* a MUCRoom and a MUCUser.
* <p/>
* <p>
* MUCUsers can play different roles in different chatrooms.
*
* </p>
* @author Gaston Dombiak
*/
public interface MUCRole {
......@@ -54,9 +54,10 @@ public interface MUCRole {
* Call this method to promote or demote a user's role in a chatroom.
* It is common for the chatroom or other chat room members to change
* the role of users (a moderator promoting another user to moderator
* status for example).<p>
* <p/>
* status for example).
* <p>
* Owning ChatUsers should have their membership roles updated.
* </p>
*
* @param newRole The new role that the user will play.
* @throws NotAllowedException Thrown if trying to change the moderator role to an owner or
......
......@@ -29,11 +29,12 @@ import org.xmpp.packet.Packet;
* the chat server. Centralizing chat users to the Jabber entity that
* sends and receives the chat messages allows us to create quality of
* service, authorization, and resource decisions on a real-user basis.
* <p/>
* <p>
* Most chat users in a typical s2s scenario will not be local users.
* </p><p>
* MUCUsers play one or more roles in one or more chat rooms on the
* server.
* </p>
*
* @author Gaston Dombiak
*/
......
......@@ -67,7 +67,7 @@ public interface PubSubService {
* Returns a registry of the presence's show value of users that subscribed to a node of
* the pubsub service and for which the node only delivers notifications for online users
* or node subscriptions deliver events based on the user presence show value. Offline
* users will not have an entry in the map. Note: Key-> bare JID and Value-> Map whose key
* users will not have an entry in the map. Note: Key-&gt; bare JID and Value-&gt; Map whose key
* is full JID of connected resource and value is show value of the last received presence.
*
* @return a registry of the presence's show value of users that subscribed to a node
......
......@@ -62,7 +62,7 @@ import org.xmpp.packet.Presence;
/**
* <p>A roster is a list of users that the user wishes to know if they are online.</p>
* <p>Rosters are similar to buddy groups in popular IM clients. The Roster class is
* a representation of the roster data.<p/>
* a representation of the roster data.</p>
*
* <p>Updates to this roster is effectively a change to the user's roster. To reflect this,
* the changes to this class will automatically update the persistently stored roster, as well as
......@@ -571,7 +571,6 @@ public class Roster implements Cacheable, Externalizable {
/**
* <p>Broadcast the presence update to all subscribers of the roter.</p>
* <p/>
* <p>Any presence change typically results in a broadcast to the roster members.</p>
*
* @param packet The presence packet to broadcast
......
......@@ -26,10 +26,10 @@ import java.util.concurrent.CopyOnWriteArrayList;
/**
* Dispatches roster events. The following events are supported:
* <ul>
* <li><b>rosterLoaded</b> --> A roster has just been loaded.</li>
* <li><b>contactAdded</b> --> A contact has been added to a roster.</li>
* <li><b>contactUpdated</b> --> A contact has been updated of a roster.</li>
* <li><b>contactDeleted</b> --> A contact has been deleted from a roster.</li>
* <li><b>rosterLoaded</b> --&gt; A roster has just been loaded.</li>
* <li><b>contactAdded</b> --&gt; A contact has been added to a roster.</li>
* <li><b>contactUpdated</b> --&gt; A contact has been updated of a roster.</li>
* <li><b>contactDeleted</b> --&gt; A contact has been deleted from a roster.</li>
* </ul>
* Use {@link #addListener(RosterEventListener)} and {@link #removeListener(RosterEventListener)}
* to add or remove {@link RosterEventListener}.
......
......@@ -44,7 +44,6 @@ import java.util.*;
* <p>The server doesn't need to know anything about roster groups so they are
* not stored with easy retrieval or manipulation in mind. The important data
* elements of a roster item (beyond the jid adddress of the roster entry) includes:</p>
* <p/>
* <ul>
* <li>nick - A nickname for the user when used in this roster</li>
* <li>sub - A subscription type: to, from, none, both</li>
......@@ -508,7 +507,6 @@ public class RosterItem implements Cacheable, Externalizable {
/**
* <p>Update the cached item as a copy of the given item.</p>
* <p/>
* <p>A convenience for getting the item and setting each attribute.</p>
*
* @param item The item who's settings will be copied into the cached copy
......
......@@ -42,22 +42,19 @@ import org.xmpp.packet.JID;
/**
* The JDBC user provider allows you to use an external database to define the users.
* It is best used with the JDBCAuthProvider & JDBCGroupProvider to provide integration
* It is best used with the JDBCAuthProvider &amp; JDBCGroupProvider to provide integration
* between your external system and Openfire. All data is treated as read-only so any
* set operations will result in an exception.<p/>
*
* For the seach facility, the SQL will be constructed from the SQL in the <i>search</i>
* set operations will result in an exception.
* <p>For the seach facility, the SQL will be constructed from the SQL in the <i>search</i>
* section below, as well as the <i>usernameField</i>, the <i>nameField</i> and the
* <i>emailField</i>.<p/>
*
* To enable this provider, set the following in the system properties:<p/>
*
* <i>emailField</i>.</p>
* <p>To enable this provider, set the following in the system properties:</p>
* <ul>
* <li><tt>provider.user.className = org.jivesoftware.openfire.user.JDBCUserProvider</tt></li>
* </ul>
*
* <p>
* Then you need to set your driver, connection string and SQL statements:
* <p/>
* </p>
* <ul>
* <li><tt>jdbcProvider.driver = com.mysql.jdbc.Driver</tt></li>
* <li><tt>jdbcProvider.connectionString = jdbc:mysql://localhost/dbname?user=username&amp;password=secret</tt></li>
......
......@@ -30,10 +30,10 @@ import java.util.concurrent.CopyOnWriteArrayList;
/**
* Dispatches presence events. The following events are supported:
* <ul>
* <li><b>availableSession</b> --> A session is now available to receive communication.</li>
* <li><b>unavailableSession</b> --> A session is no longer available.</li>
* <li><b>presencePriorityChanged</b> --> The priority of a resource has changed.</li>
* <li><b>presenceChanged</b> --> The show or status value of an available session has changed.</li>
* <li><b>availableSession</b> --&gt; A session is now available to receive communication.</li>
* <li><b>unavailableSession</b> --&gt; A session is no longer available.</li>
* <li><b>presencePriorityChanged</b> --&gt; The priority of a resource has changed.</li>
* <li><b>presenceChanged</b> --&gt; The show or status value of an available session has changed.</li>
* </ul>
* Use {@link #addListener(PresenceEventListener)} and
* {@link #removeListener(PresenceEventListener)} to add or remove {@link PresenceEventListener}.
......
......@@ -27,9 +27,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
/**
* Dispatches vCard events. The following events are supported:
* <ul>
* <li><b>VCardCreated</b> --> A VCard has been created.</li>
* <li><b>VCardDeleted</b> --> A VCard has been deleted.</li>
* <li><b>VCardUpdate</b> --> A VCard has been updated.</li>
* <li><b>VCardCreated</b> --&gt; A VCard has been created.</li>
* <li><b>VCardDeleted</b> --&gt; A VCard has been deleted.</li>
* <li><b>VCardUpdate</b> --&gt; A VCard has been updated.</li>
* </ul>
* Use {@link #addListener(org.jivesoftware.openfire.vcard.VCardListener)}
* to add or remove {@link org.jivesoftware.openfire.vcard.VCardListener}.
......
......@@ -104,11 +104,12 @@ public class VCardManager extends BasicModule implements ServerFeaturesProvider
* has no defined text then an empty string will be returned. However, if the property
* does not exist then a <tt>null</tt> value will be answered. Advanced user systems can
* use vCard information to link to user directory information or store other relevant
* user information.</p>
* user information.
* <p>
* Note that many elements in the vCard may have the same path so the returned value in that
* case will be the first found element. For instance, "ADR:STREET" may be present in
* many addresses of the user. Use {@link #getVCard(String)} to get the whole vCard of
* the user.
* the user.</p>
*
* @param username The username of the user to return his vCard property.
* @param name The name of the vcard property to retrieve encoded with ':' to denote
......
......@@ -9,7 +9,7 @@ package org.jivesoftware.util;
* </p>
* <ul>
* <li>v2.2.1 - Fixed bug using URL_SAFE and ORDERED encodings. Fixed bug
* when using very small files (~< 40 bytes).</li>
* when using very small files (~&lt; 40 bytes).</li>
* <li>v2.2 - Added some helper methods for encoding/decoding directly from
* one file to the next. Also added a main() method to support command line
* encoding/decoding from one file to the next. Also added these Base64 dialects:
......
......@@ -21,9 +21,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A class that provides easy Blowfish encryption.<p>
* A class that provides easy Blowfish encryption.
*
* @author Markus Hahn <markus_hahn@gmx.net>
* @author Markus Hahn &lt;markus_hahn@gmx.net&gt;
* @author Gaston Dombiak
*/
public class Blowfish implements Encryptor {
......
......@@ -34,7 +34,7 @@ import java.util.*;
* &lt;/Y&gt;
* &lt;/X&gt;
* </pre>
* And X.Y.Z:key to anotherValue as:</p>
* <p>And X.Y.Z:key to anotherValue as:</p>
* <pre>
* &lt;X&gt;
* &lt;Y&gt;
......@@ -143,9 +143,9 @@ public class ElementUtil {
* Return all values who's path matches the given property name as a String array,
* or an empty array if the if there are no children. You MAY NOT use the atttribute
* markup (using a ':' in the last element name) with this call.
* <p/>
* <p>
* getProperties() allows you to retrieve several values with the same property name.
* For example, consider the XML file entry:
* For example, consider the XML file entry:</p>
* <pre>
* &lt;foo&gt;
* &lt;bar&gt;
......
......@@ -62,8 +62,8 @@ import java.util.zip.GZIPInputStream;
* which fixes a bug where users of the admin console who installed Clearspace
* behind a proxy server would have to wait upwards of 5 minutes in order for the
* HTTP connection to jivesoftware.com/blog/feed to timeout.
* <p/>
* See <a href="http://www.jivesoftware.com/issues/browse/CS-669">http://www.jivesoftware.com/issues/browse/CS-669</a>
*
* @see <a href="http://www.jivesoftware.com/issues/browse/CS-669">http://www.jivesoftware.com/issues/browse/CS-669</a>
*
*/
public class HttpClientWithTimeoutFeedFetcher extends AbstractFeedFetcher {
......
......@@ -25,8 +25,8 @@ import java.util.*;
/**
* <p>A type safe enumeration object that is keyed by an Int
* value for switch statements and storage in DBs.</p>
* <p/>
* <p>Used for indicating distinct states in a generic manner
* <p>
* Used for indicating distinct states in a generic manner
* where each enum should have an associated int value. The
* given int should be unique for each enum value as hashCode
* and equals depends solely on the int value given. Most
......
......@@ -45,7 +45,7 @@ public class JiveConstants {
* a unified date/time format for XMPP.
*
* @deprecated Deprecated by the org.jivesoftware.util.XMPPDateTimeFormat class
* @see {@link org.jivesoftware.util.XMPPDateTimeFormat}
* @see org.jivesoftware.util.XMPPDateTimeFormat
*/
@Deprecated
public static final String XMPP_DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
......@@ -56,7 +56,7 @@ public class JiveConstants {
* a specialized date format for historical XMPP usage.
*
* @deprecated Deprecated by the org.jivesoftware.util.XMPPDateTimeFormat class
* @see {@link org.jivesoftware.util.XMPPDateTimeFormat}
* @see org.jivesoftware.util.XMPPDateTimeFormat
*/
@Deprecated
public static final String XMPP_DELAY_DATETIME_FORMAT = "yyyyMMdd'T'HH:mm:ss";
......
......@@ -787,7 +787,7 @@ public class JiveGlobals {
* names are hidden from the Openfire console.
*
* @param name The name of the property
* @returns True if the property is considered sensitive, otherwise false
* @return True if the property is considered sensitive, otherwise false
*/
public static boolean isPropertySensitive(String name) {
......@@ -802,7 +802,7 @@ public class JiveGlobals {
* Determines whether a property is configured for encryption.
*
* @param name The name of the property
* @returns True if the property is stored using encryption, otherwise false
* @return True if the property is stored using encryption, otherwise false
*/
public static boolean isPropertyEncrypted(String name) {
if (securityProperties == null) {
......@@ -818,7 +818,7 @@ public class JiveGlobals {
*
* @param name The name of the property
* @param encrypt True to encrypt the property, false to decrypt
* @returns True if the property's encryption status changed, otherwise false
* @return True if the property's encryption status changed, otherwise false
*/
public static boolean setPropertyEncrypted(String name, boolean encrypt) {
if (securityProperties == null) {
......@@ -839,7 +839,7 @@ public class JiveGlobals {
/**
* Fetches the current value of the property encryption key.
*
* @returns The property encryption key
* @return The property encryption key
*/
public static Encryptor getPropertyEncryptor() {
if (securityProperties == null) {
......
......@@ -24,16 +24,16 @@ package org.jivesoftware.util;
* Doubly linked node in a LinkedList. Most LinkedList implementations keep the
* equivalent of this class private. We make it public so that references
* to each node in the list can be maintained externally.
* <p/>
* <p>
* Exposing this class lets us make remove operations very fast. Remove is
* built into this class and only requires two reference reassignments. If
* remove existed in the main LinkedList class, a linear scan would have to
* be performed to find the correct node to delete.
* <p/>
* be performed to find the correct node to delete.</p>
* <p>
* The linked list implementation was specifically written for the Jive
* cache system. While it can be used as a general purpose linked list, for
* most applications, it is more suitable to use the linked list that is part
* of the Java Collections package.
* of the Java Collections package.</p>
*
* @author Jive Software
* @see org.jivesoftware.util.LinkedList
......@@ -48,12 +48,12 @@ public class LinkedListNode<E> {
* This class is further customized for the CoolServlets cache system. It
* maintains a timestamp of when a Cacheable object was first added to
* cache. Timestamps are stored as long values and represent the number
* of milleseconds passed since January 1, 1970 00:00:00.000 GMT.<p>
* <p/>
* of milleseconds passed since January 1, 1970 00:00:00.000 GMT.
* <p>
* The creation timestamp is used in the case that the cache has a
* maximum lifetime set. In that case, when
* [current time] - [creation time] > [max lifetime], the object will be
* deleted from cache.
* [current time] - [creation time] &gt; [max lifetime], the object will be
* deleted from cache.</p>
*/
public long timestamp;
......
......@@ -256,13 +256,13 @@ public class LocaleUtils {
/**
* Returns a list of all available time zone's as a String [][]. The first
* entry in each list item is the timeZoneID, and the second is the
* display name.<p>
* <p/>
* display name.
* <p>
* The list of time zones attempts to be inclusive of all of the worlds
* zones while being as concise as possible. For "en" language locales
* the name is a friendly english name. For non-"en" language locales
* the standard JDK name is used for the given Locale. The GMT+/- time
* is also included for readability.
* is also included for readability.</p>
*
* @return a list of time zones, as a tuple of the zime zone ID, and its
* display name.
......
......@@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
* and optional parameters, as follows:<p>
*
* <table border="1">
* <caption></caption>
* <tr><th>Event Type</th><th>Extra Params</th></tr>
* <tr><td>{@link EventType#property_set property_set}</td><td>A param named <tt>value</tt> that
* has the value of the property set.</td></tr>
......
......@@ -41,7 +41,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Utility class to peform common String manipulation algorithms.
* Utility class to perform common String manipulation algorithms.
*/
public class StringUtils {
......@@ -255,7 +255,7 @@ public class StringUtils {
/**
* This method takes a string which may contain HTML tags (ie, &lt;b&gt;,
* &lt;table&gt;, etc) and converts the '&lt'' and '&gt;' characters to
* &lt;table&gt;, etc) and converts the '&lt;' and '&gt;' characters to
* their HTML escape sequences. It will also replace LF with &lt;br&gt;.
*
* @param in the text to be converted.
......@@ -268,7 +268,7 @@ public class StringUtils {
/**
* This method takes a string which may contain HTML tags (ie, &lt;b&gt;,
* &lt;table&gt;, etc) and converts the '&lt'' and '&gt;' characters to
* &lt;table&gt;, etc) and converts the '&lt;' and '&gt;' characters to
* their HTML escape sequences.
*
* @param in the text to be converted.
......@@ -333,20 +333,20 @@ public class StringUtils {
* excessive MessageDigest object creation. If calling this method becomes
* a bottleneck in your code, you may wish to maintain a pool of
* MessageDigest objects instead of using this method.
* <p/>
* <p>
* A hash is a one-way function -- that is, given an
* input, an output is easily computed. However, given the output, the
* input is almost impossible to compute. This is useful for passwords
* since we can store the hash and a hacker will then have a very hard time
* determining the original password.
* <p/>
* determining the original password.</p>
* <p>
* In Jive, every time a user logs in, we simply
* take their plain text password, compute the hash, and compare the
* generated hash to the stored hash. Since it is almost impossible that
* two passwords will generate the same hash, we know if the user gave us
* the correct password or not. The only negative to this system is that
* password recovery is basically impossible. Therefore, a reset password
* method is used instead.
* method is used instead.</p>
*
* @param data the String to compute the hash of.
* @return a hashed version of the passed-in String
......@@ -361,20 +361,20 @@ public class StringUtils {
* excessive MessageDigest object creation. If calling this method becomes
* a bottleneck in your code, you may wish to maintain a pool of
* MessageDigest objects instead of using this method.
* <p/>
* <p>
* A hash is a one-way function -- that is, given an
* input, an output is easily computed. However, given the output, the
* input is almost impossible to compute. This is useful for passwords
* since we can store the hash and a hacker will then have a very hard time
* determining the original password.
* <p/>
* determining the original password.</p>
* <p>
* In Jive, every time a user logs in, we simply
* take their plain text password, compute the hash, and compare the
* generated hash to the stored hash. Since it is almost impossible that
* two passwords will generate the same hash, we know if the user gave us
* the correct password or not. The only negative to this system is that
* password recovery is basically impossible. Therefore, a reset password
* method is used instead.
* method is used instead.</p>
*
* @param data the String to compute the hash of.
* @param algorithm the name of the algorithm requested.
......@@ -396,20 +396,20 @@ public class StringUtils {
* excessive MessageDigest object creation. If calling this method becomes
* a bottleneck in your code, you may wish to maintain a pool of
* MessageDigest objects instead of using this method.
* <p/>
* <p>
* A hash is a one-way function -- that is, given an
* input, an output is easily computed. However, given the output, the
* input is almost impossible to compute. This is useful for passwords
* since we can store the hash and a hacker will then have a very hard time
* determining the original password.
* <p/>
* In Jive, every time a user logs in, we simply
* </p>
* <p>In Jive, every time a user logs in, we simply
* take their plain text password, compute the hash, and compare the
* generated hash to the stored hash. Since it is almost impossible that
* two passwords will generate the same hash, we know if the user gave us
* the correct password or not. The only negative to this system is that
* password recovery is basically impossible. Therefore, a reset password
* method is used instead.
* method is used instead.</p>
*
* @param bytes the byte array to compute the hash of.
* @param algorithm the name of the algorithm requested.
......@@ -438,10 +438,10 @@ public class StringUtils {
/**
* Turns an array of bytes into a String representing each byte as an
* unsigned hex number.
* <p/>
* <p>
* Method by Santeri Paavolainen, Helsinki Finland 1996<br>
* (c) Santeri Paavolainen, Helsinki Finland 1996<br>
* Distributed under LGPL.
* Distributed under LGPL.</p>
*
* @param bytes an array of bytes to convert to a hex-string
* @return generated hex string
......@@ -627,10 +627,10 @@ public class StringUtils {
* of the specified length. The method uses the Random class that is
* built-in to Java which is suitable for low to medium grade security uses.
* This means that the output is only pseudo random, i.e., each number is
* mathematically generated so is not truly random.<p>
* <p/>
* mathematically generated so is not truly random.
* <p>
* The specified length must be at least one. If not, the method will return
* null.
* null.</p>
*
* @param length the desired length of the random String to return.
* @return a random String of numbers and letters of the specified length.
......@@ -653,10 +653,10 @@ public class StringUtils {
* newline character before <code>length</code>, the String will be chopped
* there. If no newline or whitespace is found in <code>string</code> up to
* the index <code>length</code>, the String will chopped at <code>length</code>.
* <p/>
* <p>
* For example, chopAtWord("This is a nice String", 10) will return
* "This is a" which is the first word boundary less than or equal to 10
* characters into the original String.
* characters into the original String.</p>
*
* @param string the String to chop.
* @param length the index in <code>string</code> to start looking for a
......@@ -715,9 +715,9 @@ public class StringUtils {
* are split apart at the earliest wordbreak or at maxLength, whichever is
* sooner. If the width specified is less than 5 or greater than the input
* Strings length the string will be returned as is.
* <p/>
* <p>
* Please note that this method can be lossy - trailing spaces on wrapped
* lines may be trimmed.
* lines may be trimmed.</p>
*
* @param input the String to reformat.
* @param width the maximum length of any one line.
......
......@@ -65,7 +65,6 @@ import org.slf4j.LoggerFactory;
* &lt;/Y&gt;
* &lt;/X&gt;
* </pre>
* <p/>
* The XML file is passed in to the constructor and must be readable and
* writable. Setting property values will automatically persist those value
* to disk. The file encoding used is UTF-8.
......
......@@ -175,7 +175,7 @@ public class XMLWriter extends XMLFilterImpl implements LexicalHandler {
* Sets the maximum allowed character code that should be allowed
* unescaped
* such as 127 in US-ASCII (7 bit) or 255 in ISO-* (8 bit)
* or -1 to not escape any characters (other than the special XML characters like < > &)
* or -1 to not escape any characters (other than the special XML characters like &lt; &gt; &amp;)
*
* If this is not explicitly set then it is defaulted from the encoding.
*
......
......@@ -34,7 +34,7 @@ import java.util.regex.Pattern;
* Utility class for date/time format conversions as specified in
* <a href="http://www.xmpp.org/extensions/xep-0082.html">XEP-0082</a> and
* <a href="http://www.xmpp.org/extensions/xep-0090.html">XEP-0090</a> and
* For Date -> String converstion FastDateFormat is used
* For Date -&gt; String converstion FastDateFormat is used
*
*/
//@ThreadSafe
......@@ -94,7 +94,7 @@ public class XMPPDateTimeFormat {
* This method either returns a Date instance as result or it will return null or throw a ParseException
* in case the String couldn't be parsed.
*
* @param dateStr the String that should be parsed
* @param dateString the String that should be parsed
* @return the parsed date or null if the String could not be parsed
* @throws ParseException
*/
......
......@@ -45,11 +45,11 @@ import org.slf4j.LoggerFactory;
/**
* Creates Cache objects. The returned caches will either be local or clustered
* depending on the clustering enabled setting and a user's license.<p>
* <p/>
* When clustered caching is turned on, cache usage statistics for all caches
* depending on the clustering enabled setting and a user's license.
*
* <p>When clustered caching is turned on, cache usage statistics for all caches
* that have been created are periodically published to the clustered cache
* named "opt-$cacheStats".
* named "opt-$cacheStats".</p>
*
*/
@SuppressWarnings("rawtypes")
......
......@@ -24,7 +24,7 @@ package org.jivesoftware.util.cache;
* This specialized wrapper is used for the Components cache, which
* should not be purged.
*
* See {@link http://issues.igniterealtime.org/browse/OF-114} for more info.
* See <a href="http://issues.igniterealtime.org/browse/OF-114">OF-114</a> for more info.
*
*/
public class ComponentCacheWrapper<K, V> extends CacheWrapper<K, V> {
......
......@@ -226,7 +226,7 @@ public class ExternalizableUtil {
/**
* Writes a collection of Externalizable objects. The collection passed as a parameter
* must be a collection and not a <tt>null</null> value.
* must be a collection and not a <tt>null</tt> value.
*
* @param out the output stream.
* @param value the collection of Externalizable objects. This value must not be null.
......@@ -238,7 +238,7 @@ public class ExternalizableUtil {
/**
* Writes a collection of Serializable objects. The collection passed as a parameter
* must be a collection and not a <tt>null</null> value.
* must be a collection and not a <tt>null</tt> value.
*
* @param out the output stream.
* @param value the collection of Serializable objects. This value must not be null.
......@@ -250,7 +250,7 @@ public class ExternalizableUtil {
/**
* Reads a collection of Externalizable objects and adds them to the collection passed as a parameter. The
* collection passed as a parameter must be a collection and not a <tt>null</null> value.
* collection passed as a parameter must be a collection and not a <tt>null</tt> value.
*
* @param in the input stream.
* @param value the collection of Externalizable objects. This value must not be null.
......@@ -277,7 +277,7 @@ public class ExternalizableUtil {
/**
* Reads a collection of Serializable objects and adds them to the collection passed as a parameter. The
* collection passed as a parameter must be a collection and not a <tt>null</null> value.
* collection passed as a parameter must be a collection and not a <tt>null</tt> value.
*
* @param in the input stream.
* @param value the collection of Serializable objects. This value must not be null.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment