<!--

    Copyright (c) 2010, 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="i18nc" bundle="org.glassfish.common.admingui.Strings")
    setResourceBundle(key="help_cluster" bundle="org.glassfish.cluster.admingui.Helplinks");
/>
<!composition template="/templates/default.layout"  guiTitle="$resource{i18nc.recoverTransactionsTitle}"
    guiOnLoad="showTxnLogDir('#{pageSession.target}', '#{pageSession.instanceName}', '#{pageSession.logDirId}');"
>
#include "/common/shared/commonHandlers.inc"
<!define name="content">
    <event>
    <!beforeCreate
        getRequestValue(key="instanceName" value="#{pageSession.instanceName}");
        getRequestValue(key="isStopped" value="#{pageSession.isStopped}");
        urlencode(value="#{pageSession.instanceName}" encoding="UTF-8" result="#{pageSession.encodedInstanceName}");
        setPageSessionAttribute(key="selfPage" value="#{request.contextPath}/cluster/standalone/standaloneRecoverTransactions.jsf?&instanceName=#{pageSession.encodedInstanceName}&isStopped=#{pageSession.isStopped}");
        setPageSessionAttribute(key="parentPage" value="#{request.contextPath}/cluster/standalone/standaloneInstanceGeneral.jsf?instanceName=#{pageSession.encodedInstanceName}");
        setPageSessionAttribute(key="resourceUrl", value="#{sessionScope.REST_URL}/servers/server/#{pageSession.encodedInstanceName}");
        gfr.getListOfRunningInstances();
        setPageSessionAttribute(key="helpKey" value="$resource{help_cluster.standaloneInstanceRecoverTransactions}")
        setPageSessionAttribute(key="target" value="#{pageSession.instanceName}");
        setPageSessionAttribute(key="useSelf" value="#{!pageSession.isStopped}");
        gf.isInstanceName(instanceName="#{pageSession.instanceName}");
    />
    </event>

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

</define>
</composition>
