type=page
status=published
title=Integration Point Reference
prev=packaging-integrating-delivering.html
~~~~~~

= Integration Point Reference

[[GSACG00010]][[ghmrp]]


[[a-integration-point-reference]]
== Integration Point Reference

This appendix provides reference information about integration points,
which are described in
link:extending-the-admin-console.html#ghmrb[Extending the Administration Console].
Define an integration point for each user interface feature in the
`console-config.xml` file for your add-on component.

The following topics are addressed here:

* link:#ghprc[Integration Point Attributes]
* link:#ghmwa[`org.glassfish.admingui:navNode` Integration Point]
* link:#gjkff[`org.glassfish.admingui:rightPanel` Integration Point]
* link:#gjkfq[`org.glassfish.admingui:rightPanelTitle` Integration Point]
* link:#ghpkh[`org.glassfish.admingui:serverInstTab` Integration Point]
* link:#ghpit[`org.glassfish.admingui:commonTask` Integration Point]
* link:#ghphz[`org.glassfish.admingui:configuration` Integration Point]
* link:#ghpfm[`org.glassfish.admingui:resources` Integration Point]
* link:#ghpiz[`org.glassfish.admingui:customtheme` Integration Point]
* link:#ghppm[`org.glassfish.admingui:masthead` Integration Point]
* link:#ghppk[`org.glassfish.admingui:loginimage` Integration Point]
* link:#ghprk[`org.glassfish.admingui:loginform` Integration Point]
* link:#ghpse[`org.glassfish.admingui:versioninfo` Integration Point]

[[ghprc]][[GSACG00145]][[integration-point-attributes]]

=== Integration Point Attributes

For each `integration-point` element, specify the following attributes.
Each attribute takes a string value.

`id`::
  An identifier for the integration point. The remaining sections of
  this appendix do not provide details about specifying this attribute.
`parentId`::
  The ID of the integration point's parent.
`type`::
  The type of the integration point.
`priority`::
  A numeric value that specifies the relative ordering of integration
  points with the same `parentId`. A lower number specifies a higher
  priority (for example, 100 represents a higher priority than 400). You
  may need to experiment in order to place the integration point where
  you want it. This attribute is optional.
`content`::
  A relative path to the Jakarta Server Faces page that contains the content
  to be integrated. Typically, the file contains a Jakarta Server Faces code
  fragment that is incorporated into a page. The code fragment often
  specifies a link to another Jakarta Server Faces page that appears when a
  user clicks the link.

[[ghmwa]][[GSACG00146]][[org.glassfish.adminguinavnode-integration-point]]

=== `org.glassfish.admingui:navNode` Integration Point

Use an `org.glassfish.admingui:navNode` integration point to insert a
node in the Administration Console navigation tree. Specify the
attributes and their content as follows.

`type`::
  `org.glassfish.admingui:navNode`, the left-hand navigation tree
`parentId`::
  The `id` value of the `navNode` that is the parent for this node.
  The `parentId` can be any of the following:
+
  `tree`;;
    The root node of the entire navigation tree. Use this value to place
    your node at the top level of the tree. You can then use the `id` of
    this node to create additional nodes beneath it.
  `registration`;;
    The Registration node
  `applicationServer`;;
    The {productName} node
  `applications`;;
    The Applications node
  `resources`;;
    The Resources node
  `configuration`;;
    The Configuration node
  `webContainer`;;
    The Web Container node under the Configuration node
  `httpService`;;
    The HTTP Service node under the Configuration node
+
[NOTE]
====
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).
====

`priority`::
  A numeric value that specifies the relative ordering of the node on
  the tree, whether at the top level or under another node.
`content`::
  A relative path to the Jakarta Server Faces page that contains the content
  to be integrated, or a URL to an external resource that returns the
  appropriate data structure for inclusion.

For an example, see link:extending-the-admin-console.html#ghpmb[Example 3-2].

[[gjkff]][[GSACG00147]][[org.glassfish.adminguirightpanel-integration-point]]

=== `org.glassfish.admingui:rightPanel` Integration Point

Use an `org.glassfish.admingui:rightPanel` integration point to specify
content for the right frame of the Administration Console. Specify the
attributes and their content as follows.

`type`::
  `org.glassfish.admingui:rightPanel`
`parentId`::
  None.
`priority`::
  A numeric value that specifies the relative ordering. If multiple
  plug-ins specify content for the right frame, the one with greater
  priority will take precedence.
`content`::
  A path relative to the root of the plug-in JAR file to a file
  containing the content for the right panel. Alternatively, it may
  contain a full URL which will deliver the content for the right panel.

