<!--

    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

-->

<!initPage
    setResourceBundle(key="i18ncs" bundle="org.glassfish.cluster.admingui.Strings")
    setResourceBundle(key="i18n_web" bundle="org.glassfish.web.admingui.Strings");
    setResourceBundle(key="help_web" bundle="org.glassfish.web.admingui.Helplinks");
/>

<!composition template="/templates/default.layout"  guiTitle="$resource{i18n_web.availability.webContainerAvailability}" >

<!define name="content">
    <event>
    <!beforeCreate
        setSessionAttribute(key="availabilityTabs" value="webAvailabilityTab");
        getRequestValue(key="configName" value=>$page{configName} default="server-config");
        setPageSessionAttribute(key="childType" value="web-container-availability");
        setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.configName}/availability-service");
        setPageSessionAttribute(key="selfUrl", value="#{pageSession.parentUrl}/#{pageSession.childType}");
        setPageSessionAttribute(key="rest-api" value="true");
        gf.checkIfEndPointExist(endpoint="#{pageSession.selfUrl}/property" exists="#{pageSession.edit}");
        if(!#{edit}) {
            gf.restRequest(endpoint="#{pageSession.selfUrl}" method="POST");
        }
        gf.getEntityAttrs(endpoint="#{pageSession.selfUrl}.json", valueMap="#{pageSession.valueMap}");
        gf.restRequest(endpoint="#{pageSession.selfUrl}/property.json" method="GET" result="#{requestScope.propTable}");
        setPageSessionAttribute(key="tableList" value="#{requestScope.propTable.data.extraProperties.properties}");
        setPageSessionAttribute(key="selfPage" value="#{request.contextPath}/web/configuration/webAvailabilityService.jsf?configName=#{pageSession.configName}");
        setPageSessionAttribute(key="convertToFalseList" value={"availabilityEnabled", "persistenceStoreHealthCheckEnabled", "ssoFailoverEnabled"});
        //set the following for including buttons.inc
        setPageSessionAttribute(key="edit" value="#{true}" );
        setPageSessionAttribute(key="showDefaultButton" value="#{true}" );
        setPageSessionAttribute(key="showCancelButton" value="#{false}" );
        setPageSessionAttribute(key="hasPropertySheet" value="#{true}" );
        setPageSessionAttribute(key="hasPropertyTable" value="#{true}" );
    />
    </event>
    <sun:form id="propertyForm">
#include "/cluster/availability/availabilityTabs.inc"
#include "/common/shared/alertMsg.inc"
    <sun:title id="propertyContentPage" title="$resource{i18n_web.availability.webContainerAvailability}" helpText="$resource{i18n_web.availability.webContainerAvailabilityInfo}">
#include "/common/shared/editPageButtons.inc"
    </sun:title>
        <sun:propertySheet id="propertySheet">
#include "/common/shared/configNameSection.inc"
            <sun:propertySheetSection id="propertSectionTextField">
                <sun:property id="AvailabilityEnabledProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18ncs.availability.availabilityService}" helpText="$resource{i18n_web.availability.webContainerAvailabilityInfoHelp}">
                    <sun:checkbox  selected="#{pageSession.valueMap['availabilityEnabled']}" selectedValue="true" />
                </sun:property>
                <sun:property id="PersistenceTypeProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_web.availability.persistenceType}" helpText="$resource{i18n_web.availability.persistenceTypeHelp}">
                    <sun:dropDown id="HttpSessionStore" selected="#{pageSession.valueMap['persistenceType']}" labels="#{pageSession.persistenceType}">
                        <!beforeCreate
                            createMap(result="#{pageSession.attrMap}");
                            mapPut(map="#{pageSession.attrMap}" key="type" value="web");
                            gf.restRequest(endpoint="#{sessionScope.REST_URL}/list-persistence-types.json" attrs="#{pageSession.attrMap}" method="GET" result="#{pageSession.result}");
                            setPageSessionAttribute(key="persistenceType" value="#{pageSession.result.data.extraProperties.types}");
                        />
                    </sun:dropDown>
                </sun:property>
                <sun:property id="PersistenceFrequencyProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_web.availability.persistenceFreq}" helpText="$resource{i18n_web.availability.persistenceFreqHelp}">
                    <sun:dropDown id="PersistenceFrequency" selected="#{pageSession.valueMap['persistenceFrequency']}" labels={"web-method"} />
                </sun:property>
                <sun:property id="PersistenceScopeProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_web.availability.persistenceScope}" helpText="$resource{i18n_web.availability.persistenceScopeHelp}">
                    <sun:dropDown id="PersistenceScope" selected="#{pageSession.valueMap['persistenceScope']}" labels={"session", "modified-session", "modified-attribute"} />
                </sun:property>
                <sun:property id="SingleSignOnProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_web.availability.singleSignOn}" helpText="$resource{i18n_web.availability.singleSignOnHelp}">
                    <sun:checkbox  selected="#{pageSession.valueMap['ssoFailoverEnabled']}" selectedValue="true" />
                </sun:property>
                "<br /><br />
            </sun:propertySheetSection>
        </sun:propertySheet>
#include "/common/shared/propertyDescTable.inc"
    <sun:title id="propertyContentPage2">
#include "/common/shared/editPageButtons_2.inc"
    </sun:title>
        <sun:hidden id="helpKey" value="$resource{help_web.webContainerAvailability}" />
    </sun:form>
#include "/common/shared/changeButtonsJS.inc"
</define>
</composition>
