package com.l7tech.policy.assertion;

import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.ExternalEntityHeader;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.JmsEndpointHeader;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.policy.JmsDynamicProperties;
import com.l7tech.policy.variable.VariableMetadata;
import com.l7tech.policy.wsp.Java5EnumTypeMapping;
import com.l7tech.policy.wsp.SimpleTypeMappingFinder;
import com.l7tech.search.Dependency;
import com.l7tech.util.GoidUpgradeMapper;
import java.util.Arrays;

public class JmsRoutingAssertion extends RoutingAssertionWithSamlSV implements UsesEntities, UsesVariables, SetsVariables {
   private static final String META_INITIALIZED;
   private Goid endpointGoid = null;
   private String endpointName = null;
   private JmsMessagePropertyRuleSet requestJmsMessagePropertyRuleSet;
   private JmsMessagePropertyRuleSet responseJmsMessagePropertyRuleSet;
   private JmsDynamicProperties dynamicJmsRoutingProperties;
   private MessageTargetableSupport requestTarget = new MessageTargetableSupport(TargetMessageType.REQUEST, false);
   private MessageTargetableSupport responseTarget = new MessageTargetableSupport(TargetMessageType.RESPONSE, true);
   private JmsDeliveryMode requestDeliveryMode;
   private String requestPriority;
   private String requestTimeToLive;
   private String responseTimeout = null;
   private String responseSize = null;
   static final long serialVersionUID = -1432171823780187874L;
   private static final String[] b;

   public Goid getEndpointOid() {
      return this.endpointGoid;
   }

   public void setEndpointOid(Goid var1) {
      this.endpointGoid = var1;
   }

   @Deprecated
   public void setEndpointOid(Long var1) {
      this.endpointGoid = GoidUpgradeMapper.mapOid(EntityType.JMS_ENDPOINT, var1);
   }

   public String getEndpointName() {
      return this.endpointName;
   }

   public void setEndpointName(String var1) {
      this.endpointName = var1;
   }

   public String getResponseTimeout() {
      return this.responseTimeout;
   }

   public void setResponseTimeout(String var1) {
      this.responseTimeout = var1;
   }

   @Deprecated
   public void setResponseTimeout(int var1) {
      this.responseTimeout = Integer.toString(var1);
   }

   public JmsMessagePropertyRuleSet getRequestJmsMessagePropertyRuleSet() {
      return this.requestJmsMessagePropertyRuleSet;
   }

   public void setRequestJmsMessagePropertyRuleSet(JmsMessagePropertyRuleSet var1) {
      this.requestJmsMessagePropertyRuleSet = var1;
   }

   public JmsMessagePropertyRuleSet getResponseJmsMessagePropertyRuleSet() {
      return this.responseJmsMessagePropertyRuleSet;
   }

   public void setResponseJmsMessagePropertyRuleSet(JmsMessagePropertyRuleSet var1) {
      this.responseJmsMessagePropertyRuleSet = var1;
   }

   public MessageTargetableSupport getRequestTarget() {
      return this.requestTarget;
   }

   public void setRequestTarget(MessageTargetableSupport var1) {
      this.requestTarget = var1;
   }

   public MessageTargetableSupport getResponseTarget() {
      return this.responseTarget;
   }

   public void setResponseTarget(MessageTargetableSupport var1) {
      this.responseTarget = var1;
   }

   public JmsDeliveryMode getRequestDeliveryMode() {
      return this.requestDeliveryMode;
   }

   public void setRequestDeliveryMode(JmsDeliveryMode var1) {
      this.requestDeliveryMode = var1;
   }

   public String getRequestPriority() {
      return this.requestPriority;
   }

   public void setRequestPriority(String var1) {
      this.requestPriority = var1;
   }

   public String getRequestTimeToLive() {
      return this.requestTimeToLive;
   }

   public void setRequestTimeToLive(String var1) {
      this.requestTimeToLive = var1;
   }

   public String getResponseSize() {
      return this.responseSize;
   }

   public void setResponseSize(String var1) {
      this.responseSize = var1;
   }

   @Override
   public boolean initializesRequest() {
      return this.responseTarget != null && TargetMessageType.REQUEST == this.responseTarget.getTarget();
   }

   @Override
   public boolean needsInitializedRequest() {
      return this.requestTarget == null || TargetMessageType.REQUEST == this.requestTarget.getTarget();
   }

   @Override
   public boolean initializesResponse() {
      return this.responseTarget != null && TargetMessageType.RESPONSE == this.responseTarget.getTarget();
   }

   @Override
   public boolean needsInitializedResponse() {
      return this.requestTarget != null && TargetMessageType.RESPONSE == this.requestTarget.getTarget();
   }

   @Migration(mapName = MigrationMappingSelection.REQUIRED, resolver = PropertyResolver.Type.ASSERTION)
   @Override
   public EntityHeader[] getEntitiesUsed() {
      return this.endpointGoid != null
         ? new JmsEndpointHeader[]{new JmsEndpointHeader(this.endpointGoid.toString(), this.endpointName, null, -1, false)}
         : new JmsEndpointHeader[0];
   }

