<!--

    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

-->

<!-- iiopServerPageNode.jsf -->


<!-- add all iiop listenering's port number -->


<sun:property id="iiopPorts"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_corba.serverPage.iiopPorts}" >
    <sun:staticText id="ports" text="#{pageSession.iiopPorts}"/>
    <!beforeCreate
        setResourceBundle(key="i18n_corba" bundle="org.glassfish.corba.admingui.Strings")
        gf.getEntityAttrs(endpoint="#{sessionScope.REST_URL}/servers/server/#{pageSession.instanceName}", valueMap="#{pageSession.vMap}");
        setPageSessionAttribute(key="iiopListenerUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.vMap['configRef']}/iiop-service/iiop-listener");
        gf.getChildrenNamesList(endpoint="#{pageSession.iiopListenerUrl}" result="#{pageSession.iiopList}");
        createList(size="0" result="#{pageSession.iiopPortsList}");
        foreach (var="row" list="#{pageSession.iiopList}") {
            gf.restRequest(endpoint="#{pageSession.iiopListenerUrl}/#{row}.json", method="get", result="#{pageSession.iiopListenerAttrs}");
            listAdd(value="#{pageSession.iiopListenerAttrs.data.extraProperties.entity['port']}" list="#{pageSession.iiopPortsList}");
        }
        gf.resolveTokens(tokens="#{pageSession.iiopPortsList}" endPoint="#{sessionScope.REST_URL}/servers/server/#{pageSession.instanceName}" resolvedTokens="#{pageSession.iiopResolvedPortsList}");
        convertListToCommaString(list="#{pageSession.iiopResolvedPortsList}" commaString="#{pageSession.iiopPorts}");
    />
</sun:property> 
