package com.l7tech.server.policy.assertion.xmlsec;

import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.IdentityTargetable;
import com.l7tech.policy.assertion.MessageTargetable;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.policy.assertion.xmlsec.SecurityHeaderAddressable;
import com.l7tech.security.xml.decorator.DecorationRequirements;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.policy.assertion.AbstractMessageTargetableServerAssertion;

public abstract class ServerAddWssEncryption<AT extends Assertion & MessageTargetable & SecurityHeaderAddressable & IdentityTargetable>
   extends AbstractMessageTargetableServerAssertion<AT> {
   protected final AddWssEncryptionSupport addWssEncryptionSupport;

   public ServerAddWssEncryption(AT var1) {
      super((AT)var1);
      this.addWssEncryptionSupport = new AddWssEncryptionSupport(
         this.getAuditHaver(), this.logger, (MessageTargetable)var1, (SecurityHeaderAddressable)var1, (IdentityTargetable)var1
      );
   }

   protected AddWssEncryptionContext buildEncryptionContext(PolicyEnforcementContext var1) throws AddWssEncryptionSupport.MultipleTokensException, PolicyAssertionException {
      return this.addWssEncryptionSupport.buildEncryptionContext(var1);
   }

   protected void applyDecorationRequirements(PolicyEnforcementContext var1, DecorationRequirements var2, AddWssEncryptionContext var3) {
      this.addWssEncryptionSupport.applyDecorationRequirements(var1, var2, var3, this);
   }
}
