package com.l7tech.policy.assertion.xmlsec;

import com.l7tech.policy.assertion.MessageTargetable;
import com.l7tech.policy.assertion.MessageTargetableSupport;
import com.l7tech.policy.assertion.TargetMessageType;
import com.l7tech.policy.assertion.UsesVariables;
import com.l7tech.policy.assertion.VariableUseSupport;
import com.l7tech.policy.assertion.XpathBasedAssertion;
import com.l7tech.policy.assertion.annotation.RequiresSOAP;
import com.l7tech.policy.variable.VariableMetadata;

@RequiresSOAP(wss = true)
public abstract class XmlSecurityAssertionBase extends XpathBasedAssertion implements MessageTargetable, UsesVariables, SecurityHeaderAddressable {
   private XmlSecurityRecipientContext recipientContext = XmlSecurityRecipientContext.getLocalRecipient();
   private MessageTargetableSupport messageTargetableSupport;
   static final long serialVersionUID = 2906103610228224648L;

   @Override
   public TargetMessageType getTarget() {
      return this.messageTargetableSupport.getTarget();
   }

   @Override
   public void setTarget(TargetMessageType var1) {
      this.messageTargetableSupport.setTarget(var1);
   }

   @Override
   public String getOtherTargetMessageVariable() {
      return this.messageTargetableSupport.getOtherTargetMessageVariable();
   }

   @Override
   public void setOtherTargetMessageVariable(String var1) {
      this.messageTargetableSupport.setOtherTargetMessageVariable(var1);
   }

   @Override
   public String getTargetName() {
      return this.messageTargetableSupport.getTargetName();
   }

   public void setTargetMessage(MessageTargetableSupport var1) {
      if (var1 != null) {
         this.messageTargetableSupport.setTargetMessage(var1);
      } else {
         this.messageTargetableSupport.setTargetMessage(new MessageTargetableSupport(TargetMessageType.REQUEST));
      }
   }

   @Override
   public XmlSecurityRecipientContext getRecipientContext() {
      return this.recipientContext;
   }

   @Override
   public void setRecipientContext(XmlSecurityRecipientContext var1) {
      this.recipientContext = var1 != null ? var1 : XmlSecurityRecipientContext.getLocalRecipient();
   }

   @Override
   public boolean isTargetModifiedByGateway() {
      return this.messageTargetableSupport.isTargetModifiedByGateway();
   }

   @Override
   public final VariableMetadata[] getVariablesSet() {
      return this.doGetVariablesSet().asArray();
   }

   public XmlSecurityAssertionBase clone() {
      XmlSecurityAssertionBase var1 = (XmlSecurityAssertionBase)super.clone();
      var1.messageTargetableSupport = new MessageTargetableSupport(this.messageTargetableSupport);
      return var1;
   }

   protected XmlSecurityAssertionBase(TargetMessageType var1) {
      this.messageTargetableSupport = new MessageTargetableSupport(var1);
   }

   protected XmlSecurityAssertionBase(TargetMessageType var1, boolean var2) {
      this.messageTargetableSupport = new MessageTargetableSupport(var1, var2);
   }

   @Override
   protected XpathBasedAssertion.VariablesUsed doGetVariablesUsed() {
      return super.doGetVariablesUsed().with(this.messageTargetableSupport.getMessageTargetVariablesUsed());
   }

   protected XmlSecurityAssertionBase.VariablesSet doGetVariablesSet() {
      return new XmlSecurityAssertionBase.VariablesSet().with(this.messageTargetableSupport.getMessageTargetVariablesSet());
   }

   protected final class VariablesSet extends VariableUseSupport.VariablesSetSupport<XmlSecurityAssertionBase.VariablesSet> {
      private VariablesSet() {
      }

      protected XmlSecurityAssertionBase.VariablesSet get() {
         return this;
      }
   }
}
