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 GlassFish Server 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 GlassFish Server 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 GlassFish
  Server.
  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].

