<!--

    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

-->

<!-- deploymentEjb.jsf -->
<!-- This is the default property sheet for specify EJB Jar deployment -->

<sun:propertySheet id="jar" visible="#{false}" >
    <!beforeCreate
        setAttribute(key="fieldMap" value="ejb");
        createMap(result="#{pageSession.ejb}")
        mapPut(map="#{pageSession.deployMap}", key="jar", value="#{pageSession.ejb}");
        mapPut(map="#{pageSession.ejb}", key="convertToFalseList", value={ "enabled", "availabilityEnabled", "PROPERTY-implicitCdiEnabled", "verify" ,"force" "keepState",  "PROPERTY-preserveAppScopedResources"} );
        mapPut(map="#{pageSession.ejb}", key="PROPERTY-implicitCdiEnabled", value="true");

     />
    <!afterCreate
        getClientId(component="$this{component}" clientId=>$page{ejbId});
    />
    <sun:propertySheetSection id="psection" >

<sun:property id="nameProp" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.deploy.ApplicationName}" visible="#{true}">
    <sun:textField id="appName" columns="$int{40}" maxLength="#{sessionScope.fieldLengths['maxLength.deploy.ApplicationName']}" text="#{pageSession.ejb['name']}" styleClass="required" required="#{true}"
        onChange="javascript: admingui.deploy.setAppName('#{appNameId}', this.value, window, '#{sessionScope.appTypeString}')">

        <!afterCreate
            getClientId(component="$this{component}" clientId=>$page{appNameId});
        />
    </sun:textField>
</sun:property>

<sun:property id="enableProp" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.deploy.status}"  helpText="$resource{i18n.deploy.statusHelp}">
	<sun:checkbox  selected="#{pageSession.ejb['enabled']}" selectedValue="true" >
        <!beforeCreate
            mapPut(map="#{pageSession.ejb}", key="enabled", value="true" );
        />
    </sun:checkbox>
</sun:property>

<sun:property id="implicitCdi" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.deploy.implicitCdi}" helpText="$resource{i18n.deploy.implicitCdiHelp}">
    <sun:checkbox id="implicitCdi"  selected="#{pageSession.ejb['PROPERTY-implicitCdiEnabled']}" selectedValue="true" />
</sun:property>

<sun:property id="availability"  rendered="#{!pageSession.onlyDASExist}"  labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.deploy.availability}" helpText="$resource{i18n.deploy.availabilityHelp}">
    <sun:checkbox id="availability"  selected="#{pageSession.ejb['availabilityEnabled']}" selectedValue="true" />
</sun:property>

<sun:property id="v2" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.deploy.run}" helpText="$resource{i18n.deploy.runHelp}">
        <sun:checkbox id="ver2"  selected="#{pageSession.ejb['verify']}" selectedValue="true" />
</sun:property>

<sun:property id="compatibility" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.deploy.compatibility}" helpText="$resource{i18n.deploy.compatibilityHelp}">
        <sun:checkbox id="compatibility" label=" " selected="#{pageSession.ejb['PROPERTY-compatibility']}" selectedValue="v2" />
</sun:property>

<sun:property id="force" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.deploy.forceRedeploy}" helpText="$resource{i18n.deploy.forceRedeployHelp}">
        <sun:checkbox id="force"  label=" " selected="#{pageSession.ejb['force']}" selectedValue="true" />
</sun:property>

<sun:property id="keepState" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.redeploy.keepState}" helpText="$resource{i18n.redeploy.keepStateHelp}">
        <sun:checkbox id="keepState" label=" " selected="#{pageSession.ejb['keepState']}" selectedValue="true" />
</sun:property>

<sun:property id="deploymentOrder" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.deploy.deploymentOrder}" helpText="$resource{i18n.deploy.deploymentOrderHelp}" >
	<sun:textField id="deploymentOrder" styleClass="integer" columns="$int{40}" maxLength="#{sessionScope.fieldLengths['maxLength.deploy.deploymentOrder']}" text="#{pageSession.ejb['deploymentOrder']}" />
</sun:property>

<sun:property id="librariesProp" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.common.Libraries}" helpText="$resource{i18n.deploy.libraryHelp}" >
	<sun:textField id="library" columns="$int{40}" maxLength="#{sessionScope.fieldLengths['maxLength.common.Libraries']}" text="#{pageSession.ejb['libraries']}" />
</sun:property>


<sun:property id="descriptionProp" labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18n.common.description}" helpText="$resource{i18n.deploy.descHelp}" >
	<sun:textField id="description" columns="$int{40}" maxLength="#{sessionScope.fieldLengths['maxLength.common.description']}" text="#{pageSession.ejb['description']}" />
</sun:property>

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