<!--

    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

-->

<sun:treeNode
    id="networkConfig"
    text="$resource{i18n_web.tree.grizzly.networkConfig}"
    url="/web/grizzly/networkConfig.jsf?configName=${configName}"
    imageURL="/resource/web/images/httpservice.gif">

    <dynamicTreeNode id="networkListeners"
	    treeAdaptorClass="org.glassfish.admingui.common.tree.ListTreeAdaptor"
	    children="#{requestScope.children}"
	    childImageURL="/resource/web/images/http.gif"
	    childExpanded="false"
	    childURL="/web/grizzly/networkListenerEdit.jsf?name=#{$this{valueBinding}.text}&configName=${configName}"
	    text="$resource{i18n_web.tree.grizzly.networkListeners}"
	    url="/web/grizzly/networkListeners.jsf?configName=${configName}">
	<ui:event type="beforeCreate">
	    gf.restRequest(endpoint="#{sessionScope.REST_URL}/configs/config/${configName}/network-config/network-listeners/network-listener.json" method="get" result="#{requestScope.resp}");
	    setAttribute(key="children" value="#{requestScope.resp.data.extraProperties.childResources}");
	</ui:event>
        <!facet image>
            <sun:iconHyperlink id="treeIcon" icon="TREE_FOLDER" url="/web/grizzly/networkListeners.jsf?configName=${configName}" border="0" immediate="true" alt="$resource{i18n_web.tree.grizzly.networkListeners}"/>
        </facet>
    </dynamicTreeNode>

    <dynamicTreeNode id="protocols"
	    treeAdaptorClass="org.glassfish.admingui.common.tree.ListTreeAdaptor"
	    children="#{requestScope.children}"
	    childImageURL="/resource/web/images/http.gif"
	    childExpanded="false"
	    childURL="/web/grizzly/protocolEdit.jsf?name=#{$this{valueBinding}.text}&configName=${configName}"
	    text="$resource{i18n_web.tree.grizzly.protocols}"
	    url="/web/grizzly/protocols.jsf?configName=${configName}">
	<ui:event type="beforeCreate">
	    gf.restRequest(endpoint="#{sessionScope.REST_URL}/configs/config/${configName}/network-config/protocols/protocol.json" method="get" result="#{requestScope.resp}");
	    setAttribute(key="children" value="#{requestScope.resp.data.extraProperties.childResources}");
	</ui:event>
        <!facet image>
            <sun:iconHyperlink id="treeIcon" icon="TREE_FOLDER" url="/web/grizzly/protocols.jsf?configName=${configName}" border="0" immediate="true" alt="$resource{i18n_web.tree.grizzly.protocols}"/>
        </facet>
        <!filterTree filterProtocols() />
    </dynamicTreeNode>

    <dynamicTreeNode id="transports"
	    treeAdaptorClass="org.glassfish.admingui.common.tree.ListTreeAdaptor"
	    children="#{requestScope.children}"
	    childImageURL="/resource/web/images/http.gif"
	    childExpanded="false"
	    childURL="/web/grizzly/transportEdit.jsf?name=#{$this{valueBinding}.text}&configName=${configName}"
	    text="$resource{i18n_web.tree.grizzly.transports}"
	    url="/web/grizzly/transports.jsf?configName=${configName}">
	<ui:event type="beforeCreate">
	    gf.restRequest(endpoint="#{sessionScope.REST_URL}/configs/config/${configName}/network-config/transports/transport.json" method="get" result="#{requestScope.resp}");
	    setAttribute(key="children" value="#{requestScope.resp.data.extraProperties.childResources}");
	</ui:event>
        <!facet image>
            <sun:iconHyperlink id="treeIcon" icon="TREE_FOLDER" url="/web/grizzly/transports.jsf?configName=${configName}" border="0" immediate="true" alt="$resource{i18n_web.tree.grizzly.transports}"/>
        </facet>
    </dynamicTreeNode>
    <!beforeCreate
        setResourceBundle(key="i18n_web" bundle="org.glassfish.web.admingui.Strings");
    />
</sun:treeNode>
