/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.policy.assertion.AssertionStatus
 *  com.l7tech.policy.assertion.PolicyAssertionException
 *  org.springframework.transaction.TransactionStatus
 *  org.springframework.transaction.support.TransactionCallback
 */
package com.l7tech.server.audit;

import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.server.audit.AuditPolicyEvaluator;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.policy.ServerPolicyHandle;
import java.io.IOException;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;

class ac
implements TransactionCallback<AssertionStatus> {
    final ServerPolicyHandle val$sph;
    final PolicyEnforcementContext val$context;

    /*
     * Ignored method signature, as it can't be verified against descriptor
     */
    ac(AuditPolicyEvaluator auditPolicyEvaluator, ServerPolicyHandle serverPolicyHandle, PolicyEnforcementContext policyEnforcementContext) {
        this.val$sph = serverPolicyHandle;
        this.val$context = policyEnforcementContext;
    }

    public AssertionStatus doInTransaction(TransactionStatus transactionStatus) {
        try {
            AssertionStatus assertionStatus = this.val$sph.checkRequest(this.val$context);
            try {
                if (assertionStatus != AssertionStatus.NONE) {
                    transactionStatus.setRollbackOnly();
                }
            }
            catch (PolicyAssertionException policyAssertionException) {
                throw ac.a(policyAssertionException);
            }
            return assertionStatus;
        }
        catch (PolicyAssertionException policyAssertionException) {
            transactionStatus.setRollbackOnly();
        }
        catch (IOException iOException) {
            transactionStatus.setRollbackOnly();
        }
        return AssertionStatus.FAILED;
    }

    private static PolicyAssertionException a(PolicyAssertionException policyAssertionException) {
        return policyAssertionException;
    }
}