   @Override
   public void replaceEntity(EntityHeader var1, EntityHeader var2) {
      if (var1.getType().equals(EntityType.JMS_ENDPOINT)
         && this.endpointGoid != null
         && var1.getGoid().equals(this.endpointGoid)
         && var2.getType().equals(EntityType.JMS_ENDPOINT)) {
         this.endpointGoid = var2.getGoid();
         this.endpointName = var2.getName();
      }
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = this.defaultMeta();
      if (Boolean.TRUE.equals(var1.get(META_INITIALIZED))) {
         return var1;
      }

      String[] var2 = b;
      var1.put(var2[4], new String[]{var2[6]});
      var1.put(var2[0], var2[14]);
      var1.put(var2[1], var2[8]);
      var1.put(var2[9], var2[11]);
      var1.put(var2[7], var2[12]);
      var1.put(var2[10], var2[2]);
      var1.put(var2[5], new SimpleTypeMappingFinder(Arrays.asList(new Java5EnumTypeMapping(JmsDeliveryMode.class, var2[13]))));
      var1.put(META_INITIALIZED, Boolean.TRUE);
      return var1;
   }

   @Migration(
      mapName = MigrationMappingSelection.NONE,
      mapValue = MigrationMappingSelection.REQUIRED,
      export = false,
      valueType = ExternalEntityHeader.ValueType.TEXT_ARRAY,
      resolver = PropertyResolver.Type.SERVER_VARIABLE
   )
   @Override
   public String[] getVariablesUsed() {
      return this.requestTarget
         .getMessageTargetVariablesUsed()
         .withExpressions(this.dynamicJmsRoutingProperties != null ? this.dynamicJmsRoutingProperties.getVariableExpressions() : null)
         .withExpressions(this.requestPriority, this.requestTimeToLive, this.responseTimeout, this.responseSize)
         .asArray();
   }

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

   @Override
   public Object clone() {
      JmsRoutingAssertion var1 = (JmsRoutingAssertion)super.clone();
      var1.requestTarget = new MessageTargetableSupport(this.requestTarget);
      var1.responseTarget = new MessageTargetableSupport(this.responseTarget);
      return var1;
   }

   @Dependency(searchObject = true)
   public JmsDynamicProperties getDynamicJmsRoutingProperties() {
      return this.dynamicJmsRoutingProperties;
   }

   public void setDynamicJmsRoutingProperties(JmsDynamicProperties var1) {
      this.dynamicJmsRoutingProperties = var1;
   }

   static {
      String[] var5 = new String[15];
      int var3 = 0;
      String var2 = ">_D9]D\u001b R\u000b)RX([c\n9^D%\u0016\u0007zxk{e\u000f9^E,\tZ\b\"GN9]c\u001f>\u0014cZN?Hn\u001b9Vb%@~\u0013,[B1Ln\u000e=VG.]~\u001f\u000bXG/Lx\t\u0010:D[\u0018\\h\u000e4GN\r@d\u001e(E\u0007?X^?@d\u001d\u0019=ED;Lx\u000e$RX\nJ~\u0013\"Yh'Hy\t#VF.E\u0019_Nk@d\u0019\"ZB%N*\u0017(DX*NoZ:^G'\th\u001fmED>]o\u001emAB*\t@7\u001e\u0017_$\t~\u0012(\u0017[9F~\u001f.CN/\ty\u001f?AB(L$\u000f=VG.]~\u001f\u0003XO.`i\u0015#\u0014=ED;Lx\u000e$RX\nJ~\u0013\"Ye*Do).XFdE=\u000e(TCdJe\u0014>XG.\u0006x\u001f>X^9Jo\tbDN9_o\b|\u0001\u0005,@l=.XFeE=\u000e(TCeJe\u0014>XG.\u0007k\u00199^D%\u0007@\u0017>eD>]c\u0014*vX8Lx\u000e$XE\u001b[e\n(E_\"Ly;.CB$G";
      int var4 = ">_D9]D\u001b R\u000b)RX([c\n9^D%\u0016\u0007zxk{e\u000f9^E,\tZ\b\"GN9]c\u001f>\u0014cZN?Hn\u001b9Vb%@~\u0013,[B1Ln\u000e=VG.]~\u001f\u000bXG/Lx\t\u0010:D[\u0018\\h\u000e4GN\r@d\u001e(E\u0007?X^?@d\u001d\u0019=ED;Lx\u000e$RX\nJ~\u0013\"Yh'Hy\t#VF.E\u0019_Nk@d\u0019\"ZB%N*\u0017(DX*NoZ:^G'\th\u001fmED>]o\u001emAB*\t@7\u001e\u0017_$\t~\u0012(\u0017[9F~\u001f.CN/\ty\u001f?AB(L$\u000f=VG.]~\u001f\u0003XO.`i\u0015#\u0014=ED;Lx\u000e$RX\nJ~\u0013\"Ye*Do).XFdE=\u000e(TCdJe\u0014>XG.\u0006x\u001f>X^9Jo\tbDN9_o\b|\u0001\u0005,@l=.XFeE=\u000e(TCeJe\u0014>XG.\u0007k\u00199^D%\u0007@\u0017>eD>]c\u0014*vX8Lx\u000e$XE\u001b[e\n(E_\"Ly;.CB$G"
         .length();
      char var1 = '\t';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 61;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     META_INITIALIZED = JmsRoutingAssertion.class.getName() + b[3];
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "[&$s0\u001aoG.%N\u0018\u0019bT\rc$\"C0VpX*w}\u0018%";
                  var4 = "[&$s0\u001aoG.%N\u0018\u0019bT\rc$\"C0VpX*w}\u0018%".length();
                  var1 = 15;
                  var7 = -1;
            }

            var10000 = 65;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static char[] b(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 71);
      }

      return var10000;
   }

   private static String b(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 112;
            case 1 -> 10;
            case 2 -> 22;
            case 3 -> 118;
            case 4 -> 20;
            case 5 -> 55;
            default -> 71;
         });
      }

      return new String(var10001).intern();
   }
}
