package com.l7tech.server.wsdm.subscription;

import com.l7tech.gateway.common.service.MetricsSummaryBin;
import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.UpdateException;
import com.l7tech.objectmodel.EntityManager.UniqueType;
import com.l7tech.server.HibernateEntityManager;
import com.l7tech.server.wsdm.Aggregator;
import com.l7tech.server.wsdm.faults.ResourceUnknownFault;
import com.l7tech.server.wsdm.faults.UnacceptableTerminationTimeFault;
import com.l7tech.util.Pair;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;
import org.springframework.dao.DataAccessException;

public class SubscriptionManagerImpl extends HibernateEntityManager<Subscription, EntityHeader> implements SubscriptionManager {
   private static final Logger m;
   private static final String n;
   private static final String o;
   private static final String p;
   private static final String q;
   private static final String r;
   private static final String s;
   private static final String t;
   private static final String u;
   private static final String v;
   private Aggregator w;
   private static final String[] x;

   @Override
   public void setAggregator(Aggregator var1) {
      this.w = var1;
   }

   @Override
   public Subscription findByUuid(String var1) throws FindException {
      try {
         return this.a(var1);
      } catch (DataAccessException var3) {
         throw new FindException(x[1] + var1, var3);
      }
   }

   @Override
   public void deleteByUuid(String var1) throws FindException, DeleteException, ResourceUnknownFault {
      Subscription var2 = this.findByUuid(var1);

      try {
         if (var2 == null) {
            throw new ResourceUnknownFault(x[4] + var1);
         }
      } catch (DataAccessException var5) {
         throw a(var5);
      }

      try {
         this.getHibernateTemplate().delete(var2);
      } catch (DataAccessException var4) {
         throw new DeleteException(x[3] + var1, var4);
      }
   }

   private Subscription a(String var1) {
      List var2 = (List)this.getHibernateTemplate().execute(new a(this, var1));

      try {
         if (var2.isEmpty()) {
            return null;
         }
      } catch (DataAccessException var3) {
         throw a(var3);
      }

      try {
         if (var2.size() > 1) {
            throw new IllegalStateException(x[24] + var1);
         }
      } catch (DataAccessException var4) {
         throw a(var4);
      }

      return (Subscription)var2.iterator().next();
   }

   @Override
   public void deleteExpiredSubscriptions() throws DeleteException {
      try {
         this.getHibernateTemplate().execute(new f(this));
      } catch (DataAccessException var2) {
         throw new DeleteException(x[5], var2);
      }
   }

   @Override
   public void renewSubscription(String var1, long var2, String var4) throws FindException, UpdateException, ResourceUnknownFault, UnacceptableTerminationTimeFault {
      Subscription var5 = this.findByUuid(var1);

      try {
         if (var5 == null) {
            throw new ResourceUnknownFault(x[23] + var1);
         }
      } catch (FindException var15) {
         throw a(var15);
      }

      long var6 = System.currentTimeMillis();

      try {
         if (var2 < var6) {
            m.warning(x[0]);
            throw new UnacceptableTerminationTimeFault(x[13]);
         }
      } catch (FindException var14) {
         throw a(var14);
      }

      boolean var8 = false;
      long var9 = var5.getTermination();
      if (var2 != var9) {
         String[] var12 = x;
         m.info(MessageFormat.format(var12[10], var1, var2));
         var5.setTermination(var2);
         var8 = true;
      }

      String var11 = var5.getNotificationPolicyGuid();
      if (!StringUtils.equals(var11, var4)) {
         m.info(MessageFormat.format(x[22], var1, var4));
         var5.setNotificationPolicyGuid(var4);
         var8 = true;
      }

      try {
         if (var8) {
            this.update(var5);
         }
      } catch (FindException var13) {
         throw a(var13);
      }
   }

   @Override
   public Collection<Subscription> findByNodeAndServiceGoid(String var1, Goid var2) throws FindException {
      return (Collection<Subscription>)this.getHibernateTemplate().execute(new b(this, var1, var2));
   }

   @Override
   public Collection<Subscription> findBySubscriptionKey(SubscriptionKey var1) throws FindException {
      return (Collection<Subscription>)this.getHibernateTemplate().execute(new c(this, var1));
   }

   @Override
   public void notified(String var1) throws UpdateException {
      long var2 = System.currentTimeMillis();
      this.getHibernateTemplate().execute(new g(this, var2, var1));
   }

