<!--

    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

-->

<!-- jca/adminObjectResources.jsf -->


<!initPage
    setResourceBundle(key="i18n" bundle="org.glassfish.admingui.core.Strings");
    setResourceBundle(key="i18njca" bundle="org.glassfish.jca.admingui.Strings");
    setResourceBundle(key="help_jca" bundle="org.glassfish.jca.admingui.Helplinks")
/>
<!composition template="/templates/default.layout"
    guiTitle="$resource{i18njca.adminObjectResources.pageTitle}"
    guiTemplateOnLoad="
        admingui.nav.refreshTree('treeForm:tree:resources:jmsResources:jmsDestinationResources');
        admingui.nav.refreshTree('treeForm:tree:resources:Connectors:adminObjectResources');
        setTimeout('admingui.table.changeThreeTableButtons(\\\\\'#{pageSession.topActionGroup}\\\\\', \\\\\'#{pageSession.tableId}\\\\\'); admingui.table.initAllRows(\\\\\'#{pageSession.tableId}\\\\\');', 0);"
>
<!define name="content">
    <event>
    <!beforeCreate
        getRequestValue(key="configName" value=>$page{configName} default="server-config");
        setPageSessionAttribute(key="childType" value="admin-object-resource");
        setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/resources");
        setPageSessionAttribute(key="confirmDeleteMsg" value="$resource{i18njca.msg.JS.confirmDeleteAO}");
        setPageSessionAttribute(key="createLink" value="#{request.contextPath}/jca/adminObjectNew.jsf");
        setPageSessionAttribute(key="listLink" value="#{request.contextPath}/jca/adminObjectResources.jsf");
        setPageSessionAttribute(key="editLink" value="#{request.contextPath}/jca/adminObjectEdit.jsf");
        setPageSessionAttribute(key="tableTitle" value="$resource{i18njca.resourcesTable.resources}");

        setPageSessionAttribute(key="generalPage" value="#{request.contextPath}/jca/adminObjectEdit.jsf");
        setPageSessionAttribute(key="targetPage" value="#{request.contextPath}/common/resourceNode/resourceEditTargets.jsf");
        
        setPageSessionAttribute(key="hasPool" value="#{false}" );
        setPageSessionAttribute(key="hasResType" value="#{true}" );
    />
    </event>
"    <script type="text/javascript">admingui.nav.selectTreeNodeById(admingui.nav.TREE_ID+":resources:Connectors:adminObjectResources");</script>

            <sun:form id="propertyForm">
#include "/common/shared/alertMsg_1.inc"
                 <sun:title id="propertyContentPage" title="$resource{i18njca.adminObjectResources.pageTitle}"
                 helpText="$resource{i18njca.adminObjectResources.pageTitleHelp}" />
		 "<br /> <br />

#include "/jca/resourcesTable.inc"

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