<!--

    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/managedScheduledExecutorServiceEdit.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.managedScheduledExecutorService.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/managedScheduledExecutorServiceEdit.jsf?name=#{pageSession.encodedName}");
    setPageSessionAttribute(key="parentPage" value="#{request.contextPath}/concurrent/managedScheduledExecutorServices.jsf");
    setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/resources");
    setPageSessionAttribute(key="childType" value="managed-scheduled-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="#{false}");
    setPageSessionAttribute(key="showTaskQueue" value="#{false}");
    setPageSessionAttribute(key="listCommand" value="list-managed-scheduled-executor-services");
    setPageSessionAttribute(key="logicalJndiMapKey" value="managedScheduledExecutorServices");

    />
</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.managedScheduledExecutorService.editPageTitle}" helpText="$resource{i18ncon.managedScheduledExecutorService.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.managedScheduledExecutorServiceEdit}" />
</sun:form>
            "<br/>
//#include "/common/shared/changeButtonsJS.inc"
</define>
</composition>