[[gjkfq]][[GSACG00148]][[org.glassfish.adminguirightpaneltitle-integration-point]]

=== `org.glassfish.admingui:rightPanelTitle` Integration Point

Use an `org.glassfish.admingui:rightPanel` integration point to specify
the title for the right frame of the Administration Console. Specify the
attributes and their content as follows.

`type`::
  `org.glassfish.admingui:rightPanelTitle`
`parentId`::
  None.
`priority`::
  A numeric value that specifies the relative ordering. If multiple
  plug-ins specify content for the right frame, the one with greater
  priority will take precedence.
`content`::
  Specifies the title to display at the top of the right panel.

[[ghpkh]][[GSACG00149]][[org.glassfish.adminguiserverinsttab-integration-point]]

=== `org.glassfish.admingui:serverInstTab` Integration Point

Use an `org.glassfish.admingui:serverInstTab` integration point to place
an additional tab on the {productName} page of the Administration
Console. Specify the attributes and their content as follows.

`type`::
  `org.glassfish.admingui:serverInstTab`
`parentId`::
  The `id` value of the tab set that is the parent for this tab. For a
  top-level tab on this page, this value is `serverInstTabs`, the tab
  set that contains the general information property pages for {productName}.
  For a sub-tab, the value is the `id` value for the parent tab.
`priority`::
  A numeric value that specifies the relative ordering of the tab on the
  page, whether at the top level or under another tab.
`content`::
  A relative path to the Jakarta Server Faces page that contains the content
  to be integrated.
  When you use this integration point, your Jakarta Server Faces page must
  call the `setSessionAttribute` handler for the `command` event to set
  the session variable of the `serverInstTabs` tab set to the `id` value
  of your tab. For example, the file may have the following content:
+
[source,xml]
----
<sun:tab id="sampletab" immediate="true" text="Sample First Tab">
    <!command
        setSessionAttribute(key="serverInstTabs" value="sampleTab");
        gf.redirect(page="#{request.contextPath}/page/tabPage.jsf?name=Sample%20First%20Tab");
    />
</sun:tab>
----
  The `id` of the `sun:tab` custom tag must be the same as the `value`
  argument of the `setSessionAttribute` handler.

For examples, see link:extending-the-admin-console.html#ghplc[Example
3-4] and link:extending-the-admin-console.html#ghplu[Example 3-5].

[[ghpit]][[GSACG00150]][[org.glassfish.adminguicommontask-integration-point]]

=== `org.glassfish.admingui:commonTask` Integration Point

Use an `org.glassfish.admingui:commonTask` integration point to place a
new task or task group on the Common Tasks page of the Administration
Console. Specify the attributes and their content as follows.

`type`::
  `org.glassfish.admingui:commonTask`
`parentId`::
  If you are adding a task group, the `id` value of the Common Tasks
  page, which is `commonTasksSection`.
  If you are adding a single task, the `id` value of the task group that
  is the parent for this tab, such as `deployment` (for the Deployment
  group).
`priority`::
  A numeric value that specifies the relative ordering of the tab on the
  page, whether at the top level or under another tab.
`content`::
  A relative path to the Jakarta Server Faces page that contains the content
  to be integrated.

For examples, see link:extending-the-admin-console.html#ghpox[Example
3-7] and link:extending-the-admin-console.html#ghplk[Example 3-9].

[[ghphz]][[GSACG00151]][[org.glassfish.adminguiconfiguration-integration-point]]

=== `org.glassfish.admingui:configuration` Integration Point

Use an `org.glassfish.admingui:configuration` integration point to add a
component to the Configuration page of the Administration Console.
Typically, you add a link to the property sheet section of this page.
Specify the attributes and their content as follows.

`type`::
  `org.glassfish.admingui:configuration`
`parentId`::
  The `id` value of the property sheet for the Configuration page. This
  value is `propSheetSection`, the section that contains the property
  definitions for the Configuration page.
`priority`::
  A numeric value that specifies the relative ordering of the item on
  the Configuration page.
`content`::
  A relative path to the Jakarta Server Faces page that contains the content
  to be integrated.

[[ghpfm]][[GSACG00152]][[org.glassfish.adminguiresources-integration-point]]

=== `org.glassfish.admingui:resources` Integration Point

Use an `org.glassfish.admingui:resources` integration point to add a
component to the Resources page of the Administration Console.
Typically, you add a link to the property sheet section of this page.
Specify the attributes and their content as follows.

`type`::
  `org.glassfish.admingui:resources`
`parentId`::
  The `id` value of the property sheet for the Resources page. This
  value is `propSheetSection`, the section that contains the property
  definitions for the Resources page.
