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]. For complete information about integration points, see
`https://wikis.oracle.com/display/GlassFish/V3IntegrationPoint`.

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 JavaServer Faces page that contains the content
  to be integrated. Typically, the file contains a JavaServer Faces code
  fragment that is incorporated into a page. The code fragment often
  specifies a link to another JavaServer 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 JavaServer 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 JavaServer Faces page that contains the content
  to be integrated. +
  When you use this integration point, your JavaServer 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 JavaServer 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 JavaServer 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 JavaServer 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 JavaServer 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 JavaServer 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 JavaServer 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 JavaServer Faces page.

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

----
