<!--

    Copyright (c) 1997, 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

-->

<!-- configuration/webContainerGeneral.jsf -->
<!initPage 
    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.headings.webGeneral}" >
<!define name="content">
<event>
    <!beforeCreate
        setSessionAttribute(key="webContainerTabs" value="general");
        getRequestValue(key="configName" value=>$page{configName} default="server-config");
        setPageSessionAttribute(key="childType" value="property");

        setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.configName}");
        setPageSessionAttribute(key="selfUrl", value="#{pageSession.parentUrl}/web-container");
        setPageSessionAttribute(key="rest-api" value="true");
        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/webContainerGeneral.jsf?configName=#{pageSession.configName}");
        
        //set the following for including buttons.inc
        setPageSessionAttribute(key="edit" value="#{true}" );
        setPageSessionAttribute(key="showDefaultButton" value="#{false}" );
        setPageSessionAttribute(key="showCancelButton" value="#{false}" );
        setPageSessionAttribute(key="hasPropertySheet" value="#{false}" );
        setPageSessionAttribute(key="hasPropertyTable" value="#{true}" );

    />
    </event>

            <sun:form id="form1">
#include "webContainerTabs.inc"
#include "/common/shared/alertMsg.inc"
<sun:title id="propertyContentPage" title="$resource{i18n_web.headings.webGeneral}">
#include "/common/shared/editPageButtons.inc"
</sun:title>

#include "/common/shared/configNameSection.inc"
#include "/common/shared/propertyDescTable.inc"
    	<sun:hidden id="helpKey" value="$resource{help_web.webContainerGeneral}" />
</sun:form>
            "<br/>
#include "/common/shared/changeButtonsJS.inc" 
    </define>
</composition>