`priority`::
  A numeric value that specifies the relative ordering of the item on
  the Resources page.
`content`::
  A relative path to the Jakarta Server Faces page that contains the content
  to be integrated.

For an example, see link:extending-the-admin-console.html#ghpnu[Example
3-11].

[[ghpiz]][[GSACG00153]][[org.glassfish.adminguicustomtheme-integration-point]]

=== `org.glassfish.admingui:customtheme` Integration Point

Use an `org.glassfish.admingui:customtheme` integration point to add
your own branding to the Administration Console. Specify the attributes
and their content as follows. Do not specify a `parentId` attribute for
this integration point.

`type`::
  `org.glassfish.admingui:customtheme`
`priority`::
  A numeric value that specifies the relative ordering of the item in
  comparison to other themes. This value must be between 1 and 100. The
  theme with the smallest number is used first.
`content`::
  The name of the properties file that contains the key/value pairs that
  will be used to access your theme JAR file. You must specify the
  following keys:
  `com.sun.webui.theme.DEFAULT_THEME`;;
    Specifies the theme name for the theme that this application may
    depend on.
  `com.sun.webui.theme.DEFAULT_THEME_VERSION`;;
    Specifies the theme version this application may depend on.
+
For example, the properties file for the default Administration Console brand contains the following:
+
[source]
----
com.sun.webui.theme.DEFAULT_THEME=suntheme
com.sun.webui.theme.DEFAULT_THEME_VERSION=4.3
----

For an example, see link:extending-the-admin-console.html#ghpls[Example
3-14].

[[ghppm]][[GSACG00154]][[org.glassfish.adminguimasthead-integration-point]]

=== `org.glassfish.admingui:masthead` Integration Point

Use an `org.glassfish.admingui:masthead` integration point to specify
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. Specify the attributes
and their content as follows. Do not specify a `parentId` attribute for
this integration point.

`type`::
  `org.glassfish.admingui:masthead`
`priority`::
  A numeric value that specifies the relative ordering of the item in
  comparison to other items of this type. This value must be between 1
  and 100. The theme with the smallest number is used first.
`content`::
  A file that contains the content, typically a file that is included in
  a Jakarta Server Faces page.

For an example, see link:extending-the-admin-console.html#ghpla[Example
3-15].

[[ghppk]][[GSACG00155]][[org.glassfish.adminguiloginimage-integration-point]]

=== `org.glassfish.admingui:loginimage` Integration Point

Use an `org.glassfish.admingui:loginimage` integration point to specify
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. Specify the attributes and their content as
follows. Do not specify a `parentId` attribute for this integration
point.

`type`::
  `org.glassfish.admingui:loginimage`
`parentId`::
  None; a login image does not have a parent ID.
`priority`::
  A numeric value that specifies the relative ordering of the item in
  comparison to other items of this type. This value must be between 1
  and 100. The theme with the smallest number is used first.
`content`::
  A file that contains the content, typically a file that is included in
  a Jakarta Server Faces page.

For an example, see link:extending-the-admin-console.html#ghpla[Example
3-15].

[[ghprk]][[GSACG00156]][[org.glassfish.adminguiloginform-integration-point]]

=== `org.glassfish.admingui:loginform` Integration Point

Use an `org.glassfish.admingui:loginform` integration point to specify
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. Specify the
attributes and their content as follows. Do not specify a `parentId`
attribute for this integration point.

`type`::
  `org.glassfish.admingui:loginform`
`priority`::
  A numeric value that specifies the relative ordering of the item in
  comparison to other items of this type. This value must be between 1
  and 100. The theme with the smallest number is used first.
`content`::
  A file that contains the content, typically a file that is included in
  a Jakarta Server Faces page.

For an example, see link:extending-the-admin-console.html#ghpla[Example
3-15].

[[ghpse]][[GSACG00157]][[org.glassfish.adminguiversioninfo-integration-point]]

=== `org.glassfish.admingui:versioninfo` Integration Point

Use an `org.glassfish.admingui:versioninfo` integration point to specify
the name and location of the include file containing the branding image
that will be integrated with the content of the version popup window.
Specify the attributes and their content as follows. Do not specify a
`parentId` attribute for this integration point.

`type`::
  `org.glassfish.admingui:versioninfo`
`priority`::
  A numeric value that specifies the relative ordering of the item in
  comparison to other items of this type. This value must be between 1
  and 100. The theme with the smallest number is used first.
`content`::
  A file that contains the content, typically a file that is included in
  a Jakarta Server Faces page.

For an example, see link:extending-the-admin-console.html#ghpla[Example
3-15].

