package com.l7tech.external.assertions.gatewaygraphql.server.resolver.query;

import com.l7tech.external.assertions.gatewaygraphql.EntityTypeInfo;
import com.l7tech.external.assertions.gatewaygraphql.server.data.EntityDTO;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.search.objects.Dependency;
import com.l7tech.server.search.objects.DependentEntity;
import graphql.schema.DataFetchingEnvironment;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public abstract class EntityAwareGraphQLQueryResolver<ET extends Entity, EO extends EntityDTO<ET>> extends BasicGraphQLQueryResolver {
   protected EntityAwareGraphQLQueryResolver(EntityTypeInfo var1, ExecutorService var2) {
      super(var1, var2);
   }

   protected abstract EO toEntityDTO(ET var1);

   protected abstract ET findByName(String var1) throws FindException;

   protected abstract ET findByGoid(Goid var1) throws FindException;

   protected abstract Collection<ET> findAll() throws FindException;

   protected ET findByDependent(DependentEntity var1) throws FindException {
      return this.findByGoid(var1.getEntityHeader().getGoid());
   }

   protected final ET findByDependentQuietly(DependentEntity var1) {
      try {
         return this.findByDependent(var1);
      } catch (Throwable var3) {
         throw var3;
      }
   }

   protected final Collection<ET> findMultipleByDependencies(Collection<Dependency> var1, DependentEntityCacheProvider.DependentEntityCache var2) {
      ArrayList var3 = new ArrayList();

      for (Dependency var5 : var1) {
         DependentEntity var6 = (DependentEntity)var5.getDependent();
         var3.add(var2.get(var6, () -> this.findByDependentQuietly(var6)));
      }

      return var3;
   }

   protected final List<EO> doFindAll(DataFetchingEnvironment var1) throws FindException {
      return this.findAll().stream().map(this::toEntityDTO).filter(Objects::nonNull).collect(Collectors.toList());
   }

   protected final List<EO> doFindMultiple(DataFetchingEnvironment var1, Predicate<ET> var2) throws FindException {
      return this.findAll().stream().filter(var2).map(this::toEntityDTO).filter(Objects::nonNull).collect(Collectors.toList());
   }

   protected final EO doProcessSingle(DataFetchingEnvironment var1, ET var2) {
      return var2 != null ? this.toEntityDTO((ET)var2) : null;
   }

   protected final List<EO> doProcessMultiple(DataFetchingEnvironment var1, Collection<ET> var2) {
      return var2.stream().map(this::toEntityDTO).filter(Objects::nonNull).collect(Collectors.toList());
   }

   protected final EO doFindByName(DataFetchingEnvironment var1, String var2) throws FindException {
      Entity var3 = this.findByName(var2);

      try {
         if (var3 != null) {
            return this.toEntityDTO((ET)var3);
         }
      } catch (FindException var4) {
         throw b(var4);
      }

      return null;
   }

   protected final EO doFindByGoid(DataFetchingEnvironment var1, String var2) throws FindException {
      Entity var3 = this.findByGoid(Goid.parseGoid(var2));

      try {
         if (var3 != null) {
            return this.toEntityDTO((ET)var3);
         }
      } catch (FindException var4) {
         throw b(var4);
      }

      return null;
   }

   private static FindException b(FindException var0) {
      return var0;
   }
}
