Class AbstractWebConsolePlugin
- java.lang.Object
-
- javax.servlet.GenericServlet
-
- javax.servlet.http.HttpServlet
-
- org.apache.felix.webconsole.AbstractWebConsolePlugin
-
- All Implemented Interfaces:
Serializable
,javax.servlet.Servlet
,javax.servlet.ServletConfig
- Direct Known Subclasses:
SimpleWebConsolePlugin
public abstract class AbstractWebConsolePlugin extends javax.servlet.http.HttpServlet
The Web Console can be extended by registering an OSGi service for the interfaceServlet
with the service propertyfelix.webconsole.label
set to the label (last segment in the URL) of the page. The respective service is called a Web Console Plugin or a plugin for short. To help rendering the response the Apache Felix Web Console bundle provides two options. One of the options is to extend the AbstractWebConsolePlugin overwriting therenderContent(HttpServletRequest, HttpServletResponse)
method.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static String
ATTR_FILEUPLOAD
The name of the request attribute containing the map of FileItems from the POST requeststatic String
ATTR_FILEUPLOAD_REPO
The name of the request attribute containing aFile
- upload repository path used byDiskFileItemFactory
.static String
GET_RESOURCE_METHOD_NAME
Web Console Plugin typically consists of servlet and resources such as images, scripts or style sheets.
-
Constructor Summary
Constructors Constructor Description AbstractWebConsolePlugin()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
activate(org.osgi.framework.BundleContext bundleContext)
This method is called from the Felix Web Console to ensure the AbstractWebConsolePlugin is correctly setup.void
deactivate()
This method is called, by the Web Console to de-activate the plugin and release all used resources.protected void
doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
Renders the web console page for the request.protected void
endResponse(PrintWriter pw)
This method is responsible for generating the footer of the page.static BrandingPlugin
getBrandingPlugin()
Returns theBrandingPlugin
currently used for web console branding.org.osgi.framework.Bundle
getBundle()
Returns theBundle
pertaining to thebundle context
with which this plugin has been activated.protected org.osgi.framework.BundleContext
getBundleContext()
Returns theBundleContext
with which this plugin has been activated.String
getCategory()
This method should return category string which will be used to render the plugin in the navigation menu.protected String[]
getCssReferences()
Returns a list of CSS reference paths ornull
if no additional CSS files are provided by the plugin.abstract String
getLabel()
Retrieves the label.static String
getParameter(javax.servlet.http.HttpServletRequest request, String name)
Deprecated.protected Object
getResourceProvider()
Returns the object which might provide resources.String
getServletName()
Returns the title for this plugin as returned bygetTitle()
abstract String
getTitle()
Retrieves the title of the plug-in.protected boolean
isHtmlRequest(javax.servlet.http.HttpServletRequest request)
Detects whether this request is intended to have the headers and footers of this plugin be rendered or not.void
log(int level, String message)
Calls theServletContext.log(String)
method if the configured log level is less than or equal to the givenlevel
.void
log(int level, String message, Throwable t)
Calls theServletContext.log(String, Throwable)
method if the configured log level is less than or equal to the givenlevel
.protected String
readTemplateFile(String templateFile)
Reads thetemplateFile
as a resource through the class loader of this class converting the binary data into a string using UTF-8 encoding.protected abstract void
renderContent(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res)
This method is used to render the content of the plug-in.protected void
renderMenu(Map menuMap, String appRoot, PrintWriter pw)
protected void
renderTopNavigation(javax.servlet.http.HttpServletRequest request, PrintWriter pw)
This method is called to generate the top level links with the available plug-ins.protected void
sendRedirect(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, String redirectUrl)
static void
setBrandingPlugin(BrandingPlugin brandingPlugin)
Sets theBrandingPlugin
to use globally by all extensions of this class for branding.static void
setLogLevel(int logLevel)
Sets the log level to be applied for calls to thelog(int, String)
andlog(int, String, Throwable)
methods.protected PrintWriter
startResponse(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
This method is responsible for generating the top heading of the page.-
Methods inherited from class javax.servlet.http.HttpServlet
doDelete, doHead, doOptions, doPost, doPut, doTrace, getLastModified, service, service
-
-
-
-
Field Detail
-
ATTR_FILEUPLOAD
public static final String ATTR_FILEUPLOAD
The name of the request attribute containing the map of FileItems from the POST request- See Also:
- Constant Field Values
-
ATTR_FILEUPLOAD_REPO
public static final String ATTR_FILEUPLOAD_REPO
The name of the request attribute containing aFile
- upload repository path used byDiskFileItemFactory
.The Web Console plugin, that utilizes file upload capabilities of the web console SHOULD:
- Obtain the file using
BundleContext.getDataFile(String)
- Set the file as request attribute
- Use
WebConsoleUtil.getParameter(HttpServletRequest, String)
to obtain the file(s)
- See Also:
- Constant Field Values
- Obtain the file using
-
GET_RESOURCE_METHOD_NAME
public static final String GET_RESOURCE_METHOD_NAME
Web Console Plugin typically consists of servlet and resources such as images, scripts or style sheets. To load resources, a Resource Provider is used. The resource provider is an object, that provides a method which name is specified by this constants and it is 'getResource'.- See Also:
getResourceProvider()
, Constant Field Values
-
-
Method Detail
-
getServletName
public String getServletName()
Returns the title for this plugin as returned bygetTitle()
- Specified by:
getServletName
in interfacejavax.servlet.ServletConfig
- Overrides:
getServletName
in classjavax.servlet.GenericServlet
- See Also:
GenericServlet.getServletName()
-
getCategory
public String getCategory()
This method should return category string which will be used to render the plugin in the navigation menu. Default implementation returns null, which will result in the plugin link rendered as top level menu item. Concrete implementations wishing to be rendered as a sub-menu item under a category should override this method and return a string or definefelix.webconsole.category
OSGi property. Currently only single level categories are supported. So, this should be a simple String.- Returns:
- category
-
doGet
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException
Renders the web console page for the request. This consist of the following five parts called in order:- Send back a requested resource
startResponse(HttpServletRequest, HttpServletResponse)
renderTopNavigation(HttpServletRequest, PrintWriter)
renderContent(HttpServletRequest, HttpServletResponse)
endResponse(PrintWriter)
Note: If a resource is sent back for the request only the first step is executed. Otherwise the first step is a null-operation actually and the latter four steps are executed in order.
If the
isHtmlRequest(HttpServletRequest)
method returnsfalse
only therenderContent(HttpServletRequest, HttpServletResponse)
method is called.- Overrides:
doGet
in classjavax.servlet.http.HttpServlet
- Throws:
javax.servlet.ServletException
IOException
- See Also:
HttpServlet.doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
-
isHtmlRequest
protected boolean isHtmlRequest(javax.servlet.http.HttpServletRequest request)
Detects whether this request is intended to have the headers and footers of this plugin be rendered or not. This method always returnstrue
and may be overwritten by plugins to detect from the actual request, whether or not to render the header and footer.- Parameters:
request
- the original request passed from the HTTP server- Returns:
true
if the page should have headers and footers rendered
-
activate
public void activate(org.osgi.framework.BundleContext bundleContext)
This method is called from the Felix Web Console to ensure the AbstractWebConsolePlugin is correctly setup. It is called right after the Web Console receives notification for plugin registration.- Parameters:
bundleContext
- the context of the plugin bundle
-
deactivate
public void deactivate()
This method is called, by the Web Console to de-activate the plugin and release all used resources.
-
renderContent
protected abstract void renderContent(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res) throws javax.servlet.ServletException, IOException
This method is used to render the content of the plug-in. It is called internally from the Web Console.- Parameters:
req
- the HTTP request send from the userres
- the HTTP response object, where to render the plugin data.- Throws:
IOException
- if an input or output error is detected when the servlet handles the requestjavax.servlet.ServletException
- if the request for the GET could not be handled
-
getLabel
public abstract String getLabel()
Retrieves the label. This is the last component in the servlet path. This method MUST be overridden, if theAbstractWebConsolePlugin()
constructor is used.- Returns:
- the label.
-
getTitle
public abstract String getTitle()
Retrieves the title of the plug-in. It is displayed in the page header and is also included in the title of the HTML document. This method MUST be overridden, if theAbstractWebConsolePlugin()
constructor is used.- Returns:
- the plugin title.
-
getCssReferences
protected String[] getCssReferences()
Returns a list of CSS reference paths ornull
if no additional CSS files are provided by the plugin.The result is an array of strings which are used as the value of the
href
attribute of the<link>
elements placed in the head section of the HTML generated. If the reference is a relative path, it is turned into an absolute path by prepending the value of theWebConsoleConstants.ATTR_APP_ROOT
request attribute.- Returns:
- The list of additional CSS files to reference in the head
section or
null
if no such CSS files are required.
-
getBundleContext
protected org.osgi.framework.BundleContext getBundleContext()
Returns theBundleContext
with which this plugin has been activated. If the plugin has not be activated by calling theactivate(BundleContext)
method, this method returnsnull
.- Returns:
- the bundle context or
null
if the bundle is not activated.
-
getBundle
public final org.osgi.framework.Bundle getBundle()
Returns theBundle
pertaining to thebundle context
with which this plugin has been activated. If the plugin has not be activated by calling theactivate(BundleContext)
method, this method returnsnull
.- Returns:
- the bundle or
null
if the plugin is not activated.
-
getResourceProvider
protected Object getResourceProvider()
Returns the object which might provide resources. The class of this object is used to find thegetResource
method.This method may be overwritten by extensions. This base class implementation returns this instance.
- Returns:
- The resource provider object or
null
if no resources will be provided by this plugin.
-
log
public void log(int level, String message)
Calls theServletContext.log(String)
method if the configured log level is less than or equal to the givenlevel
.Note, that the
level
paramter is only used to decide whether theGenericServlet.log(String)
method is called or not. The actual implementation of theGenericServlet.log
method is outside of the control of this method.If the servlet has not been initialized yet or has already been destroyed the message is printed to stderr.
- Parameters:
level
- The log level at which to log the messagemessage
- The message to log
-
log
public void log(int level, String message, Throwable t)
Calls theServletContext.log(String, Throwable)
method if the configured log level is less than or equal to the givenlevel
.Note, that the
level
paramter is only used to decide whether theGenericServlet.log(String, Throwable)
method is called or not. The actual implementation of theGenericServlet.log
method is outside of the control of this method.- Parameters:
level
- The log level at which to log the messagemessage
- The message to logt
- TheThrowable
to log with the message
-
startResponse
protected PrintWriter startResponse(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws IOException
This method is responsible for generating the top heading of the page.- Parameters:
request
- the HTTP request coming from the userresponse
- the HTTP response, where data is rendered- Returns:
- the writer that was used for generating the response.
- Throws:
IOException
- on I/O error- See Also:
endResponse(PrintWriter)
-
renderTopNavigation
protected void renderTopNavigation(javax.servlet.http.HttpServletRequest request, PrintWriter pw)
This method is called to generate the top level links with the available plug-ins.- Parameters:
request
- the HTTP request coming from the userpw
- the writer, where the HTML data is rendered
-
renderMenu
protected void renderMenu(Map menuMap, String appRoot, PrintWriter pw)
-
endResponse
protected void endResponse(PrintWriter pw)
This method is responsible for generating the footer of the page.- Parameters:
pw
- the writer, where the HTML data is rendered- See Also:
startResponse(HttpServletRequest, HttpServletResponse)
-
getParameter
public static final String getParameter(javax.servlet.http.HttpServletRequest request, String name)
Deprecated.An utility method, that is used to filter out simple parameter from file parameter when multipart transfer encoding is used. This method processes the request and sets a request attributeATTR_FILEUPLOAD
. The attribute value is aMap
where the key is a String specifying the field name and the value is aFileItem
.- Parameters:
request
- the HTTP request coming from the username
- the name of the parameter- Returns:
- if not multipart transfer encoding is used - the value is the
parameter value or
null
if not set. If multipart is used, and the specified parameter is field - then the value of the parameter is returned.
-
sendRedirect
protected void sendRedirect(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, String redirectUrl) throws IOException
Utility method to handle relative redirects. Some application servers like Web Sphere handle relative redirects differently therefore we should make an absolute URL before invoking send redirect.- Parameters:
request
- the HTTP request coming from the userresponse
- the HTTP response, where data is renderedredirectUrl
- the redirect URI.- Throws:
IOException
- If an input or output exception occursIllegalStateException
- If the response was committed or if a partial URL is given and cannot be converted into a valid URL
-
getBrandingPlugin
public static BrandingPlugin getBrandingPlugin()
Returns theBrandingPlugin
currently used for web console branding.- Returns:
- the brandingPlugin
-
setBrandingPlugin
public static final void setBrandingPlugin(BrandingPlugin brandingPlugin)
Sets theBrandingPlugin
to use globally by all extensions of this class for branding.Note: This method is intended to be used internally by the Web Console to update the branding plugin to use.
- Parameters:
brandingPlugin
- the brandingPlugin to set
-
setLogLevel
public static final void setLogLevel(int logLevel)
Sets the log level to be applied for calls to thelog(int, String)
andlog(int, String, Throwable)
methods.Note: This method is intended to be used internally by the Web Console to update the log level according to the Web Console configuration.
- Parameters:
logLevel
- the maximum allowed log level. If message is logged with lower level it will not be forwarded to the logger.
-
readTemplateFile
protected final String readTemplateFile(String templateFile)
Reads thetemplateFile
as a resource through the class loader of this class converting the binary data into a string using UTF-8 encoding.If the template file cannot read into a string and an exception is caused, the exception is logged and an empty string returned.
- Parameters:
templateFile
- The absolute path to the template file to read.- Returns:
- The contents of the template file as a string or and empty string if the template file fails to be read.
- Throws:
NullPointerException
- iftemplateFile
isnull
RuntimeException
- if anIOException
is thrown reading the template file into a string. The exception provides the exception thrown as its cause.
-
-