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

[[GSACG00010]][[ghmrp]]


[[a-integration-point-reference]]
A 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 +

[width="100%",cols="<100%",]
|=======================================================================
a|
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,oac_no_warn]
----
<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,oac_no_warn]
----
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].

----
