<!--

    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

-->

<!-- jca/connectorService.jsf -->
<!initPage
    setResourceBundle(key="i18njca" bundle="org.glassfish.jca.admingui.Strings");
    setResourceBundle(key="help_jca" bundle="org.glassfish.jca.admingui.Helplinks")
/>
<!composition template="/templates/default.layout"  guiTitle="$resource{i18njca.connectorService.editPageTitle}" >
<!define name="content">
<event>
    <!beforeCreate
    getRequestValue(key="configName" value=>$page{configName} default="server-config");
    setPageSessionAttribute(key="selfPage" value="#{request.contextPath}/jca/connectorService.jsf?configName=#{pageSession.configName}");
    setPageSessionAttribute(key="parentUrl", value="#{sessionScope.REST_URL}/configs/config/#{pageSession.configName}");
    setPageSessionAttribute(key="selfUrl", value="#{pageSession.parentUrl}/connector-service");
    setPageSessionAttribute(key="rest-api" value="true");
    gf.getEntityAttrs(endpoint="#{pageSession.selfUrl}.json", valueMap="#{pageSession.valueMap}");
    setPageSessionAttribute(key="childType" value="connector-service");
    //set the following for including buttons.inc
    setPageSessionAttribute(key="edit" value="#{true}" );
    setPageSessionAttribute(key="showCancelButton" value="#{false}" );
    setPageSessionAttribute(key="hasPropertySheet" value="#{true}" );
    setPageSessionAttribute(key="hasPropertyTable" value="#{false}" );
    />
</event>
<sun:form id="propertyForm">
#include "/common/shared/alertMsg_1.inc"
    
    <!-- Page Title -->
    <sun:title id="propertyContentPage" title="$resource{i18njca.connectorService.editPageTitle}" helpText="$resource{i18njca.connectorService.editPageTitleHelp}" >
#include "/common/shared/editPageButtons.inc"
    </sun:title>

<sun:propertySheet id="propertySheet" >
#include "/common/shared/configNameSection.inc"
    <sun:propertySheetSection id="propertSectionTextField">

        <sun:property id="timeout"   labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18njca.connectorService.shutdownTimeout}" helpText="$resource{i18njca.connectorService.shutdownTimeoutHelp}">
            <sun:textField id="tiimeout" styleClass="integer" text="#{pageSession.valueMap['shutdownTimeoutInSeconds']}" columns="$int{20}" maxLength="#{sessionScope.fieldLengths['maxLength.connectorService.shutdownTimeout']}" />
            <sun:staticText id="secs" style="padding: 8pt" text="$resource{i18n.common.Seconds}"/>
        </sun:property>

        <sun:property id="ClassLoadingPolicy"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18njca.connectorService.classLoadingPolicy}" helpText="$resource{i18njca.connectorService.classLoadingPolicyHelp}">
            <sun:dropDown id="ClassLoadingPolicy"  selected="#{pageSession.valueMap['classLoadingPolicy']}" labels={"derived", "global"} />
        </sun:property>

    </sun:propertySheetSection>
    </sun:propertySheet>   

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