<!--

    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" });
    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>

