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.EntityHeader;
import com.l7tech.objectmodel.EntityManager;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.GuidBasedEntityManager;
import com.l7tech.objectmodel.GuidEntity;
import com.l7tech.objectmodel.PersistentEntity;
import com.l7tech.objectmodel.folder.Folder;
import com.l7tech.objectmodel.folder.FolderedEntityManager;
import com.l7tech.server.folder.FolderManager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.function.Predicate;

public abstract class EntityManagerAwareGraphQLQueryResolver<ET extends PersistentEntity, HT extends EntityHeader, EM extends EntityManager<ET, HT>, EO extends EntityDTO<ET>>
   extends EntityAwareGraphQLQueryResolver<ET, EO> {
   protected final EM entityManager;

   protected EntityManagerAwareGraphQLQueryResolver(EntityTypeInfo var1, ExecutorService var2, EM var3) {
      super(var1, var2);
      this.entityManager = (EM)var3;
   }

   protected ET findByName(String var1) throws FindException {
      return (ET)this.entityManager.findByUniqueName(var1);
   }

   protected final ET findByGoid(Goid var1) throws FindException {
      return (ET)this.entityManager.findByPrimaryKey(var1);
   }

   protected final <GET extends GuidEntity> GET findByGuid(String var1) throws FindException {
      return (GET)((GuidBasedEntityManager)this.entityManager).findByGuid(var1);
   }

   @Override
   protected Collection<ET> findAll() throws FindException {
      return this.entityManager.findAll();
   }

   protected final List<ET> findMultipleInFolder(Folder var1, FolderManager var2, Predicate<ET> var3) throws FindException {
      ArrayList var4 = new ArrayList();
      var4.add(var1);
      var2.findAll().stream().filter(var1::isParentOf).forEach(var4::add);
      ArrayList var5 = new ArrayList();

      for (Folder var7 : var4) {
         ((FolderedEntityManager)this.entityManager).findByFolder(var7.getGoid()).stream().filter(var3).forEach(var5::add);
      }

      return var5;
   }
}