   @Override
   public Map<SubscriptionKey, Pair<Subscription, MetricsSummaryBin>> findNotifiableMetricsForNode(String param1, long param2) throws FindException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: invokestatic java/lang/System.currentTimeMillis ()J
      // 03: lstore 4
      // 05: aload 0
      // 06: invokevirtual com/l7tech/server/wsdm/subscription/SubscriptionManagerImpl.getHibernateTemplate ()Lorg/springframework/orm/hibernate5/HibernateTemplate;
      // 09: new com/l7tech/server/wsdm/subscription/d
      // 0c: dup
      // 0d: aload 0
      // 0e: aload 1
      // 0f: lload 4
      // 11: invokespecial com/l7tech/server/wsdm/subscription/d.<init> (Lcom/l7tech/server/wsdm/subscription/SubscriptionManagerImpl;Ljava/lang/String;J)V
      // 14: invokevirtual org/springframework/orm/hibernate5/HibernateTemplate.execute (Lorg/springframework/orm/hibernate5/HibernateCallback;)Ljava/lang/Object;
      // 17: checkcast java/util/List
      // 1a: astore 6
      // 1c: goto 35
      // 1f: astore 7
      // 21: new com/l7tech/objectmodel/FindException
      // 24: dup
      // 25: getstatic com/l7tech/server/wsdm/subscription/SubscriptionManagerImpl.x [Ljava/lang/String;
      // 28: astore 14
      // 2a: aload 14
      // 2c: bipush 11
      // 2e: aaload
      // 2f: aload 7
      // 31: invokespecial com/l7tech/objectmodel/FindException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 34: athrow
      // 35: aload 0
      // 36: getfield com/l7tech/server/wsdm/subscription/SubscriptionManagerImpl.w Lcom/l7tech/server/wsdm/Aggregator;
      // 39: invokevirtual com/l7tech/server/wsdm/Aggregator.getMetricsForServices ()Ljava/util/Map;
      // 3c: astore 7
      // 3e: aload 6
      // 40: ifnull 54
      // 43: aload 6
      // 45: invokeinterface java/util/List.isEmpty ()Z 1
      // 4a: ifeq 5c
      // 4d: goto 54
      // 50: invokestatic com/l7tech/server/wsdm/subscription/SubscriptionManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 53: athrow
      // 54: invokestatic java/util/Collections.emptyMap ()Ljava/util/Map;
      // 57: areturn
      // 58: invokestatic com/l7tech/server/wsdm/subscription/SubscriptionManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 5b: athrow
      // 5c: new java/util/HashMap
      // 5f: dup
      // 60: invokespecial java/util/HashMap.<init> ()V
      // 63: astore 8
      // 65: aload 6
      // 67: invokeinterface java/util/List.iterator ()Ljava/util/Iterator; 1
      // 6c: astore 9
      // 6e: aload 9
      // 70: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 75: ifeq db
      // 78: aload 9
      // 7a: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 7f: checkcast com/l7tech/server/wsdm/subscription/Subscription
      // 82: astore 10
      // 84: aload 10
      // 86: invokevirtual com/l7tech/server/wsdm/subscription/Subscription.getPublishedServiceGoid ()Lcom/l7tech/objectmodel/Goid;
      // 89: astore 11
      // 8b: aload 7
      // 8d: aload 11
      // 8f: invokeinterface java/util/Map.get (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 94: checkcast com/l7tech/gateway/common/service/MetricsSummaryBin
      // 97: astore 12
      // 99: aload 12
      // 9b: ifnull c1
      // 9e: new com/l7tech/server/wsdm/subscription/SubscriptionKey
      // a1: dup
      // a2: aload 10
      // a4: invokespecial com/l7tech/server/wsdm/subscription/SubscriptionKey.<init> (Lcom/l7tech/server/wsdm/subscription/Subscription;)V
      // a7: astore 13
      // a9: aload 8
      // ab: aload 13
      // ad: new com/l7tech/util/Pair
      // b0: dup
      // b1: aload 10
      // b3: aload 12
      // b5: invokespecial com/l7tech/util/Pair.<init> (Ljava/lang/Object;Ljava/lang/Object;)V
      // b8: invokeinterface java/util/Map.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 3
      // bd: pop
      // be: goto d8
      // c1: getstatic com/l7tech/server/wsdm/subscription/SubscriptionManagerImpl.m Ljava/util/logging/Logger;
      // c4: aload 11
      // c6: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
      // c9: getstatic com/l7tech/server/wsdm/subscription/SubscriptionManagerImpl.x [Ljava/lang/String;
      // cc: bipush 16
      // ce: aaload
      // cf: swap
      // d0: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // d5: invokevirtual java/util/logging/Logger.fine (Ljava/lang/String;)V
      // d8: goto 6e
      // db: aload 8
      // dd: areturn
      // try (2 -> 13): 14 org/springframework/dao/DataAccessException
      // try (29 -> 34): 35 org/springframework/dao/DataAccessException
      // try (31 -> 39): 39 org/springframework/dao/DataAccessException
   }

   @Override
   public void stealSubscriptionsFromDeadNodes(String var1, long var2) {
      long var4 = System.currentTimeMillis();

      List var6;
      try {
         var6 = (List)this.getHibernateTemplate().execute(new e(this, var1, var2, var4));
      } catch (DataAccessException var12) {
         String[] var10 = x;
         m.log(Level.WARNING, var10[7], var12);
         return;
      }

      for (Subscription var8 : var6) {
         String[] var13 = x;
         m.log(Level.INFO, MessageFormat.format(var13[8], var8.getUuid(), var8.getOwnerNodeId()));
         var8.setOwnerNodeId(var1);
         var8.setLastNotificationTime(var4);

         try {
            this.update(var8);
         } catch (UpdateException var11) {
            m.log(Level.WARNING, x[2] + var8.getUuid());
         }
      }
   }

   @Override
   protected UniqueType getUniqueType() {
      return UniqueType.OTHER;
   }

   protected Collection<Map<String, Object>> getUniqueConstraints(final Subscription var1) {
      HashMap var2 = new HashMap<String, Object>() {
         static final long serialVersionUID = 5979641669591249536L;
         private static final String a;

         {
            this.put(a, var1.getUuid());
         }

         static {
            String var10002 = a(89, a("Bm\u0001h"));
            byte var10001 = -1;
            a = var10002;
         }

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

            return var10000;
         }

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

            for (int var2x = 0; var10000 > var2x; var2x++) {
               var10001[var2x] = (char)(var10001[var2x] ^ var10002 ^ switch (var2x % 7) {
                  case 0 -> 110;
                  case 1 -> 65;
                  case 2 -> 49;
                  case 3 -> 85;
                  case 4 -> 106;
                  case 5 -> 4;
                  default -> 80;
               });
            }

            return new String(var10001).intern();
         }
      };
      return Arrays.asList(var2);
   }

   public Class<? extends Entity> getImpClass() {
      return Subscription.class;
   }

   @Override
   public Class<? extends Entity> getInterfaceClass() {
      return Subscription.class;
   }

   @Override
   public String getTableName() {
      return x[17];
   }

   static {
      String[] var5 = new String[27];
      int var3 = 0;
      String var2 = "d}F\u001e\u0019;M\u0005}][\u0006.W@~\u0012\u001a\u001ak|vD\u0012\b\u0001)JF{[\u000b\u0000\"VK)E\u0012\u0000#\u0019D)F\u001e\u0006&PKhF\u0012\u001b%\u0019Q`_\u001eT\"W\u0005}Z\u001eT;XV}\u001c[&.MP{\\\u0012\u001a,\u0019vFs+T-XPeF&pgS\u0019\u0018.\u0019Qf\u0012\u001d\u001d%]\u0005ZG\u0019\u0007(KLyF\u0012\u001b%\u0019R`F\u0013T\u001ellM\u0012\u001dpgS\u0019\u0018.\u0019Qf\u0012\t\u00118\\Q)]\f\u001a.K\u0005@v[\u0012$K\u0005(pgS\u0019\u0018.\u0019Qf\u0012\u001f\u0011'\\Ql\u0012(\u0001)JF{[\u000b\u0000\"VK)E\u0012\u0000#\u0019p\\{?T\u001dkf\u0012\b\u0001(Q\u0005zG\u0019\u0007(KLyF\u0012\u001b%\u0019R`F\u0013T\"]\u0005&pgS\u0019\u0018.\u0019Qf\u0012\u001f\u0011'\\Ql\u0012\u001e\f;PWlV[\u0007>[Vj@\u0012\u0004?PJgA\u000bJ~\\\u001e\u0006\u0005VAl{\u001f\u001cpgS\u0019\u0018.\u0019Qf\u0012\u001d\u001d%]\u0005zG\u0019\u0007(KLyF\u0012\u001b%JWdzA\u000e\u0019\"WB)Q\u0014\u001a?KJe\u0012\u0014\u0012kJQh^\u001eT8LGzQ\t\u001d;MLf\\[\u000f{D\u0005!P\u001e\u0018$WBlV[\u0000$\u0019KfV\u001eT0\bX)F\u0013\u0015?\u0019Lz\u0012\u000b\u0006.JPdW\u001fT/\\Dm\u001b\u000bQl@\u0016\u001d%XQ`]\u0015;pyV\u001a\u0000\"WB)w(9kJPkA\u0018\u0006\"IQ`]\u0015T0\tX)E\u0012\u0000#\u0019KlE[\u0000.KH`\\\u001a\u0000\"VK)F\u0012\u0019.\u0019^8O\u001cpgS\u0019\u0018.\u0019Qf\u0012\u001d\u001d%]\u0005zG\u0019\u0007(KLyF\u0012\u001b%J\u0004P|[\u001f+fh\\\u0015\u001b?\u0019MhD\u001eT*\u0019Ql@\u0016\u001d%XQ`]\u0015T?PHl\u0012\u0012\u001akMMl\u0012\u000b\u00158M\u000b\u000bJ~\\\u001e\u0006\u0005VAl{\u001f\u0005QfB\u0012\u0017%kf\u0012(\u00119OLjW6\u0011?KLjA[\u0016\"WV)S\r\u0015\"UDk^\u001eT-VW)\u0011RzV\u0016+8LGzQ\t\u001d;MLf\\%pYv: \u000e\u0019\u0000z\u0012\b\u0011?\u0019\u0000z\u0012FTq\u001cV)E\u0013\u00119\\\u0005,A[Ik\u0003\u0000z\u0014IhA\u000f:$MLo[\u0018\u0015?PJgf\u0012\u0019.\u0011WlT\u001e\u0006.WFlq\u001a\u0018'[DjY\u0014IhA\u000f:$MLo[\u0018\u0015?PJgf\u0012\u0019.CpyV\u001a\u0000\"WB)w(9kJPkA\u0018\u0006\"IQ`]\u0015T0\tX)E\u0012\u0000#\u0019KlE[\u001a$MLo[\u0018\u0015?PJg\u0012\u000b\u001b'PFp\u0012<!\u0002}\u0005r\u0003\u0006\u001dkf\u0012\b\u0001(Q\u0005zG\u0019\u0007(KLyF\u0012\u001b%\u0019R`F\u0013T\"]\u0005+cfG\u0015\u0010kTJ{W[\u0000#XK)]\u0015\u0011kjPkA\u0018\u0006\"IQ`]\u0015T<PQa\u0012.!\u0002}\u0005";
      int var4 = "d}F\u001e\u0019;M\u0005}][\u0006.W@~\u0012\u001a\u001ak|vD\u0012\b\u0001)JF{[\u000b\u0000\"VK)E\u0012\u0000#\u0019D)F\u001e\u0006&PKhF\u0012\u001b%\u0019Q`_\u001eT\"W\u0005}Z\u001eT;XV}\u001c[&.MP{\\\u0012\u001a,\u0019vFs+T-XPeF&pgS\u0019\u0018.\u0019Qf\u0012\u001d\u001d%]\u0005ZG\u0019\u0007(KLyF\u0012\u001b%\u0019R`F\u0013T\u001ellM\u0012\u001dpgS\u0019\u0018.\u0019Qf\u0012\t\u00118\\Q)]\f\u001a.K\u0005@v[\u0012$K\u0005(pgS\u0019\u0018.\u0019Qf\u0012\u001f\u0011'\\Ql\u0012(\u0001)JF{[\u000b\u0000\"VK)E\u0012\u0000#\u0019p\\{?T\u001dkf\u0012\b\u0001(Q\u0005zG\u0019\u0007(KLyF\u0012\u001b%\u0019R`F\u0013T\"]\u0005&pgS\u0019\u0018.\u0019Qf\u0012\u001f\u0011'\\Ql\u0012\u001e\f;PWlV[\u0007>[Vj@\u0012\u0004?PJgA\u000bJ~\\\u001e\u0006\u0005VAl{\u001f\u001cpgS\u0019\u0018.\u0019Qf\u0012\u001d\u001d%]\u0005zG\u0019\u0007(KLyF\u0012\u001b%JWdzA\u000e\u0019\"WB)Q\u0014\u001a?KJe\u0012\u0014\u0012kJQh^\u001eT8LGzQ\t\u001d;MLf\\[\u000f{D\u0005!P\u001e\u0018$WBlV[\u0000$\u0019KfV\u001eT0\bX)F\u0013\u0015?\u0019Lz\u0012\u000b\u0006.JPdW\u001fT/\\Dm\u001b\u000bQl@\u0016\u001d%XQ`]\u0015;pyV\u001a\u0000\"WB)w(9kJPkA\u0018\u0006\"IQ`]\u0015T0\tX)E\u0012\u0000#\u0019KlE[\u0000.KH`\\\u001a\u0000\"VK)F\u0012\u0019.\u0019^8O\u001cpgS\u0019\u0018.\u0019Qf\u0012\u001d\u001d%]\u0005zG\u0019\u0007(KLyF\u0012\u001b%J\u0004P|[\u001f+fh\\\u0015\u001b?\u0019MhD\u001eT*\u0019Ql@\u0016\u001d%XQ`]\u0015T?PHl\u0012\u0012\u001akMMl\u0012\u000b\u00158M\u000b\u000bJ~\\\u001e\u0006\u0005VAl{\u001f\u0005QfB\u0012\u0017%kf\u0012(\u00119OLjW6\u0011?KLjA[\u0016\"WV)S\r\u0015\"UDk^\u001eT-VW)\u0011RzV\u0016+8LGzQ\t\u001d;MLf\\%pYv: \u000e\u0019\u0000z\u0012\b\u0011?\u0019\u0000z\u0012FTq\u001cV)E\u0013\u00119\\\u0005,A[Ik\u0003\u0000z\u0014IhA\u000f:$MLo[\u0018\u0015?PJgf\u0012\u0019.\u0011WlT\u001e\u0006.WFlq\u001a\u0018'[DjY\u0014IhA\u000f:$MLo[\u0018\u0015?PJgf\u0012\u0019.CpyV\u001a\u0000\"WB)w(9kJPkA\u0018\u0006\"IQ`]\u0015T0\tX)E\u0012\u0000#\u0019KlE[\u001a$MLo[\u0018\u0015?PJg\u0012\u000b\u001b'PFp\u0012<!\u0002}\u0005r\u0003\u0006\u001dkf\u0012\b\u0001(Q\u0005zG\u0019\u0007(KLyF\u0012\u001b%\u0019R`F\u0013T\"]\u0005+cfG\u0015\u0010kTJ{W[\u0000#XK)]\u0015\u0011kjPkA\u0018\u0006\"IQ`]\u0015T<PQa\u0012.!\u0002}\u0005"
         .length();
      char var1 = '^';
      int var7 = -1;

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

         while (true) {
            String var9 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var7 += var1) >= var4) {
                     x = var5;
                     String[] var10 = x;
                     o = x[20];
                     p = var10[14];
                     q = var10[21];
                     s = var10[9];
                     t = var10[15];
                     n = var10[25];
                     u = var10[12];
                     r = var10[26];
                     m = Logger.getLogger(SubscriptionManagerImpl.class.getName());
                     String[] var8 = x;
                     v = String.format(var8[18], Subscription.class.getName(), var8[19], var8[21], var8[6], var8[14]);
                     return;
                  }

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

                  var2 = "(\u0000,lQB6=\u0000+sgA76\u001c&\u0014/\u0006*mgB+:\u0017\u001bd|G*<\u0016\u000fngU";
                  var4 = "(\u0000,lQB6=\u0000+sgA76\u001c&\u0014/\u0006*mgB+:\u0017\u001bd|G*<\u0016\u000fngU".length();
                  var1 = 17;
                  var7 = -1;
            }

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

   private static Exception a(Exception var0) {
      return var0;
   }

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

      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 -> 117;
            case 1 -> 89;
            case 2 -> 98;
            case 3 -> 43;
            case 4 -> 36;
            case 5 -> 27;
            default -> 105;
         });
      }

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