/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.gateway.common.LicenseException
 *  com.l7tech.policy.assertion.AssertionStatus
 *  com.l7tech.policy.assertion.PolicyAssertionException
 *  com.l7tech.policy.assertion.composite.ExactlyOneAssertion
 *  org.springframework.beans.factory.BeanFactory
 *  org.springframework.context.ApplicationContext
 */
package com.l7tech.server.policy.assertion.composite;

import com.l7tech.gateway.common.LicenseException;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.policy.assertion.composite.ExactlyOneAssertion;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.policy.assertion.composite.ServerCompositeAssertion;
import com.l7tech.server.policy.assertion.composite.b;
import java.io.IOException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;

public final class ServerExactlyOneAssertion
extends ServerCompositeAssertion<ExactlyOneAssertion> {
    public ServerExactlyOneAssertion(ExactlyOneAssertion exactlyOneAssertion, ApplicationContext applicationContext) throws PolicyAssertionException, LicenseException {
        super(exactlyOneAssertion, (BeanFactory)applicationContext);
    }

    @Override
    public AssertionStatus checkRequest(PolicyEnforcementContext policyEnforcementContext) throws IOException, PolicyAssertionException {
        AssertionStatus assertionStatus;
        int[] nArray = new int[]{0};
        AssertionStatus assertionStatus2 = this.iterateChildren(policyEnforcementContext, new b(this, nArray));
        try {
            assertionStatus = nArray[0] == 1 ? AssertionStatus.NONE : AssertionStatus.FALSIFIED;
        }
        catch (IOException iOException) {
            throw ServerExactlyOneAssertion.a(iOException);
        }
        assertionStatus2 = assertionStatus;
        try {
            if (assertionStatus2 != AssertionStatus.NONE) {
                this.rollbackDeferredAssertions(policyEnforcementContext);
            }
        }
        catch (IOException iOException) {
            throw ServerExactlyOneAssertion.a(iOException);
        }
        return assertionStatus2;
    }

    private static IOException a(IOException iOException) {
        return iOException;
    }
}

