package com.l7tech.external.assertions.gatewaymanagement.server;

import com.l7tech.gateway.api.ManagedObject;
import com.l7tech.gateway.common.security.rbac.OperationType;
import com.l7tech.objectmodel.ObjectModelException;
import com.l7tech.objectmodel.PersistentEntity;
import com.l7tech.objectmodel.RoleAwareEntityManager;
import com.l7tech.util.Eithers;
import com.l7tech.util.Eithers.E2;
import java.util.Map;

class al
   implements ResourceFactorySupport.TransactionalCallback<E2<ResourceFactory.ResourceNotFoundException, ResourceFactory.InvalidResourceException, String>> {
   final Map val$selectorMap;
   final Object val$resource;
   final EntityManagerResourceFactory this$0;

   al(EntityManagerResourceFactory var1, Map var2, Object var3) {
      this.this$0 = var1;
      this.val$selectorMap = var2;
      this.val$resource = var3;
   }

   public E2<ResourceFactory.ResourceNotFoundException, ResourceFactory.InvalidResourceException, String> execute() throws ObjectModelException {
      try {
         EntityManagerResourceFactory.EntityBag var1 = this.this$0.selectEntityBag(this.val$selectorMap);
         this.this$0.checkPermitted(OperationType.UPDATE, null, var1.getEntity());
         EntityManagerResourceFactory.EntityBag var2 = this.this$0.fromResourceAsBag(this.val$resource);
         if (this.val$resource instanceof ManagedObject var3) {
            this.this$0.setIdentifier(var2.getEntity(), var3.getId(), false);
            this.this$0.setVersion(var2.getEntity(), var3.getVersion());
         }

         this.this$0.updateEntityBag(var1, var2);
         this.this$0.verifyIdentifier(var1.getEntity().getGoid(), var2.getEntity().getGoid());
         this.this$0.verifyVersion(var1.getEntity().getVersion(), var2.getEntity().getVersion());
         this.this$0.checkPermitted(OperationType.UPDATE, null, var2.getEntity());
         this.this$0.beforeUpdateEntity(var1);

         for (PersistentEntity var4 : var1) {
            this.this$0.validate(var4);
         }

         try {
            if (this.this$0.n instanceof RoleAwareEntityManager) {
               ((RoleAwareEntityManager)this.this$0.n).updateRoles(var1.getEntity());
            }
         } catch (ResourceFactory.ResourceNotFoundException var5) {
            throw a(var5);
         }

         this.this$0.n.update(var1.getEntity());
         this.this$0.afterUpdateEntity(var1);
         return Eithers.right2(var1.getEntity().getId());
      } catch (ResourceFactory.ResourceNotFoundException var6) {
         return Eithers.left2_1(var6);
      } catch (ResourceFactory.InvalidResourceException var7) {
         return Eithers.left2_2(var7);
      }
   }

   private static ResourceFactory.ResourceNotFoundException a(ResourceFactory.ResourceNotFoundException var0) {
      return var0;
   }
}
