<!--

    Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!-- resourceNode/resources.jsf -->

<!initPage
    setResourceBundle(key="i18n" bundle="org.glassfish.admingui.core.Strings")
    setResourceBundle(key="i18nc" bundle="org.glassfish.common.admingui.Strings")
    setResourceBundle(key="help_common" bundle="org.glassfish.common.admingui.Helplinks");
/>
<!composition template="/templates/default.layout"  guiTitle="$resource{i18n.resourcesPageTitle}" >
<!define name="content">
   <sun:form id="resourcesForm"> 
                <sun:title 
                id="resourcesPageTitle" 
                title="$resource{i18n.resourcesPageTitle}" 
                helpText="$resource{i18n.resourcesPageTitleHelp}"
                />
#include "/common/shared/alertMsg_1.inc"
                "<br />
                <sun:panelGroup id="topButtons">
                    <sun:button id="addResources" text="$resource{i18nc.resources.addResources}">
                        <!command
                            gf.redirect(page="#{requestScope.contextPath}/common/resourceNode/addResources.jsf");
                        />
                    </sun:button>
                </sun:panelGroup>
                <sun:propertySheet>
                    <sun:propertySheetSection id="propSheetSection">
                         <!afterCreate
                            getClientId(component="$this{component}" clientId=>$attribute{sheetId});
                        />
                    </sun:propertySheetSection>
                    <event>
                        <!afterCreate
                            getUIComponent(clientId="#{sheetId}"  component=>$attribute{component})
                            includeIntegrations(type="org.glassfish.admingui:resources" root="#{component}");
                        />
                    </event>
                </sun:propertySheet>

                <sun:hidden id="helpKey" value="$resource{help_common.resources}" />
            </sun:form>           
</define>
</composition>

