<!--

    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

-->

<!-- deploymentRar.jsf -->
<!-- This is the default property sheet for specify app client deployment -->

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

     />
    <!afterCreate
        getClientId(component="$this{component}" clientId=>$page{rarId});
    />
    <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.rar['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.rar['enabled']}" selectedValue="true" >
        <!beforeCreate
            mapPut(map="#{pageSession.rar}", 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.rar['PROPERTY-implicitCdiEnabled']}" 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" label=" " selected="#{pageSession.rar['verify']}" selectedValue="true" />
</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.rar['force']}" 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.rar['deploymentOrder']}" />
</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.rar['description']}" />
</sun:property>

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