<!--

    Copyright (c) 2010, 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="i18nc" bundle="org.glassfish.common.admingui.Strings")
    setResourceBundle(key="i18ncs" bundle="org.glassfish.cluster.admingui.Strings")
    setResourceBundle(key="help_cluster" bundle="org.glassfish.cluster.admingui.Helplinks");
/>
<!composition template="/templates/default.layout"
    guiTitle="$resource{i18ncs.nodes.PageTitle}"
    guiTemplateOnLoad="admingui.nav.refreshTree('treeForm:tree:nodeTreeNode');">

<!define name="listTableDeleteButton">
    <sun:button id="button1" text="$resource{i18n.button.Delete}" disabled="#{true}" primary="#{false}"
            onClick="if ( getConfirm(this,'$pageSession{confirmDeleteMsg}') )
                { return submitAndDisable(this, '$resource{i18n.button.Processing}');}  else {return false;} " >
        <!command
            getUIComponent(clientId="$pageSession{tableRowGroupId}", component="#{requestScope.tableRowGroup}");
            getSelectedSingleMapRows(TableRowGroup="${tableRowGroup}" selectedRows="#{requestScope.selectedRows}");
            gf.nodeAction(rows="#{requestScope.selectedRows}", action="delete-node" , nodeInstanceMap="#{pageSession.nodeInstanceMap}");
            gf.redirect(page="/cluster/node/nodes.jsf?alertType=${alertType}&alertSummary=${alertSummary}&alertDetail=${alertDetail}");
        />
    </sun:button>
</define>
<!define name="extraButton2">
    <sun:button id="button2" text="$resource{i18ncs.button.DeleteAndUninstall}" disabled="#{true}" primary="#{false}"
            onClick="if ( getConfirm(this,'$resource{i18ncs.msg.JS.confirmUninstallNodes}') )
                { return submitAndDisable(this, '$resource{i18n.button.Processing}');}  else {return false;} " >
        <!command
            getUIComponent(clientId="$pageSession{tableRowGroupId}", component="#{requestScope.tableRowGroup}");
            getSelectedSingleMapRows(TableRowGroup="${tableRowGroup}" selectedRows="#{requestScope.selectedRows}");
            gf.nodeAction(rows="#{requestScope.selectedRows}", action="delete-node-uninstall" , nodeInstanceMap="#{pageSession.nodeInstanceMap}");
            gf.redirect(page="/cluster/node/nodes.jsf?alertType=${alertType}&alertSummary=${alertSummary}&alertDetail=${alertDetail}");
        />
    </sun:button>
</define>

<!define name="content">
    <event>
    <!beforeCreate
        setPageSessionAttribute(key="parentUrl" value="#{sessionScope.REST_URL}/nodes");
        setPageSessionAttribute(key="childType" value="node");
        gf.getChildList(parentEndpoint="#{pageSession.parentUrl}", childType="#{pageSession.childType}", result="#{requestScope.listOfRows}");
        foreach(var="oneNode" list="#{requestScope.listOfRows}"){
            mapPut(map="#{oneNode}" key="hasPing" value="#{false}");
            mapPut(map="#{oneNode}" key="cmd" value="");
            if ("#{oneNode.type}=SSH"){
                mapPut(map="#{oneNode}" key="hasPing" value="#{true}");
                mapPut(map="#{oneNode}" key="cmd" value="ping-node-ssh");
            }
         }
        setPageSessionAttribute(key="confirmDeleteMsg" value="$resource{i18ncs.msg.JS.confirmDeleteNodes}");
        setPageSessionAttribute(key="createLink" value="#{request.contextPath}/cluster/node/nodeNew.jsf");
        setPageSessionAttribute(key="listLink" value="#{request.contextPath}/cluster/node/nodes.jsf");
        setPageSessionAttribute(key="editLink" value="#{request.contextPath}/cluster/node/nodeEdit.jsf");
        setPageSessionAttribute(key="tableTitle" value="$resource{i18ncs.nodes.TableTitle}");
        createMap(result="#{pageSession.nodeInstanceMap}");
        gf.listInstances(optionKeys={"standaloneonly" } optionValues={"true"}, instances="#{pageSession.standaloneList}");
    />
    </event>
"    <script type="text/javascript">admingui.nav.selectTreeNodeById(admingui.nav.TREE_ID + ":nodeTreeNode");</script>
<sun:form id="propertyForm">
#include "/common/shared/alertMsg.inc"
     <sun:title id="propertyContentPage" title="$resource{i18ncs.nodes.PageTitle}" helpText="$resource{i18ncs.nodes.PageTitleHelp}" />
	"<br /> <br />

<sun:table id="nodesTable" title="#{tableTitle}"
    deselectMultipleButton="$boolean{true}"
    deselectMultipleButtonOnClick="setTimeout('admingui.table.changeThreeTableButtons(\\\\\'#{pageSession.topActionGroup}\\\\\', \\\\\'#{pageSession.tableId}\\\\\');', 0)"
    selectMultipleButton="$boolean{true}"
    selectMultipleButtonOnClick="setTimeout('admingui.table.changeThreeTableButtons(\\\\\'#{pageSession.topActionGroup}\\\\\', \\\\\'#{pageSession.tableId}\\\\\');', 0)" >
     <!afterCreate
        getClientId(component="$this{component}" clientId=>$page{tableId});
    />

