<!--

    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/protocols.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.grizzly.protocolsPageTitle}"
    guiTemplateOnLoad="
        admingui.nav.refreshTree('treeForm:tree:configurations:#{pageSession.encodedConfigName}:networkConfig:networkListeners');
        admingui.nav.refreshTree('treeForm:tree:configurations:#{pageSession.encodedConfigName}:networkConfig:protocols');"
>

<!define name="listTableDeleteButton">
    <sun:button id="button1" text="$resource{i18n.button.Delete}" disabled="#{true}" primary="#{false}"
            onClick="if (getConfirm(this,'$pageSession{confirmDeleteMsg}')) {submitAndDisable(this, '$resource{i18n.button.Processing}');}; return false;" >
    <!command
        getUIComponent(clientId="$pageSession{tableRowGroupId}", component=>$attribute{tableRowGroup});
        getSelectedSingleMapRows(TableRowGroup="${tableRowGroup}" selectedRows=>$attribute{selectedRows});
        foreach (var="row" list="${selectedRows}") {
            setPageSessionAttribute(key="protocolName" value="#{row['name']}");
            urlencode(value="#{pageSession.protocolName}" encoding="UTF-8" result="#{pageSession.encodedProtocolName}");
            setPageSessionAttribute(key="protocolUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.encodedConfigName}/network-config/protocols/protocol/#{pageSession.encodedProtocolName}");
            setPageSessionAttribute(key="protocolHttpUrl", value="#{pageSession.protocolUrl}/http");
            setPageSessionAttribute(key="networkListenerUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.encodedConfigName}/network-config/network-listeners/network-listener");
            setPageSessionAttribute(key="virtualServerUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.encodedConfigName}/http-service/virtual-server");
            gf.getChildrenNamesList(endpoint="#{pageSession.networkListenerUrl}", id="name", result="#{pageSession.networkListeners}");
            gf.checkIfEndPointExist(endpoint="#{pageSession.protocolHttpUrl}", exists="#{pageSession.protocolHttpExist}");
            foreach (var="listener" list="#{pageSession.networkListeners}") {
                gf.restRequest(endpoint="#{pageSession.networkListenerUrl}/#{listener}.json",
                               method="get",
                               result="#{pageSession.networkListAttrs}");
                if ("#{pageSession.networkListAttrs.data.extraProperties.entity['protocol']}=#{pageSession.protocolName}"){
                    if (#{pageSession.protocolHttpExist}) {
                        gf.restRequest(endpoint="#{pageSession.protocolHttpUrl}.json", method="get", result="#{pageSession.protocolAttrHttp}");
                        setPageSessionAttribute(key="vsName" value="#{pageSession.protocolAttrHttp.data.extraProperties.entity['defaultVirtualServer']}");
                        gf.restRequest(endpoint="#{pageSession.virtualServerUrl}/#{vsName}.json", method="get", result="#{pageSession.vsAttrs}");
                        changeNetworkListenersInVS(vsAttrs="#{pageSession.vsAttrs.data.extraProperties.entity}", listenerName="#{pageSession.networkListAttrs.data.extraProperties.entity['name']}", addFlag="{#false}", result="#{pageSession.vsAttrModified}");
                        gf.restRequest(endpoint="#{pageSession.virtualServerUrl}/#{vsName}", attrs="#{pageSession.vsAttrModified}", method="post");
                    }
                    gf.restRequest(endpoint="#{pageSession.networkListenerUrl}/#{listener}?target=#{pageSession.valueMap['target']}", method="delete");
                }
            }
            gf.restRequest(endpoint="#{pageSession.protocolUrl}?target=#{pageSession.valueMap['target']}", method="delete");
        }
        gf.redirect(page="#{pageSession.listLink}");
    />
    </sun:button>
</define>

