<!--

    Copyright (c) 2009, 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

-->

<!initPage
    setResourceBundle(key="i18n" bundle="org.glassfish.admingui.core.Strings");
    setResourceBundle(key="i18njms" bundle="org.glassfish.jms.admingui.Strings");
    setResourceBundle(key="helpjms" bundle="org.glassfish.jms.admingui.Helplinks")
/>

<!composition template="/templates/default.layout"
    guiTitle="$resource{i18njms.destinationResources.pageTitle}"
    guiTemplateOnLoad="
        admingui.nav.refreshTree('treeForm:tree:resources:Connectors:adminObjectResources');
        admingui.nav.refreshTree('treeForm:tree:resources:jmsResources:jmsDestinationResources');
        setTimeout('admingui.table.toggleButtons(\\\\\'#{pageSession.topActionGroup}\\\\\', \\\\\'#{pageSession.tableId}\\\\\'); admingui.table.initAllRows(\\\\\'#{pageSession.tableId}\\\\\');', 0);"
>
<!define name="content">
    <event>
        <!beforeCreate
            setPageSessionAttribute(key="isConnPage" value="#{false}");
            setPageSessionAttribute(key="childType" value="admin-object-resource");
            setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/resources");
            
            setPageSessionAttribute(key="tableTitle" value="$resource{i18njms.resourcesTable.destResources}");
            setPageSessionAttribute(key="createLink" value="/jms/jmsDestinationNew.jsf");
            setPageSessionAttribute(key="editLink" value="/jms/jmsDestinationEdit.jsf");
            setPageSessionAttribute(key="listLink" value="/jms/jmsDestinations.jsf");
            setPageSessionAttribute(key="confirmDeleteMsg" value="$resource{i18njms.resourcesTable.deleteDestMessage}");

            setPageSessionAttribute(key="generalPage" value="#{request.contextPath}/jms/jmsDestinationEdit.jsf");
            setPageSessionAttribute(key="targetPage" value="#{request.contextPath}/common/resourceNode/resourceEditTargets.jsf");

            //setPageSessionAttribute(key="resourceType" value="adminObjectResource");
            //setPageSessionAttribute(key="hasPool" value="#{false}");
            //setPageSessionAttribute(key="hasResType" value="#{true}");
            //setPageSessionAttribute(key="viewKeyValue" value="jmsDestinationSummaryView");
       //#include "/common/shared/viewSummaryDetail.inc"
        />
    </event>
"    <script type="text/javascript">admingui.nav.selectTreeNodeById(admingui.nav.TREE_ID+":resources:jmsResources:jmsDestinationResources");</script>
    <sun:form id="propertyForm">
#include "/common/shared/alertMsg_1.inc"
        <sun:title id="propertyContentPage" title="$resource{i18njms.destinationResources.pageTitle}" helpText="$resource{i18njms.destinationResources.pageTitleHelp}"/>
        "<br /><br />
#include "/jms/shared/resourcesTable.inc"
	<sun:hidden id="helpKey" value="$resource{helpjms.jmsDestinations}" />
    </sun:form>
</define>
</composition>
