<!--

    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

-->

<!-- grizzly/transports.jsf -->

<!initPage
    setResourceBundle(key="i18n_web" bundle="org.glassfish.web.admingui.Strings");
	setResourceBundle(key="help_web" bundle="org.glassfish.web.admingui.Helplinks");
/>
<!composition template="/templates/default.layout"  
    guiTitle="$resource{i18n_web.transport.listPageTitle}"
    guiTemplateOnLoad="admingui.nav.refreshTree('treeForm:tree:configurations:#{pageSession.encodedConfigName}:networkConfig:transports');"
>
<!define name="content">
    <event>
    <!beforeCreate
        getRequestValue(key="configName" value=>$page{configName} );
        urlencode(value="#{pageSession.configName}" encoding="UTF-8" result="#{pageSession.encodedConfigName}");
        setPageSessionAttribute(key="childType" value="transport");
        setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.encodedConfigName}/network-config/transports");
        setPageSessionAttribute(key="rest-api" value="true");
        gf.getChildList(parentEndpoint="#{pageSession.parentUrl}", childType="#{pageSession.childType}", result="#{requestScope.listOfRows}");
        createMap(result="#{pageSession.valueMap}");
        mapPut(map="#{pageSession.valueMap}" key="target" value="#{pageSession.configName}");
        setPageSessionAttribute(key="confirmDeleteMsg" value="$resource{i18n_web.msg.JS.confirmDeleteTransport}");
        setPageSessionAttribute(key="createLink" value="#{request.contextPath}/web/grizzly/transportNew.jsf?configName=#{configName}");
        setPageSessionAttribute(key="listLink" value="#{request.contextPath}/web/grizzly/transports.jsf?configName=#{configName}");
        setPageSessionAttribute(key="editLink" value="#{request.contextPath}/web/grizzly/transportEdit.jsf?configName=#{configName}");
        setPageSessionAttribute(key="tableTitle"  value="$resource{i18n_web.transport.tableName}");
    />
    </event>
"    <script type="text/javascript">admingui.nav.selectTreeNodeById(admingui.nav.TREE_ID+":configurations:#{pageSession.encodedConfigName}:networkConfig:transports");</script>

            <sun:form id="propertyForm">
#include "/common/shared/alertMsg.inc"
                 <sun:title id="propertyContentPage" title="$resource{i18n_web.transport.listPageTitle}"
                 helpText="$resource{i18n_web.transport.listPageTitleHelp}" />
#include "/common/shared/configNameSection.inc"
<sun:table id="configs" title="#{tableTitle}"
            deselectMultipleButton="$boolean{true}"
            deselectMultipleButtonOnClick="setTimeout('admingui.table.changeOneTableButton(\\\\\'#{pageSession.topActionGroup}\\\\\', \\\\\'#{pageSession.tableId}\\\\\');', 0)"
            selectMultipleButton="$boolean{true}"
            selectMultipleButtonOnClick="setTimeout('admingui.table.changeOneTableButton(\\\\\'#{pageSession.topActionGroup}\\\\\', \\\\\'#{pageSession.tableId}\\\\\');', 0)" >
            <!afterCreate
                getClientId(component="$this{component}" clientId=>$page{tableId});
            />

#include "/common/shared/listTableConfigButtons.inc"

    <sun:tableRowGroup id="rowGroup1" selected="#{td.value.selected}" data={"$attribute{listOfRows}"} sourceVar="td">
     <!afterCreate
         getClientId(component="$this{component}" clientId=>$page{tableRowGroupId});
        />
    <sun:tableColumn headerText="$resource{i18n.common.SelectHeader}" selectId="select" rowHeader="$boolean{false}" id="col0">
            <sun:checkbox id="select"
                toolTip="$resource{i18n.common.select}"
                selected="#{td.value.selected}"
                selectedValue="$boolean{true}"
                onClick="setTimeout('admingui.table.changeOneTableButton(\\\\\'#{pageSession.topActionGroup}\\\\\', \\\\\'#{pageSession.tableId}\\\\\'); admingui.table.initAllRows(\\\\\'#{pageSession.tableId}\\\\\');', 0);"
            />
    </sun:tableColumn>

    <sun:tableColumn headerText="$resource{i18n_web.transport.nameCol}" sort="name" rowHeader="$boolean{true}" id="col1">
        <sun:hyperlink id="link" text="#{td.value.name}"  url="#{pageSession.editLink}&name=#{td.value.name}" />
    </sun:tableColumn>

    <sun:tableColumn headerText="$resource{i18n_web.transport.classnameCol}" sort="classname"  rowHeader="$boolean{false}" id="classname">
        <sun:staticText escape="true" id="classname" value="#{td.value.classname}" />
    </sun:tableColumn>


    <sun:tableColumn headerText="$resource{i18n_web.transport.byteBufferTypeCol}" sort="byteBufferType" rowHeader="$boolean{false}" id="byteType">
        <sun:staticText escape="true" id="byteType" value="#{td.value.byteBufferType}" />
    </sun:tableColumn>

  </sun:tableRowGroup>

</sun:table>

	<sun:hidden id="helpKey" value="$resource{help_web.transports}" />
            </sun:form>
#include "/common/shared/changeButtonsJS.inc"

</define>
</composition>

