<!--

    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

-->

<!initPage
    setResourceBundle(key="i18nf" bundle="org.glassfish.full.admingui.Strings");
    setResourceBundle(key="i18nc" bundle="org.glassfish.common.admingui.Strings");
	setResourceBundle(key="help_full" bundle="org.glassfish.full.admingui.Helplinks");
/>
<!composition template="/templates/default.layout"  guiTitle="$resource{i18nf.batch.jobStepListingTitle}"  >

<!define name="content">
    <event>
    <!beforeCreate
#include "/full/batch/batchRequestParam.inc"
        getRequestValue(key="executionId" value="#{pageSession.executionId}");
        setSessionAttribute(key="batchExecutionTabs" value="steps");
        createMap(result="#{requestScope.attrsMap}");
        mapPut(map="#{requestScope.attrsMap}" key="target" value="#{pageSession.encodedTarget}");
        mapPut(map="#{requestScope.attrsMap}"  key="long" value="true");
        mapPut(map="#{requestScope.attrsMap}"  key="executionId" value="#{pageSession.executionId}");
        gf.restRequest(endpoint="#{sessionScope.REST_URL}/list-batch-job-steps" attrs="#{requestScope.attrsMap}" method="GET" result="#{requestScope.resp}");
        setAttribute(key="listOfRows", value="#{requestScope.resp.data.extraProperties.listBatchJobSteps}");

        gf.restRequest(endpoint="#{sessionScope.REST_URL}/list-batch-job-executions" attrs="#{requestScope.attrsMap}" method="GET" result="#{requestScope.exec}");
        setPageSessionAttribute(key="jobName", value="#{requestScope.exec.data.extraProperties.listBatchJobExecutions[0].jobName}");

        setPageSessionAttribute(key="tableTitle" value="$resource{i18nf.batch.jobStepListingTableTitle}");
    />
    </event>
<sun:form id="propertyForm">
#include "/full/batch/batchExecutionTabs.inc"
#include "/common/shared/alertMsg_1.inc"

    <sun:title id="propertyContentPage" title="$resource{i18nf.batch.jobStepListingTitle}" helpText="$resource{i18nf.batch.jobStepListingTitleHelp}" >
    <!facet pageButtonsTop>
        <sun:panelGroup id="topButtons">
            <sun:button id="cancelButton" immediate="#{true}" primary="#{false}"  text="$resource{i18n.button.Back}" >
                <!command
                    gf.redirect(page="#{pageSession.listJobsLink}");
                />
            </sun:button>
        </sun:panelGroup>
    </facet>
    </sun:title>
#include "/common/shared/nameSection.inc"
            <sun:propertySheetSection >
                <sun:property id="jobName"   labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18nf.batch.jobName}">
                    <sun:staticText id="jobName" value="#{pageSession.jobName}" />
                </sun:property>
                <sun:property id="executionId"   labelAlign="left" noWrap="#{true}" overlapLabel="#{false}" label="$resource{i18nf.batch.executionId}">
                    <sun:staticText id="executionId" text="#{pageSession.executionId}" />
                </sun:property>
            </sun:propertySheetSection >
            "<br>

    <sun:table id="configs" title="#{tableTitle}"
        deselectMultipleButton="$boolean{false}"
        selectMultipleButton="$boolean{false}"
        paginationControls="$boolean{true}"
        paginateButton="$boolean{true}"
    >
        <!afterCreate
            getClientId(component="$this{component}" clientId=>$page{tableId});
        />

       <sun:tableRowGroup id="rowGroup1"  rows="10" data={"$attribute{listOfRows}"} sourceVar="td">
         <!afterCreate
             getClientId(component="$this{component}" clientId=>$page{tableRowGroupId});
            />

        <sun:tableColumn headerText="$resource{i18nf.batch.stepNameCol}"  sort="stepName"  rowHeader="$boolean{true}" id="stepName">
            <staticText id="stepName" value="#{td.value.stepName}" />
        </sun:tableColumn>

        <sun:tableColumn headerText="$resource{i18nf.batch.batchStatusCol}"  sort="batchStatus"  rowHeader="$boolean{false}" id="batchStatus">
            <staticText id="max" value="#{td.value.batchStatus}" />
        </sun:tableColumn>

        <sun:tableColumn headerText="$resource{i18nf.batch.exitStatusCol}"  sort="exitStatus"  rowHeader="$boolean{false}" id="exitStatus">
            <staticText id="max" value="#{td.value.exitStatus}" />
        </sun:tableColumn>

        <sun:tableColumn headerText="$resource{i18nf.batch.startTimeCol}"  sort="startTime"  rowHeader="$boolean{false}" id="startTime">
            <staticText id="st" value="#{requestScope.st}" >
            <!beforeEncode
                gf.convertDateTime(dateTime="#{td.value.startTime}"  result="#{requestScope.st}");
            />
            </staticText>
        </sun:tableColumn>

        <sun:tableColumn headerText="$resource{i18nf.batch.endTimeCol}"  sort="endTime"  rowHeader="$boolean{false}" id="endTime">
            <staticText id="endTime" value="#{requestScope.endTime}" >
                <!beforeEncode
                    gf.convertDateTime(dateTime="#{td.value.endTime}"  result="#{requestScope.endTime}");
                />
            </staticText>
        </sun:tableColumn>

       <sun:tableColumn  headerText="$resource{i18nf.batch.stepMetricsCol}" rowHeader="$boolean{false}" id="stepM">
           <event>
               <!beforeEncode
                   gf.convertMapToListOfMap(map="#{td.value.stepMetrics}"  keyName="key" valueName="value" result="#{requestScope.listOfStepMetrics}");
               />
           </event>
           "<table  border="1">
           <foreach key="oneM" list="#{requestScope.listOfStepMetrics}">
               "<tr>
               "<th scope="row" >
                <staticText id="key" value="#{requestScope.oneM.key}" />
               "</th> <td>
                <staticText id="value" value="#{requestScope.oneM.value}" />
               "</td>
               "</tr>
           </foreach>
           "</table>
       </sun:tableColumn>
      </sun:tableRowGroup>
    </sun:table>
 "<br/>
    <sun:hidden id="helpKey" value="$resource{help_full.jobStepListing}" />
</sun:form>
</define>
</composition>
