package com.l7tech.server;

import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.EntityHeaderSet;
import com.l7tech.objectmodel.EntityManager;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.EntityTypeRegistry;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.PersistentEntity;
import com.l7tech.objectmodel.PropertySearchableEntityManager;
import com.l7tech.objectmodel.ReadOnlyEntityManager;
import com.l7tech.objectmodel.RoleAwareEntityManager;
import com.l7tech.objectmodel.SaveException;
import com.l7tech.objectmodel.SecurityZone;
import com.l7tech.objectmodel.UpdateException;
import com.l7tech.objectmodel.ZoneableEntity;
import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public class EntityCrudImpl extends HibernateDaoSupport implements EntityCrud {
   private final EntityFinder a;
   private final Map<Class<? extends Entity>, ReadOnlyEntityManager<? extends Entity, ? extends EntityHeader>> b = new LinkedHashMap<>();
   private static final String[] c;

   public EntityCrudImpl(EntityFinder var1, List<ReadOnlyEntityManager<? extends Entity, ? extends EntityHeader>> var2) {
      this.a = var1;

      for (ReadOnlyEntityManager var4 : var2) {
         this.b.put(var4.getImpClass(), var4);
      }
   }

   @Override
   public void addEntityManagers(List<ReadOnlyEntityManager<? extends Entity, ? extends EntityHeader>> var1) {
      for (ReadOnlyEntityManager var3 : var1) {
         this.b.put(var3.getImpClass(), var3);
      }
   }

   @Override
   public EntityHeaderSet<EntityHeader> findAll(Class<? extends Entity> var1) throws FindException {
      ReadOnlyEntityManager var2 = this.a(var1);
      if (var2 != null) {
         Collection var3 = var2.findAllHeaders();
         return new EntityHeaderSet(var3.toArray(new EntityHeader[var3.size()]));
      } else {
         return this.a.findAll(var1);
      }
   }

   @Override
   public EntityHeaderSet<EntityHeader> findAll(Class<? extends Entity> var1, Map<String, String> var2, int var3, int var4) throws FindException {
      ReadOnlyEntityManager var5 = this.a(var1);

      label35: {
         try {
            if (var5 == null) {
               return this.a.findAll(var1);
            }

            if (var5 instanceof PropertySearchableEntityManager) {
               break label35;
            }
         } catch (FindException var7) {
            throw a(var7);
         }

         Collection var6 = var5.findAllHeaders(var3, var4);
         return new EntityHeaderSet(var6.toArray(new EntityHeader[var6.size()]));
      }

      Collection var8 = ((PropertySearchableEntityManager)var5).findHeaders(var3, var4, var2);
      return new EntityHeaderSet(var8.toArray(new EntityHeader[var8.size()]));
   }

   @Override
   public <ET extends Entity> List<ET> findAll(Class<ET> var1, Map<String, List<Object>> var2, int var3, int var4, Boolean var5, String var6) throws FindException {
      EntityManager var7 = this.b(var1);

      try {
         if (var7 != null) {
            return var7.findPagedMatching(var3, var4, var6, var5, var2);
         }
      } catch (FindException var8) {
         throw a(var8);
      }

      throw new FindException(c[17] + var1.getName());
   }

   @Override
   public EntityHeaderSet<EntityHeader> findAllInScope(Class<? extends Entity> param1, EntityHeader param2, Map<String, String> param3, int param4, int param5) 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: aload 0
      // 01: aload 1
      // 02: invokevirtual com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Class;)Lcom/l7tech/objectmodel/ReadOnlyEntityManager;
      // 05: astore 6
      // 07: aload 6
      // 09: ifnull 80
      // 0c: aload 2
      // 0d: ifnull 3b
      // 10: goto 17
      // 13: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 16: athrow
      // 17: aload 6
      // 19: instanceof com/l7tech/objectmodel/ScopedSearchableEntityManager
      // 1c: ifeq 3b
      // 1f: goto 26
      // 22: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 25: athrow
      // 26: aload 6
      // 28: checkcast com/l7tech/objectmodel/ScopedSearchableEntityManager
      // 2b: iload 4
      // 2d: iload 5
      // 2f: aload 2
      // 30: aload 3
      // 31: invokeinterface com/l7tech/objectmodel/ScopedSearchableEntityManager.findHeadersInScope (IILcom/l7tech/objectmodel/EntityHeader;Ljava/util/Map;)Ljava/util/Collection; 5
      // 36: astore 7
      // 38: goto 64
      // 3b: aload 6
      // 3d: instanceof com/l7tech/objectmodel/PropertySearchableEntityManager
      // 40: ifeq 57
      // 43: aload 6
      // 45: checkcast com/l7tech/objectmodel/PropertySearchableEntityManager
      // 48: iload 4
      // 4a: iload 5
      // 4c: aload 3
      // 4d: invokeinterface com/l7tech/objectmodel/PropertySearchableEntityManager.findHeaders (IILjava/util/Map;)Ljava/util/Collection; 4
      // 52: astore 7
      // 54: goto 64
      // 57: aload 6
      // 59: iload 4
      // 5b: iload 5
      // 5d: invokeinterface com/l7tech/objectmodel/ReadOnlyEntityManager.findAllHeaders (II)Ljava/util/Collection; 3
      // 62: astore 7
      // 64: new com/l7tech/objectmodel/EntityHeaderSet
      // 67: dup
      // 68: aload 7
      // 6a: aload 7
      // 6c: invokeinterface java/util/Collection.size ()I 1
      // 71: anewarray 24
      // 74: invokeinterface java/util/Collection.toArray ([Ljava/lang/Object;)[Ljava/lang/Object; 2
      // 79: checkcast [Lcom/l7tech/objectmodel/EntityHeader;
      // 7c: invokespecial com/l7tech/objectmodel/EntityHeaderSet.<init> ([Lcom/l7tech/objectmodel/EntityHeader;)V
      // 7f: areturn
      // 80: aload 0
      // 81: getfield com/l7tech/server/EntityCrudImpl.a Lcom/l7tech/server/EntityFinder;
      // 84: aload 1
      // 85: invokeinterface com/l7tech/server/EntityFinder.findAll (Ljava/lang/Class;)Lcom/l7tech/objectmodel/EntityHeaderSet; 2
      // 8a: areturn
      // try (4 -> 8): 9 com/l7tech/objectmodel/FindException
      // try (6 -> 14): 15 com/l7tech/objectmodel/FindException
   }

   @Override
   public Entity find(@NotNull EntityHeader var1) throws FindException {
      try {
         if (var1 == null) {
            a(0);
         }
      } catch (FindException var5) {
         throw a(var5);
      }

      EntityManager var2 = this.b(EntityTypeRegistry.getEntityClass(var1.getType()));

      try {
         if (var2 != null) {
            return var2.findByHeader(var1);
         }
      } catch (FindException var4) {
         throw a(var4);
      }

      return this.a.find(var1);
   }

   @Override
   public <ET extends Entity> ET find(Class<ET> param1, Serializable 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: aload 0
      // 01: aload 1
      // 02: invokevirtual com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Class;)Lcom/l7tech/objectmodel/ReadOnlyEntityManager;
      // 05: astore 3
      // 06: aload 3
      // 07: ifnull 33
      // 0a: aload 3
      // 0b: aload 2
      // 0c: instanceof com/l7tech/objectmodel/Goid
      // 0f: ifeq 24
      // 12: goto 19
      // 15: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 18: athrow
      // 19: aload 2
      // 1a: checkcast com/l7tech/objectmodel/Goid
      // 1d: goto 2d
      // 20: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 23: athrow
      // 24: aload 2
      // 25: invokeinterface java/io/Serializable.toString ()Ljava/lang/String; 1
      // 2a: invokestatic com/l7tech/objectmodel/Goid.parseGoid (Ljava/lang/String;)Lcom/l7tech/objectmodel/Goid;
      // 2d: invokeinterface com/l7tech/objectmodel/ReadOnlyEntityManager.findByPrimaryKey (Lcom/l7tech/objectmodel/Goid;)Lcom/l7tech/objectmodel/Entity; 2
      // 32: areturn
      // 33: aload 0
      // 34: getfield com/l7tech/server/EntityCrudImpl.a Lcom/l7tech/server/EntityFinder;
      // 37: aload 1
      // 38: aload 2
      // 39: invokeinterface com/l7tech/server/EntityFinder.find (Ljava/lang/Class;Ljava/io/Serializable;)Lcom/l7tech/objectmodel/Entity; 3
      // 3e: astore 4
      // 40: aload 4
      // 42: areturn
      // try (4 -> 10): 11 com/l7tech/objectmodel/FindException
      // try (6 -> 16): 16 com/l7tech/objectmodel/FindException
   }

   @Override
   public EntityHeader findHeader(EntityType param1, Serializable 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: aload 0
      // 01: aload 1
      // 02: invokestatic com/l7tech/objectmodel/EntityTypeRegistry.getEntityClass (Lcom/l7tech/objectmodel/EntityType;)Ljava/lang/Class;
      // 05: invokevirtual com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Class;)Lcom/l7tech/objectmodel/ReadOnlyEntityManager;
      // 08: astore 3
      // 09: aload 3
      // 0a: ifnull 4a
      // 0d: aload 3
      // 0e: aload 2
      // 0f: instanceof com/l7tech/objectmodel/Goid
      // 12: ifeq 27
      // 15: goto 1c
      // 18: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1b: athrow
      // 1c: aload 2
      // 1d: checkcast com/l7tech/objectmodel/Goid
      // 20: goto 30
      // 23: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 26: athrow
      // 27: aload 2
      // 28: invokeinterface java/io/Serializable.toString ()Ljava/lang/String; 1
      // 2d: invokestatic com/l7tech/objectmodel/Goid.parseGoid (Ljava/lang/String;)Lcom/l7tech/objectmodel/Goid;
      // 30: invokeinterface com/l7tech/objectmodel/ReadOnlyEntityManager.findByPrimaryKey (Lcom/l7tech/objectmodel/Goid;)Lcom/l7tech/objectmodel/Entity; 2
      // 35: astore 4
      // 37: aload 4
      // 39: ifnonnull 44
      // 3c: aconst_null
      // 3d: goto 49
      // 40: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 43: athrow
      // 44: aload 4
      // 46: invokestatic com/l7tech/server/EntityHeaderUtils.fromEntity (Lcom/l7tech/objectmodel/Entity;)Lcom/l7tech/objectmodel/EntityHeader;
      // 49: areturn
      // 4a: aload 0
      // 4b: getfield com/l7tech/server/EntityCrudImpl.a Lcom/l7tech/server/EntityFinder;
      // 4e: aload 1
      // 4f: aload 2
      // 50: invokeinterface com/l7tech/server/EntityFinder.findHeader (Lcom/l7tech/objectmodel/EntityType;Ljava/io/Serializable;)Lcom/l7tech/objectmodel/EntityHeader; 3
      // 55: areturn
      // try (5 -> 11): 12 com/l7tech/objectmodel/FindException
      // try (7 -> 17): 17 com/l7tech/objectmodel/FindException
      // try (24 -> 28): 28 com/l7tech/objectmodel/FindException
   }

   @Override
   public Serializable save(Entity var1) throws SaveException {
      EntityManager var2 = this.b(var1.getClass());
      if (var2 != null) {
         Goid var3 = var2.save((PersistentEntity)var1);

         try {
            if (var2 instanceof RoleAwareEntityManager) {
               ((RoleAwareEntityManager)var2).createRoles((PersistentEntity)var1);
            }

            return var3;
         } catch (SaveException var4) {
            throw a(var4);
         }
      } else {
         return (Serializable)this.getHibernateTemplate().execute(new l(this, var1));
      }
   }

   @Override
   public void save(Goid param1, Entity param2) throws SaveException {
      // $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: aload 0
      // 01: aload 2
      // 02: invokeinterface com/l7tech/objectmodel/Entity.getClass ()Ljava/lang/Class; 1
      // 07: invokevirtual com/l7tech/server/EntityCrudImpl.b (Ljava/lang/Class;)Lcom/l7tech/objectmodel/EntityManager;
      // 0a: astore 3
      // 0b: aload 3
      // 0c: ifnull 3c
      // 0f: aload 3
      // 10: aload 1
      // 11: aload 2
      // 12: checkcast com/l7tech/objectmodel/PersistentEntity
      // 15: invokeinterface com/l7tech/objectmodel/EntityManager.save (Lcom/l7tech/objectmodel/Goid;Lcom/l7tech/objectmodel/PersistentEntity;)V 3
      // 1a: aload 3
      // 1b: instanceof com/l7tech/objectmodel/RoleAwareEntityManager
      // 1e: ifeq 58
      // 21: goto 28
      // 24: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 27: athrow
      // 28: aload 3
      // 29: checkcast com/l7tech/objectmodel/RoleAwareEntityManager
      // 2c: aload 2
      // 2d: checkcast com/l7tech/objectmodel/PersistentEntity
      // 30: invokeinterface com/l7tech/objectmodel/RoleAwareEntityManager.createRoles (Lcom/l7tech/objectmodel/PersistentEntity;)V 2
      // 35: goto 58
      // 38: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3b: athrow
      // 3c: new com/l7tech/objectmodel/SaveException
      // 3f: dup
      // 40: aload 2
      // 41: invokeinterface com/l7tech/objectmodel/Entity.getClass ()Ljava/lang/Class; 1
      // 46: invokevirtual java/lang/Class.getName ()Ljava/lang/String;
      // 49: getstatic com/l7tech/server/EntityCrudImpl.c [Ljava/lang/String;
      // 4c: bipush 1
      // 4d: aaload
      // 4e: swap
      // 4f: 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" ]
      // 54: invokespecial com/l7tech/objectmodel/SaveException.<init> (Ljava/lang/String;)V
      // 57: athrow
      // 58: return
      // try (5 -> 15): 16 com/l7tech/objectmodel/SaveException
      // try (7 -> 24): 24 com/l7tech/objectmodel/SaveException
   }

   @Override
   public void update(Entity param1) throws UpdateException {
      // $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: aload 0
      // 01: aload 1
      // 02: invokeinterface com/l7tech/objectmodel/Entity.getClass ()Ljava/lang/Class; 1
      // 07: invokevirtual com/l7tech/server/EntityCrudImpl.b (Ljava/lang/Class;)Lcom/l7tech/objectmodel/EntityManager;
      // 0a: astore 2
      // 0b: aload 2
      // 0c: ifnull 42
      // 0f: aload 1
      // 10: checkcast com/l7tech/objectmodel/PersistentEntity
      // 13: astore 3
      // 14: aload 3
      // 15: instanceof com/l7tech/objectmodel/folder/HasFolder
      // 18: ifeq 3a
      // 1b: aload 2
      // 1c: instanceof com/l7tech/objectmodel/folder/FolderedEntityManager
      // 1f: ifeq 3a
      // 22: goto 29
      // 25: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 28: athrow
      // 29: aload 2
      // 2a: checkcast com/l7tech/objectmodel/folder/FolderedEntityManager
      // 2d: aload 3
      // 2e: invokeinterface com/l7tech/objectmodel/folder/FolderedEntityManager.updateWithFolder (Lcom/l7tech/objectmodel/PersistentEntity;)V 2
      // 33: goto 41
      // 36: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 39: athrow
      // 3a: aload 2
      // 3b: aload 3
      // 3c: invokeinterface com/l7tech/objectmodel/EntityManager.update (Lcom/l7tech/objectmodel/PersistentEntity;)V 2
      // 41: return
      // 42: aload 0
      // 43: invokevirtual com/l7tech/server/EntityCrudImpl.getHibernateTemplate ()Lorg/springframework/orm/hibernate5/HibernateTemplate;
      // 46: new com/l7tech/server/m
      // 49: dup
      // 4a: aload 0
      // 4b: aload 1
      // 4c: invokespecial com/l7tech/server/m.<init> (Lcom/l7tech/server/EntityCrudImpl;Lcom/l7tech/objectmodel/Entity;)V
      // 4f: invokevirtual org/springframework/orm/hibernate5/HibernateTemplate.execute (Lorg/springframework/orm/hibernate5/HibernateCallback;)Ljava/lang/Object;
      // 52: pop
      // 53: return
      // try (10 -> 16): 17 com/l7tech/objectmodel/UpdateException
      // try (13 -> 24): 24 com/l7tech/objectmodel/UpdateException
   }

   @Override
   public void delete(Entity var1) throws DeleteException {
      EntityManager var2 = this.b(var1.getClass());

      try {
         if (var2 != null) {
            var2.delete((PersistentEntity)var1);
            return;
         }
      } catch (DeleteException var3) {
         throw a(var3);
      }

      this.getHibernateTemplate().execute(new n(this, var1));
   }

   @Override
   public void evict(Entity var1) {
      try {
         if (var1 instanceof PersistentEntity) {
            this.getHibernateTemplate().execute(new o(this, var1));
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }
   }

   public Collection<EntityHeader> findByEntityTypeAndSecurityZoneGoid(@NotNull EntityType var1, Goid var2) throws FindException {
      try {
         if (var1 == null) {
            a(1);
         }
      } catch (FindException var3) {
         throw a(var3);
      }

      return this.a.findByEntityTypeAndSecurityZoneGoid(var1, var2);
   }

   public void setSecurityZoneForEntities(@Nullable Goid var1, @NotNull EntityType var2, @NotNull Collection<Serializable> var3) throws UpdateException {
      try {
         if (var2 == null) {
            a(2);
         }
      } catch (FindException var8) {
         throw a(var8);
      }

      try {
         if (var3 == null) {
            a(3);
         }
      } catch (FindException var5) {
         throw a(var5);
      }

      try {
         if (!var3.isEmpty()) {
            try {
               this.a(this.a(var1), var2, var3);
            } catch (FindException var6) {
               throw new UpdateException(c[8] + var6.getMessage(), var6);
            }
         }
      } catch (UpdateException var7) {
         throw a(var7);
      }
   }

   public void setSecurityZoneForEntities(@Nullable Goid var1, @NotNull Map<EntityType, Collection<Serializable>> var2) throws UpdateException {
      try {
         if (var2 == null) {
            a(4);
         }
      } catch (FindException var6) {
         throw a(var6);
      }

      if (!var2.isEmpty()) {
         try {
            SecurityZone var3 = this.a(var1);

            for (Entry var5 : var2.entrySet()) {
               this.a(var3, (EntityType)var5.getKey(), (Collection<Serializable>)var5.getValue());
            }
         } catch (FindException var7) {
            throw new UpdateException(c[14] + var7.getMessage(), var7);
         }
      }
   }

   private SecurityZone a(@Nullable Goid param1) 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: aload 1
      // 01: ifnull 15
      // 04: aload 0
      // 05: ldc com/l7tech/objectmodel/SecurityZone
      // 07: aload 1
      // 08: invokevirtual com/l7tech/server/EntityCrudImpl.find (Ljava/lang/Class;Ljava/io/Serializable;)Lcom/l7tech/objectmodel/Entity;
      // 0b: checkcast com/l7tech/objectmodel/SecurityZone
      // 0e: goto 16
      // 11: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 14: athrow
      // 15: aconst_null
      // 16: astore 2
      // 17: aload 2
      // 18: ifnonnull 47
      // 1b: aload 1
      // 1c: ifnull 47
      // 1f: goto 26
      // 22: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 25: athrow
      // 26: new com/l7tech/objectmodel/FindException
      // 29: dup
      // 2a: aload 1
      // 2b: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
      // 2e: getstatic com/l7tech/server/EntityCrudImpl.c [Ljava/lang/String;
      // 31: bipush 0
      // 32: aaload
      // 33: swap
      // 34: getstatic com/l7tech/server/EntityCrudImpl.c [Ljava/lang/String;
      // 37: bipush 7
      // 39: aaload
      // 3a: invokedynamic makeConcatWithConstants (Ljava/lang/String;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\u0001" ]
      // 3f: invokespecial com/l7tech/objectmodel/FindException.<init> (Ljava/lang/String;)V
      // 42: athrow
      // 43: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 46: athrow
      // 47: aload 2
      // 48: areturn
      // try (0 -> 8): 8 com/l7tech/objectmodel/FindException
      // try (12 -> 16): 17 com/l7tech/objectmodel/FindException
      // try (14 -> 33): 33 com/l7tech/objectmodel/FindException
   }

   private void a(@Nullable SecurityZone var1, @NotNull EntityType var2, @NotNull Collection<Serializable> var3) throws UpdateException, FindException {
      try {
         if (var2 == null) {
            a(5);
         }
      } catch (UpdateException var11) {
         throw a(var11);
      }

      try {
         if (var3 == null) {
            a(6);
         }
      } catch (UpdateException var9) {
         throw a(var9);
      }

      try {
         if (!var2.isSecurityZoneable()) {
            throw new IllegalArgumentException(c[15]);
         }
      } catch (UpdateException var10) {
         throw a(var10);
      }

      for (Serializable var5 : var3) {
         Entity var6 = this.find(var2.getEntityClass(), var5);
         if (!(var6 instanceof ZoneableEntity var7)) {
            String var10002 = var2.getName();
            String var10003 = String.valueOf(var5);
            String[] var8 = c;
            throw new UpdateException(var10002 + var8[16] + var10003 + var8[12]);
         }

         var7.setSecurityZone(var1);
         this.update(var6);
      }
   }

   private ReadOnlyEntityManager a(Class<? extends Entity> var1) {
      return this.b.get(var1);
   }

   private EntityManager b(Class<? extends Entity> param1) {
      // $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: ldc com/l7tech/identity/IdentityProviderConfig
      // 02: aload 1
      // 03: invokevirtual java/lang/Class.isAssignableFrom (Ljava/lang/Class;)Z
      // 06: ifeq 0c
      // 09: ldc com/l7tech/identity/IdentityProviderConfig
      // 0b: astore 1
      // 0c: aload 0
      // 0d: getfield com/l7tech/server/EntityCrudImpl.b Ljava/util/Map;
      // 10: aload 1
      // 11: invokeinterface java/util/Map.get (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 16: checkcast com/l7tech/objectmodel/ReadOnlyEntityManager
      // 19: astore 2
      // 1a: aload 2
      // 1b: ifnull 34
      // 1e: ldc com/l7tech/objectmodel/PersistentEntity
      // 20: aload 1
      // 21: invokevirtual java/lang/Class.isAssignableFrom (Ljava/lang/Class;)Z
      // 24: ifne 34
      // 27: goto 2e
      // 2a: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2d: athrow
      // 2e: aconst_null
      // 2f: areturn
      // 30: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 33: athrow
      // 34: aload 2
      // 35: instanceof com/l7tech/objectmodel/EntityManager
      // 38: ifne 41
      // 3b: aconst_null
      // 3c: areturn
      // 3d: invokestatic com/l7tech/server/EntityCrudImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 40: athrow
      // 41: aload 2
      // 42: checkcast com/l7tech/objectmodel/EntityManager
      // 45: areturn
      // try (12 -> 18): 19 java/lang/IllegalArgumentException
      // try (14 -> 23): 23 java/lang/IllegalArgumentException
      // try (25 -> 30): 30 java/lang/IllegalArgumentException
   }

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

   static {
      String[] var5 = new String[18];
      int var3 = 0;
      String var2 = "MA>\u001cJ2vg\u0004'\u0006V>\"iM)\u0001\u0018<mw@}/]K(\u0005\\{lqP}\u000fQ5f>A3\u001dQ/{>I<\u0007Y<gl\u0004;\u0006J{gpP4\u001dA{vgT8S\u0018\t{J)\u0000L\"KzW }K0FTlv{G5FK>phA/F}5vwP$*J.fWI-\u0005\u001amA):]8wlM)\u0010b4l{b2\u001b}5vwP4\fK\u0004xM3\r>_V:\u001cU>lj\u0004;\u0006J{BPK)'M7n>T<\u001bY6gjA/I\u001f~q9\u00042\u000f\u0018~q0\u0001.IU.qj\u00043\u0006L{`{\u00043\u001cT7\u000f>@2\fK{lqP}\f@2qj*KJ<\u000bT>\"jK}\u001a]/\"mA>\u001cJ2vg\u0004'\u0006V>\"xK/I]5vwP4\fKa\"\n{J)\u0000L\"VgT8\u0006vA<\r])#xM3\rz\"GpP4\u001dA\u000f{nA\u001c\u0007\\\bg}Q/\u0000L\"XqJ8.W2f+>@2\fK{lqP}\f@2qj\u00042\u001b\u00182q>J2\u001d\u0018(g}Q/\u0000L\"\"dK3\fY9n{\u0004j]-\f*KJ<\u000bT>\"jK}\u001a]/\"mA>\u001cJ2vg\u0004'\u0006V>\"xK/I]5vwP4\fKa\"%[J)\u0000L\"\"j]-\f\u00186wmP}\u000b]{q{G(\u001bQ/{>^2\u0007]:`rA";
      int var4 = "MA>\u001cJ2vg\u0004'\u0006V>\"iM)\u0001\u0018<mw@}/]K(\u0005\\{lqP}\u000fQ5f>A3\u001dQ/{>I<\u0007Y<gl\u0004;\u0006J{gpP4\u001dA{vgT8S\u0018\t{J)\u0000L\"KzW }K0FTlv{G5FK>phA/F}5vwP$*J.fWI-\u0005\u001amA):]8wlM)\u0010b4l{b2\u001b}5vwP4\fK\u0004xM3\r>_V:\u001cU>lj\u0004;\u0006J{BPK)'M7n>T<\u001bY6gjA/I\u001f~q9\u00042\u000f\u0018~q0\u0001.IU.qj\u00043\u0006L{`{\u00043\u001cT7\u000f>@2\fK{lqP}\f@2qj*KJ<\u000bT>\"jK}\u001a]/\"mA>\u001cJ2vg\u0004'\u0006V>\"xK/I]5vwP4\fKa\"\n{J)\u0000L\"VgT8\u0006vA<\r])#xM3\rz\"GpP4\u001dA\u000f{nA\u001c\u0007\\\bg}Q/\u0000L\"XqJ8.W2f+>@2\fK{lqP}\f@2qj\u00042\u001b\u00182q>J2\u001d\u0018(g}Q/\u0000L\"\"dK3\fY9n{\u0004j]-\f*KJ<\u000bT>\"jK}\u001a]/\"mA>\u001cJ2vg\u0004'\u0006V>\"xK/I]5vwP4\fKa\"%[J)\u0000L\"\"j]-\f\u00186wmP}\u000b]{q{G(\u001bQ/{>^2\u0007]:`rA"
         .length();
      char var1 = 24;
      int var7 = -1;

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

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     c = var5;
                     return;
                  }

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

                  var2 = "\u0012\u007f\u00181|WGV(/qg\u0004)pW@]|Q#}\u0019J\u0012m\u001f1}\u0003W\u0012e\u0010+u\u0010K@(\u0017*fWK\\|\u00181mWZKx\u0014\u007f4";
                  var4 = "\u0012\u007f\u00181|WGV(/qg\u0004)pW@]|Q#}\u0019J\u0012m\u001f1}\u0003W\u0012e\u0010+u\u0010K@(\u0017*fWK\\|\u00181mWZKx\u0014\u007f4"
                     .length();
                  var1 = '\t';
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String a(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 -> 32;
            case 1 -> 26;
            case 2 -> 99;
            case 3 -> 87;
            case 4 -> 6;
            case 5 -> 101;
            default -> 60;
         });
      }

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