<!--

    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

-->

<!-- configuration/ejbContainerTimerSettings.jsf -->



<!initPage
    setResourceBundle(key="i18n_ejb" bundle="org.glassfish.ejb.admingui.Strings");
    setResourceBundle(key="help_ejb" bundle="org.glassfish.ejb.admingui.Helplinks");
    setResourceBundle(key="i18n_ejbLite" bundle="org.glassfish.ejb-lite.admingui.Strings");
/>
<!composition template="/templates/default.layout"  guiTitle="$resource{i18n_ejb.headings.ejbTimerSettings}" >
<!define name="content">
<event>
    <!beforeCreate
        setSessionAttribute(key="ejbContainerTabs" value="ejbTimerTab");
        getRequestValue(key="configName" value=>$page{configName} default="server-config");
        setPageSessionAttribute(key="childType" value="ejb-timer-service");
        setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.configName}/ejb-container");
        setPageSessionAttribute(key="selfUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.configName}/ejb-container/ejb-timer-service");
        setPageSessionAttribute(key="rest-api" value="true");
        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}/ejb/configuration/ejbContainerTimerService.jsf?configName=#{pageSession.configName}");
        //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="form1">
#include "/ejb-lite/configuration/ejbContainerTabs.inc"
#include "/common/shared/alertMsg.inc"
<sun:title id="propertyContentPage" title="$resource{i18n_ejb.headings.ejbTimerSettings}" helpText="$resource{i18n_ejb.ejb.ejbTimerSettingsInfo}" >
#include "/common/shared/editPageButtons.inc"
</sun:title>

     <!-- PropertySheet .... -->
     <sun:propertySheet id="propertySheet">
#include "/common/shared/configNameSection.inc"
         <!-- Text Field section -->
         <sun:propertySheetSection id="propertySectionTextField">
            <sun:property id="MinDeliveryProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_ejb.ejbTimerSettings.minDeliveryLabel}" helpText="$resource{i18n_ejb.ejbTimerSettings.minDeliveryHelp}">
                <sun:textField id="MinDelivery" styleClass="integer"  columns="$int{20}" maxLength="#{sessionScope.fieldLengths['maxLength.ejbTimerSettings.minDelivery']}" text="#{pageSession.valueMap['minimumDeliveryIntervalInMillis']}" />
                <sun:staticText id="msecs" style="padding: 8pt" text="$resource{i18n.common.Milliseconds}"/>
            </sun:property>
            <sun:property id="MaxRedeliveryProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_ejb.ejbTimerSettings.maxRedeliveryLabel}" helpText="$resource{i18n_ejb.ejbTimerSettings.maxRedeliveryHelp}">
                <sun:textField id="MaxRedelivery" styleClass="integer"  columns="$int{20}" maxLength="#{sessionScope.fieldLengths['maxLength.ejbTimerSettings.maxRedelivery']}" text="#{pageSession.valueMap['maxRedeliveries']}" />
            </sun:property>
            <sun:property id="RedeliveryIntrProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_ejb.ejbTimerSettings.redeliveryIntrLabel}" helpText="$resource{i18n_ejb.ejbTimerSettings.redeliveryIntrHelp}">
                <sun:textField id="RedeliveryIntr" styleClass="integer"  columns="$int{20}" maxLength="#{sessionScope.fieldLengths['maxLength.ejbTimerSettings.redeliveryIntr']}" text="#{pageSession.valueMap['redeliveryIntervalInternalInMillis']}" />
                <sun:staticText id="msecs" style="padding: 8pt" text="$resource{i18n.common.Milliseconds}"/>
            </sun:property>
            <sun:property id="TimerDatasourceProp"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n_ejb.ejbTimerSettings.timerDatasourceLabel}" helpText="$resource{i18n_ejb.ejbTimerSettings.timerDatasourceLabelHelp}">
                <sun:textField id="TimerDatasource"  columns="$int{50}" maxLength="#{sessionScope.fieldLengths['maxLength.ejbTimerSettings.timerDatasource']}" text="#{pageSession.valueMap['timerDatasource']}" />
            </sun:property>
         </sun:propertySheetSection>
     </sun:propertySheet>

#include "/common/shared/propertyDescTable.inc"

	<sun:hidden id="helpKey" value="$resource{help_ejb.ejbContainerTimerService}" />
    </sun:form>
    "<br/>
</define>
</composition>
