<!--

    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

-->

<!-- jmxSSLEdit.jsf -->


<!initPage
    setResourceBundle(key="i18nc" bundle="org.glassfish.common.admingui.Strings")
    setResourceBundle(key="help_common" bundle="org.glassfish.common.admingui.Helplinks");
/>
<!composition template="/templates/default.layout"  guiTitle="$resource{i18n.edJmxConnector.sslSettingsLabel}" >
<!define name="content">
    <event>
      <!beforeCreate
        getRequestValue(key="configName" value="#{pageSession.configName}" default="server-config");
        setSessionAttribute(key="jmxConnectorTab" value="jmxSSLEdit");
        setPageSessionAttribute(key="selfPage" value="#{request.contextPath}/common/configuration/jmxSSLEdit.jsf?name=#{pageSession.Name}&configName=#{pageSession.configName}");
        setPageSessionAttribute(key="childType" value="ssl")
        setPageSessionAttribute(key="showCancelButton" value="#{false}")
        setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.configName}/admin-service/jmx-connector/system");
        setPageSessionAttribute(key="selfUrl", value="#{pageSession.parentUrl}/#{pageSession.childType}");
        setPageSessionAttribute(key="createSslUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.configName}/admin-service/jmx-connector/system/create-ssl");
        createMap(result="#{pageSession.createMap}");
        mapPut(map="#{pageSession.createMap}" key="target" value="#{pageSession.configName}");
        setPageSessionAttribute(key="rest-api" value="true");
#include "/common/shared/sslPrepare.inc"
      />
  </event>

            <sun:form id="propertyForm">
#include "jmxConnectorTab.inc"
#include "/common/shared/alertMsg.inc"

        <!-- Page Title -->
        <sun:title id="propertyContentPage" title="$resource{i18n.edJmxConnector.sslSettingsTitle}" helpText="$resource{i18n.edJmxConnector.sslSettingsTitleHelp}">
#include "/common/shared/sslButtons.inc"
        </sun:title>
#include "/common/shared/sslAttrs.inc"
	<sun:hidden id="helpKey" value="$resource{help_common.jmxSSLEdit}" />
</sun:form>
#include "/common/shared/changeButtonsJS.inc"
#include "/common/shared/sslValidationsJS.inc"
</define>
</composition>