<!define name="content">
    <event>
    <!beforeCreate
        getRequestValue(key="configName" value=>$page{configName} default="server-config");
        urlencode(value="#{pageSession.configName}" encoding="UTF-8" result="#{pageSession.encodedConfigName}");
        setPageSessionAttribute(key="childType" value="protocol");
        setPageSessionAttribute(key="selfUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.encodedConfigName}/network-config/protocols");
        setPageSessionAttribute(key="rest-api" value="true");
        setPageSessionAttribute(key="networkListenerUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.encodedConfigName}/network-config/network-listeners/network-listener");
        gf.getChildrenNamesList(endpoint="#{pageSession.networkListenerUrl}", id="name", result="#{pageSession.networkListeners}");
        gf.getProtocols(configName="#{pageSession.configName}", result="#{requestScope.listOfRows}");
        foreach (var="protocol" list="#{requestScope.listOfRows}") {
            createList(size="0" result="#{pageSession.listenerList}");
            foreach (var="listener" list="#{pageSession.networkListeners}") {
                gf.restRequest(endpoint="#{pageSession.networkListenerUrl}/#{listener}.json",
                               method="get",
                               result="#{pageSession.networkListAttrs}");
                if ("#{pageSession.networkListAttrs.data.extraProperties.entity['protocol']}=#{protocol['name']}"){
                    listAdd(value="#{pageSession.networkListAttrs.data.extraProperties.entity['name']}" list="#{pageSession.listenerList}");
                }
            }
            mapPut(map="#{protocol}" key="listenerList"  value="#{pageSession.listenerList}");
        }
        createMap(result="#{pageSession.valueMap}");
        mapPut(map="#{pageSession.valueMap}" key="target" value="#{pageSession.configName}");
        setPageSessionAttribute(key="confirmDeleteMsg" value="$resource{i18n_web.msg.JS.confirmDeleteProtocol}");
        setPageSessionAttribute(key="createLink" value="#{request.contextPath}/web/grizzly/protocolNew.jsf?configName=#{configName}");
        setPageSessionAttribute(key="listLink" value="#{request.contextPath}/web/grizzly/protocols.jsf?configName=#{configName}");
        setPageSessionAttribute(key="editLink" value="#{request.contextPath}/web/grizzly/protocolEdit.jsf?configName=#{configName}");
        setPageSessionAttribute(key="tableTitle"  value="$resource{i18n_web.grizzly.protocol.tableName}");
    />
    </event>
"    <script type="text/javascript">admingui.nav.selectTreeNodeById(admingui.nav.TREE_ID+":configurations:#{pageSession.encodedConfigName}:networkConfig:protocols");</script>
            <sun:form id="propertyForm">
#include "/common/shared/alertMsg.inc"
     <sun:title id="propertyContentPage" title="$resource{i18n_web.grizzly.protocolsPageTitle}"
     helpText="$resource{i18n_web.grizzly.protocolsPageTitleHelp}" />
#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.grizzly.protocol.nameCol}" sort="name" rowHeader="$boolean{true}" id="col1">
        <sun:hyperlink id="link" text="#{td.value.name}"
            url="#{pageSession.editLink}&name=#{td.value.name}&cancelTo=web/grizzly/protocols.jsf" />
    </sun:tableColumn>


    <sun:tableColumn headerText="$resource{i18n_web.grizzly.protocol.listenerNameCol}" sort="name"  rowHeader="$boolean{false}" id="colnet">
        <foreach key="listenerName" list="#{td.value.listenerList}" >
            <sun:hyperlink  text="#{listenerName}" url="#{request.contextPath}/web/grizzly/networkListenerEdit.jsf?name=#{listenerName}&cancelTo=web/grizzly/protocols.jsf&configName=#{configName}" />"<br>
       </foreach>
    </sun:tableColumn>


    <sun:tableColumn headerText="$resource{i18n_web.grizzly.protocol.securityEnabledCol}" sort="securityEnabled" rowHeader="$boolean{false}" id="ss">
        <staticText id="ss" value="#{td.value.securityEnabled}" />
    </sun:tableColumn>

  </sun:tableRowGroup>

</sun:table>

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

</define>
</composition>
