<!--

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

-->

<!-- concurrent/managedExecutorServiceEdit.jsf -->
<!initPage
    setResourceBundle(key="i18ncon" bundle="org.glassfish.concurrent.admingui.Strings");
    setResourceBundle(key="help_con" bundle="org.glassfish.concurrent.admingui.Helplinks")
/>
<!composition template="/templates/default.layout"  guiTitle="$resource{i18ncon.managedExecutorService.editPageTitle}" >
<!define name="content">
<event>
    <!beforeCreate
    getRequestValue(key="name" value="#{pageSession.Name}");
    urlencode(value="#{pageSession.Name}" encoding="UTF-8" result="#{pageSession.encodedName}");
    setPageSessionAttribute(key="selfPage" value="#{request.contextPath}/concurrent/managedExecutorServiceEdit.jsf?name=#{pageSession.encodedName}");
    setPageSessionAttribute(key="parentPage" value="#{request.contextPath}/concurrent/managedExecutorServices.jsf");
    setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/resources");
    setPageSessionAttribute(key="childType" value="managed-executor-service");
    setPageSessionAttribute(key="isConcurrent" value="true");
    //For resourceEditTabs.inc
    setSessionAttribute(key="resEditTabs" value="general");
    setPageSessionAttribute(key="generalPage" value="#{pageSession.selfPage}");
    setPageSessionAttribute(key="targetPage" value="#{request.contextPath}/common/resourceNode/resourceEditTargets.jsf?name=#{pageSession.encodedName}");

    gf.buildResourceUrl(base="#{pageSession.parentUrl}/#{pageSession.childType}", resourceName="#{pageSession.Name}", url="#{pageSession.selfUrl}");
    gf.getEntityAttrs(endpoint="#{pageSession.selfUrl}", valueMap="#{pageSession.valueMap}");
    setPageSessionAttribute(key="convertToFalseList" value={"enabled", "contextInfoEnabled", "longRunningTasks", "hungLoggerPrintOnce" });
    setPageSessionAttribute(key="skipAttrsList", value={"jndiName"});
    
    gf.restRequest(endpoint="#{pageSession.selfUrl}/property" method="GET" result="#{requestScope.propTable}");
    setPageSessionAttribute(key="tableList" value="#{requestScope.propTable.data.extraProperties.properties}");
    setPageSessionAttribute(key="edit" value="#{true}" );

    setPageSessionAttribute(key="convertToFalseList2" value={"enabled"});
    setPageSessionAttribute(key="showMaxPoolSize" value="#{true}");
    setPageSessionAttribute(key="showTaskQueue" value="#{true}");
    setPageSessionAttribute(key="listCommand" value="list-managed-executor-services");
    setPageSessionAttribute(key="logicalJndiMapKey" value="managedExecutorServices");


    />
</event>
<sun:form id="propertyForm">
#include "/common/resourceNode/resourceEditTabs.inc"
#include "/common/shared/alertMsg_1.inc"
    
    <!-- Page Title -->
    <sun:title id="propertyContentPage" title="$resource{i18ncon.managedExecutorService.editPageTitle}" helpText="$resource{i18ncon.managedExecutorService.editPageTitleHelp}" >        
#include "/common/resourceNode/resourceEditPageButtons.inc"
    </sun:title>
#include "/concurrent/managedExecutorServiceAttr.inc"
#include "/common/shared/propertyDescTable.inc"
    
    <sun:hidden id="helpKey" value="$resource{help_con.managedExecutorServiceEdit}" />
</sun:form>
            "<br/>
//#include "/common/shared/changeButtonsJS.inc"
</define>
</composition>

