Adding a Node to the Navigation Tree
You can add a node to the navigation tree, either at the top level or
under another node. To add a node, use an integration point of type
org.glassfish.admingui:navNode. Use the parentId attribute to
specify where the new node should be placed. Any tree node, including
those added by other add-on components, can be specified. Examples
include the following:
tree
-
At the top level
applicationServer
-
Under the GlassFish Server node
applications
-
Under the Applications node
resources
-
Under the Resources node
configuration
-
Under the Configuration node
webContainer
-
Under the Web Container node
httpService
-
Under the HTTP Service node
The webContainer and httpService nodes are available only if you
installed the web container module for the Administration Console (the
console-web-gui.jar OSGi bundle).
|
If you do not specify a parentId, the new content is added to the root
of the integration point, in this case the top level node, tree.
Example 3-2 Example Tree Node Integration Point
For example, the following integration-point element uses a parentId
of tree to place the new node at the top level.
<integration-point
id="samplenode"
parentid="tree"
type="org.glassfish.admingui:treeNode"
priority="200"
content="sampleNode.jsf"
/>
This example specifies the following values in addition to the
parentId:
-
The id value, sampleNode, specifies the integration point ID.
-
The type value, org.glassfish.admingui:treeNode, specifies the
integration point type as a tree node.
-
The priority value, 200, specifies the order of the node on the
tree.
-
The content value, sampleNode.jsf, specifies the JavaServer Faces
page that displays the node.
The example console-config.xml file provides other examples of tree
nodes under the Resources and Configuration nodes.
Creating a Jakarta Server Faces Page for Your Node
A Jakarta Server Faces page for a tree node uses the tag `sun:treeNode`.
This tag provides all the capabilities of the Project Woodstock tag
`webuijsf:treeNode`.
[[GSACG00021]][[ghpmn]]
Example 3-3 Example Jakarta Server Faces Page for a Tree Node
In the example, the `sampleNode.jsf` file has the following content:
[source,oac_no_warn]
----
----
This file uses the `sun:treenode` tag to specify both a top-level tree
node and another node nested beneath it. In your own JavaServer Faces
pages, specify the attributes of this tag as follows:
`id`::
A unique identifier for the tree node.
`text`::
The node name that appears in the tree.
`url`::
The location of the JavaServer Faces page that appears when you click
the node. In the example, most of the integration points use a very
simple Jakarta Server Faces page called `testPage.jsf`, which is in the
`src/main/resources/page/` directory. Specify the integration point
`id` value as the root of the URL; in this case, it is `sample` (see
link:#ghmpg[Specifying the ID of an Add-On Component]). The rest of
the URL is relative to the `src/main/resources/` directory, where
`sampleNode.jsf` resides. +
The `url` tag in this example passes a `name` parameter to the
Jakarta Server Faces page.
`imageURL`::
The location of a graphic to display next to the node name. In the
example, the graphic is always `sample.png`, which is in the
`src/main/resources/images/` directory. The URL for this image is an
absolute path, `/resource/`sample`/images/sample.png`, where sample in
the path is the integration point `id` value (see
link:#ghmpg[Specifying the ID of an Add-On Component]).
[[ghotv]][[GSACG00189]][[adding-tabs-to-a-page]]
Adding Tabs to a Page
^^^^^^^^^^^^^^^^^^^^^
You can add a tab to an existing tab set, or you can create a tab set
for your own page. One way to add a tab or tab set is to use an
integration point of type `org.glassfish.admingui:serverInstTab`, which
adds a tab to the tab set on the main GlassFish Server page of the
Administration Console. You can also create sub-tabs. Once again, the
`parentId` element specifies where to place the tab or tab set.
[[GSACG00022]][[ghplc]]
Example 3-4 Example Tab Integration Point
In the example, the following `integration-point` element adds a new tab
on the main GlassFish Server page of the Administration Console:
[source,oac_no_warn]
----
----
This example specifies the following values:
* The `id` value, `sampleTab`, specifies the integration point ID.
* The `parentId` value, `serverInstTabs`, specifies the tab set
associated with the server instance. The GlassFish Server page is the
only one of the default Administration Console pages that has a tab set.
* The `type` value, `org.glassfish.admingui:serverInstTab`, specifies
the integration point type as a tab associated with the server instance.
* The `priority` value, `500`, specifies the order of the tab within the
tab set. This value is optional.
* The `content` value, `sampleTab.jsf`, specifies the Jakarta Server Faces
page that displays the tab.
[[GSACG00023]][[ghplu]]
Example 3-5 Example Tab Set Integration Points
The following `integration-point` elements add a new tab with two
sub-tabs, also on the main GlassFish Server page of the Administration
Console:
[source,oac_no_warn]
----
----
These examples specify the following values:
* The `id` values, `sampleTabWithSubTab`, `sampleSubTab1`, and
`sampleSubTab2`, specify the integration point IDs for the tab and its
sub-tabs.
* The `parentId` of the new tab, `serverInstTabs`, specifies the tab set
associated with the server instance. The `parentId` of the two sub-tabs,
`sampleTabWithSubTab`, is the `id` value of this new tab.
* The `type` value, `org.glassfish.admingui:serverInstTab`, specifies
the integration point type for all the tabs as a tab associated with the
server instance.
* The `priority` values specify the order of the tabs within the tab
set. This value is optional. In this case, the priority value for
`sampleTabWithSubTab` is `300`, which is higher than the value for
`sampleTab`. That means that `sampleTabWithSubTab` appears to the left
of `sampleTab` in the Administration Console. The priority values for
`sampleSubTab1` and `sampleSubTab2` are `300` and `400` respectively, so
`sampleSubTab1` appears to the left of `sampleSubTab2`.
* The `content` values, `sampleTabWithSubTab.jsf`, `sampleSubTab1.jsf`,
and `sampleSubTab2.jsf`, specify the Jakarta Server Faces pages that display
the tabs.
[[ghovg]][[GSACG00159]][[creating-javaserver-faces-pages-for-your-tabs]]
Creating Jakarta Server Faces Pages for Your Tabs
+++++++++++++++++++++++++++++++++++++++++++++
A Jakarta Server Faces page for a tab uses the tag `sun:tab`. This tag
provides all the capabilities of the Project Woodstock tag
`webuijsf:tab`.
[[GSACG00024]][[ghpnt]]
Example 3-6 Example Jakarta Server Faces Page for a Tab
In the example, the `sampleTab.jsf` file has the following content:
[source,oac_no_warn]
----
----
[width="100%",cols="<100%",]
|======================================================================
a|
Note:
In the actual file there are no line breaks in the `gf.redirect` value.
|======================================================================
In your own Jakarta Server Faces pages, specify the attributes of this tag
as follows:
`id`::
A unique identifier for the tab, in this case `sampleTab`.
`immediate`::
If set to true, event handling for this component should be handled
immediately (in the Apply Request Values phase) rather than waiting
until the Invoke Application phase.
`text`::
The tab name that appears in the tab set.
The JSF page displays tab content differently from the way the page for
a node displays node content. It invokes two handlers for the `command`
event: `setSessionAttribute` and `gf.redirect`. The `gf.redirect`
handler has the same effect for a tab that the `url` attribute has for a
node. It navigates to a simple Jakarta Server Faces page called
`tabPage.jsf`, in the `src/main/resources/page/` directory, passing the
text "Sample First Tab" to the page in a `name` parameter.
The `sampleSubTab1.jsf` and `sampleSubTab2.jsf` files are almost
identical to `sampleTab.jsf`. The most important difference is that each
sets the session attribute `serverInstTabs` to the base name of the
Jakarta Server Faces file that corresponds to that tab:
[source,oac_no_warn]
----
setSessionAttribute(key="serverInstTabs" value="sampleTab");
setSessionAttribute(key="serverInstTabs" value="sampleSubTab1");
setSessionAttribute(key="serverInstTabs" value="sampleSubTab2");
----
[[ghmqw]][[GSACG00190]][[adding-a-task-to-the-common-tasks-page]]
Adding a Task to the Common Tasks Page
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You can add either a single task or a group of tasks to the Common Tasks
page of the Administration Console. To add a task or task group, use an
integration point of type `org.glassfish.admingui:commonTask`.
See link:#ghozn[Adding a Task Group to the Common Tasks Page] for
information on adding a task group.
[[GSACG00025]][[ghpox]]
Example 3-7 Example Task Integration Point
In the example `console-config.xml` file, the following
`integration-point` element adds a task to the Deployment task group:
[source,oac_no_warn]
----
----
This example specifies the following values:
* The `id` value, `sampleCommonTask`, specifies the integration point
ID.
* The `parentId` value, `deployment`, specifies that the task is to be
placed in the Deployment task group.
* The `type` value, `org.glassfish.admingui:commonTask`, specifies the
integration point type as a common task.
* The `priority` value, `200`, specifies the order of the task within
the task group.
* The `content` value, `sampleCommonTask.jsf`, specifies the JavaServer
Faces page that displays the task.
[[ghoeu]][[GSACG00160]][[creating-a-javaserver-faces-page-for-your-task]]
Creating a Jakarta Server Faces Page for Your Task
A Jakarta Server Faces page for a task uses the tag sun:commonTask. This
tag provides all the capabilities of the Project Woodstock tag
webuijsf:commonTask.
Example 3-8 Example Jakarta Server Faces Page for a Task
In the example, the sampleCommonTask.jsf file has the following
content:
<sun:commonTask
text="Sample Application Page"
toolTip="Sample Application Page"
onClick="return admingui.woodstock.commonTaskHandler('treeForm:tree:applications:ejb',
'#{request.contextPath}/sample/page/testPage.jsf?name=Sample%20Application%20Page');">
</sun:commonTask>
In the actual file, there is no line break in the onClick attribute
value.
|
This file uses the sun:commonTask tag to specify the task. In your own
Jakarta Server Faces pages, specify the attributes of this tag as follows:
text
-
The task name that appears on the Common Tasks page.
toolTip
-
The text that appears when a user places the mouse cursor over the
task name.
onClick
-
Scripting code that is to be executed when a user clicks the task
name.
Adding a Task Group to the Common Tasks Page
You can add a new group of tasks to the Common Tasks page to display the
most important tasks for your add-on component. To add a task group, use
an integration point of type org.glassfish.admingui:commonTask.
Example 3-9 Example Task Group Integration Point
In the example console-config.xml file, the following
integration-point element adds a new task group to the Common Tasks
page:
<integration-point
id="samplegroup"
parentid="commontaskssection"
type="org.glassfish.admingui:commonTask"
priority="500"
content="sampleTaskGroup.jsf"
/>
This example specifies the following values:
-
The id value, sampleGroup, specifies the integration point ID.
-
The parentId value, commonTasksSection, specifies that the task
group is to be placed on the Common Tasks page.
-
The type value, org.glassfish.admingui:commonTask, specifies the
integration point type as a common task.
-
The priority value, 500, specifies the order of the task group on
the Common Tasks page. The low value places it at the end of the page.
-
The content value, sampleTaskGroup.jsf, specifies the JavaServer
Faces page that displays the task.
Creating a Jakarta Server Faces Page for Your Task Group
A Jakarta Server Faces page for a task group uses the tag
`sun:commonTasksGroup`. This tag provides all the capabilities of the
Project Woodstock tag `webuijsf:commonTasksGroup`.
[[GSACG00028]][[ghpqe]]
Example 3-10 Example Jakarta Server Faces Page for a Task Group
In the example, the `sampleTaskGroup.jsf` file has the following
content:
[source,oac_no_warn]
----
----
[width="100%",cols="<100%",]
|=======================================================================
a|
Note:
In the actual file, there are no line breaks in the `onClick` attribute
values.
|=======================================================================
This file uses the `sun:commonTasksGroup` tag to specify the task group,
and two `sun:commonTask` tags to specify the tasks in the task group.
The `sun:commonTasksGroup` tag has only one attribute, `title`, which
specifies the name of the task group.
[[ghmrg]][[GSACG00192]][[adding-content-to-a-page]]
Adding Content to a Page
^^^^^^^^^^^^^^^^^^^^^^^^
You can add content for your add-on component to an existing top-level
page, such as the Configuration page or the Resources page. To add
content to one of these pages, use an integration point of type
`org.glassfish.admingui:configuration` or
`org.glassfish.admingui:resources`.
[[GSACG00029]][[ghpnu]]
Example 3-11 Example Resources Page Implementation Point
In the example `console-config.xml` file, the following
`integration-point` element adds new content to the top-level Resources
page:
[source,oac_no_warn]
----
----
This example specifies the following values:
* The `id` value, `sampleResourceLink`, specifies the integration point
ID.
* The `parentId` value, `propSheetSection`, specifies that the content
is to be a section of a property sheet on the page.
* The `type` value, `org.glassfish.admingui:resources`, specifies the
integration point type as the Resources page. +
To add content to the Configuration page, specify the `type` value as
`org.glassfish.admingui:configuration`.
* The `priority` value, `100`, specifies the order of the content on the
Resources page. The high value places it at the top of the page.
* The `content` value, `sampleResourceLink.jsf`, specifies the
JavaServer Faces page that displays the new content on the Resources
page.
Another `integration-point` element in the `console-config.xml` file
places similar content on the Configuration page.
[[ghpao]][[GSACG00162]][[creating-a-javaserver-faces-page-for-your-page-content]]
Creating a Jakarta Server Faces Page for Your Page Content
++++++++++++++++++++++++++++++++++++++++++++++++++++++
A Jakarta Server Faces page for page content often uses the tag
`sun:property` to specify a property on a property sheet. This tag
provides all the capabilities of the Project Woodstock tag
`webuijsf:property`.
[[GSACG00030]][[ghpoz]]
Example 3-12 Example Jakarta Server Faces Page for a Resource Page Item
In the example, the `sampleResourceLink.jsf` file has the following
content:
[source,oac_no_warn]
----
----
The file specifies two simple properties on the property sheet, one
above the other. Each consists of a `sun:hyperlink` element (a link to a
URL). Within each `sun:hyperlink` element is nested a `sun:image`
element, specifying an image, and a `sun:staticText` element, specifying
the text to be placed next to the image.
Each `sun:hyperlink` element uses a `toolTip` attribute and a `url`
attribute. Each `url` attribute references the `testPage.jsf` file that
is used elsewhere in the example, specifying different content for the
`name` parameter.
You can use many other kinds of user interface elements within a
`sun:property` element.
[[ghmqe]][[GSACG00193]][[adding-a-page-to-the-administration-console]]
Adding a Page to the Administration Console
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Your add-on component may require new configuration tasks. In addition
to implementing commands that accomplish these tasks (see
link:extending-asadmin.html#ghmrd[Chapter 4, "Extending the `asadmin`
Utility"]), you can provide property sheets that enable users to
configure your component or to perform tasks such as creating and
editing resources for it.
[[GSACG00031]][[ghple]]
Example 3-13 Example Jakarta Server Faces Page for a Property Sheet
Most of the user interface features used in the example reference the
file `testPage.jsf` or (for tabs) the file `tabPage.jsf`. Both files are
in the `src/main/resources/page/` directory. The `testPage.jsf` file
looks like this:
[source,oac_no_warn]
----
$page{pageName});
/>
----
The page uses the `composition` directive to specify that the page uses
the `default.layout` template and to specify a page title. The page uses
additional directives, events, and tags to specify its content.
[[ghmqi]][[GSACG00102]][[adding-internationalization-support]]
Adding Internationalization Support
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To add internationalization support for your add-on component to the
Administration Console, you can place an event and handler like the
following at the top of your page:
[source,oac_no_warn]
----
----
Replace the values `yourI18NKey` and `bundle.package.BundleName` with
appropriate values for your component.
[[ghmqg]][[GSACG00103]][[changing-the-theme-or-brand-of-the-administration-console]]
Changing the Theme or Brand of the Administration Console
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To change the theme or brand of the Administration Console for your
add-on component, use the integration point type
`org.glassfish.admingui:customtheme`. This integration point affects the
Cascading Style Sheet (CSS) files and images that are used in the
Administration Console.
[[GSACG00032]][[ghpls]]
Example 3-14 Example Custom Theme Integration Point
For example, the following integration point specifies a custom theme:
[source,oac_no_warn]
----
----
The `priority` attribute works differently when you specify it in a
branding integration point from the way it works in other integration
points. You can place multiple branding add-on components in the
`modules` directory, but only one theme can be applied to the
Administration Console. The `priority` attribute determines which theme
is used. Specify a value from 1 to 100; the lower the number, the higher
the priority. The integration point with the highest priority will be
used.
Additional integration point types also affect the theme or brand of the
Administration Console:
`org.glassfish.admingui:masthead`::
Specifies the name and location of the include masthead file, which
can be customized with a branding image. This include file will be
integrated on the masthead of the Administration Console.
`org.glassfish.admingui:loginimage`::
Specifies the name and location of the include file containing the
branding login image code that will be integrated with the login page
of the Administration Console.
`org.glassfish.admingui:loginform`::
Specifies the name and location of the include file containing the
customized login form code. This code also contains the login
background image used for the login page for the Administration
Console.
`org.glassfish.admingui:versioninfo`::
Specifies the name and location of the include file containing the
branding image that will be integrated with the content of the version
popup window.
[[GSACG00033]][[ghpla]]
Example 3-15 Example of Branding Integration Points
For example, you might specify the following integration points. The
content for each integration point is defined in an include file.
[source,oac_no_warn]
----
----
To provide your own CSS and images to modify the global look and feel of
the entire application (not just the Administration Console), use the
theming feature of https://github.com/eclipse-ee4j/glassfish-woodstock[Project
Woodstock] (`https://github.com/eclipse-ee4j/glassfish-woodstock`). Create a theme JAR
file with all the CSS properties and image files that are required by
your Woodstock component. Use a script provided by the Woodstock project
to clone an existing theme, then modify the files and properties as
necessary. Once you have created the theme JAR file, place it in the
`WEB-INF/lib` directory of the Administration Console so that the
Woodstock theme component will load the theme. In addition, edit the
properties file specified by your integration point
(`MyOwnBrand.properties`, for example) to specify the name and version
of your theme.
[[ghpkz]][[GSACG00104]][[creating-an-integration-point-type]]
Creating an Integration Point Type
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If your add-on component provides new content that you would like other
people to extend, you may define your own integration point types. For
example, if you add a new page that provides tabs of monitoring
information, you might want to allow others to add their own tabs to
complement your default tabs. This feature enables your page to behave
like the existing Administration Console pages that you or others can
extend.
[[sthref4]][[to-create-an-integration-point-type]]
To Create an Integration Point Type
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Decide on the name of your integration point type. +
The integration point type must be a unique identifier. You might use
the package name of your integration point, with a meaningful name
appended to the end, as in the following example: +
[source,oac_no_warn]
----
org.company.project:myMonitoringTabs
----
2. After you have an integration point ID, use handlers to insert the
integration point implementation(s). +
Include code like the following below the place in your Jakarta Server Faces
page where you would like to enable others to add their integration
point implementations: +
[source,oac_no_warn]
----
$attribute{rootComp});
includeIntegrations(type="org.company.project:myMonitoringTabs"
root="#{rootComp}");
/>
----
Change `clientId:of:root` to match the `clientId` of the outermost
component in which you want others to be able to add their content (in
this example, the tab set is the most likely choice). Also include your
integration point ID in place of `org.company.project:myMonitoringTabs`.
If you omit the `root` argument to `includeIntegrations`, all components
on the entire page can be used for the `parentId` of the integration
points.
----