#include "/common/shared/listTableButtons.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.changeThreeTableButtons(\\\\\'#{pageSession.topActionGroup}\\\\\', \\\\\'#{pageSession.tableId}\\\\\'); admingui.table.initAllRows(\\\\\'#{pageSession.tableId}\\\\\');', 0);"
        />
    </sun:tableColumn>
    <sun:tableColumn headerText="$resource{i18n.common.name.header}"  sort="name" rowHeader="$boolean{true}" valign="top" id="col1">
        <event>
            <!beforeEncode
                setPageSessionAttribute(key="nodeName" value="#{td.value.name}");
            />
        </event>
        <sun:hyperlink id="link" text="#{td.value.name}" url="#{pageSession.editLink}?nodeName=#{td.value.name}" />
    </sun:tableColumn>

    <sun:tableColumn headerText="$resource{i18ncs.node.nodeHostCol}" sort="nodeHost" rowHeader="$boolean{false}" valign="top" id="col2">
        <sun:staticText escape="true" id="nodeHostCol" value="#{td.value.nodeHost}" />
    </sun:tableColumn>

    <sun:tableColumn headerText="$resource{i18ncs.node.nodeTypeCol}"  sort="type" rowHeader="$boolean{false}" valign="top" id="colType">
        <sun:staticText escape="true" id="typeCol" value="#{td.value.type}" />
    </sun:tableColumn>

    <sun:tableColumn headerText="$resource{i18ncs.clusters.instanceCol}" rowHeader="$boolean{false}" id="col3">
         <event>
            <!beforeEncode
                gf.listInstances(optionKeys={"id"} optionValues={"$pageSession{nodeName}"}, instances="#{requestScope.instanceList}" statusMap="#{requestScope.statusMap}");
                mapPut(map="#{pageSession.nodeInstanceMap}" key="#{pageSession.nodeName}" value="#{requestScope.instanceList}");
            />
         </event>
            <if condition="#{requestScope.instanceList}">
            <foreach key="instance" list="#{requestScope.instanceList}">
                <event>
                <!beforeEncode
                    setAttribute(key="status" value="#{requestScope.statusMap[ '${instance}']}");
                    gf.containedIn(list="#{pageSession.standaloneList}" testStr="#{requestScope.instance}" contain="#{requestScope.isStandalone}" );
                    urlencode(value="#{requestScope.instance}" encoding="UTF-8" result="#{pageSession.encodedInstanceName}");
                    if (#{requestScope.isStandalone}){
                        setAttribute(key="iurl" value="#{request.contextPath}/cluster/standalone/standaloneInstanceGeneral.jsf?instanceName=#{pageSession.encodedInstanceName}");
                    }

                    if ( !#{requestScope.isStandalone}){
                        gf.getClusterNameForInstance(instanceName="#{requestScope.instance}"  clusterName="#{requestScope.clusterName}");
                        urlencode(value="#{requestScope.clusterName}" encoding="UTF-8" result="#{requestScope.encodedClusterName}");
                        setAttribute(key="iurl" value="#{request.contextPath}/cluster/cluster/clusterInstanceEdit.jsf?clusterName=#{requestScope.encodedClusterName}&instanceName=#{pageSession.encodedInstanceName}" );
                    }
                    setAttribute(key="statusString" value="$resource{i18nc.status.$attribute{status}}  &nbsp; $resource{i18nc.status.image.$attribute{status}}");
                />
                </event>
                <sun:hyperlink url="#{requestScope.iurl}" text="#{requestScope.instance}" />
                "&nbsp;&nbsp;&nbsp;
                <staticText id="colStopped" value="#{requestScope.statusString}" />
                "<br />
            </foreach>
            </if>
    </sun:tableColumn>

    <sun:tableColumn headerText="$resource{i18n.common.Action}" embeddedActions="#{false}" rowHeader="$boolean{true}" id="col4">
        <sun:hyperlink id="pingLink" text="$resource{i18n.button.Ping}" rendered="#{td.value.hasPing}"  >
            <!command
                gf.restRequest(endpoint="#{sessionScope.REST_URL}/nodes/node/#{td.value.name}/#{td.value.cmd}.json"
                   attrs="#{requestScope.attrMap}"
                   method="GET"
                   result="#{requestScope.result}");
                if ("#{requestScope.result.data['exit_code']} = SUCCESS") {
                    prepareAlertMsg(type="success", summary="#{requestScope.result.data.message}");
                }
                if ("!#{requestScope.result.data['exit_code']} = SUCCESS") {
                    gf.handleError(detail="#{requestScope.result.data.message}");
                }
            />
        </sun:hyperlink>
    </sun:tableColumn>

    </sun:tableRowGroup>

</sun:table>

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

</define>
</composition>


