<!--

    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.node.NewPageTitle}" 
        guiOnLoad="showSshPswdSection('#{pageSession.psSelected}', '#{pageSession.ps1PropId}',  '#{pageSession.pswdAliasPropId}');
                   showPswdSection('#{pageSession.winPsSelected}', '#{pageSession.winPs1PropId}',  '#{pageSession.winPswdAliasPropId}'); " >
<!define name="content">
    <event>
    <!beforeCreate
        setPageSessionAttribute(key="edit" value="#{false}");
        setPageSessionAttribute(key="parentPage" value="#{request.contextPath}/cluster/node/nodes.jsf");
        setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/nodes");

        setPageSessionAttribute(key="selfUrl", value="#{pageSession.parentUrl}/create-node-ssh");
        gf.getDefaultValues(endpoint="#{pageSession.selfUrl}",  valueMap="#{pageSession.valueMap}");
        mapPut(map="#{pageSession.valueMap}", key="type" value="SSH");
        mapPut(map="#{pageSession.valueMap}", key="installdirConfig" value="");
        mapPut(map="#{pageSession.valueMap}", key="setupSsh" value="false");

        setPageSessionAttribute(key="showInstalldirSSH" value="#{true}");
        setPageSessionAttribute(key="showInstalldirConfig" value="#{false}");

        setPageSessionAttribute(key="showSetupSsh" value="#{true}");
        setPageSessionAttribute(key="showGenerateKey" value="#{false}");
        setPageSessionAttribute(key="showPublicKey" value="#{false}");
        setPageSessionAttribute(key="showSetupPswd" value="#{false}");
        setPageSessionAttribute(key="showKeyFile" value="#{true}");


        setPageSessionAttribute(key="showTestdir" value="#{true}");
        setPageSessionAttribute(key="title" value="$resource{i18ncs.node.NewPageTitle}");
        setPageSessionAttribute(key="titleHelp" value="$resource{i18ncs.node.NewPageTitleHelp}");
        setPageSessionAttribute(key="convertToFalseList" value="force");
        setPageSessionAttribute(key="psSelected" value="1");
        setPageSessionAttribute(key="winPsSelected" value="2");

    />
    </event>
<sun:form id="propertyForm" autoComplete="off">
#include "/common/shared/alertMsg.inc"
#include "/cluster/node/nodeAttr.inc"

    <sun:hidden id="helpKey" value="$resource{help_cluster.nodeNew}" />
</sun:form>
#include "/cluster/node/nodeJS.inc"
</define>
</composition>
