package com.l7tech.server.entity;

import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.EntityManager;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.SaveException;
import com.l7tech.objectmodel.UpdateException;
import com.l7tech.policy.GenericEntity;
import com.l7tech.policy.GenericEntityHeader;
import com.l7tech.policy.InvalidGenericEntityException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public interface GenericEntityManager extends EntityManager<GenericEntity, GenericEntityHeader> {
   <ET extends GenericEntity> void registerClass(@NotNull Class<ET> var1) throws IllegalArgumentException;

   <ET extends GenericEntity> void registerClass(@NotNull Class<ET> var1, @Nullable GenericEntityMetadata var2) throws IllegalArgumentException;

   boolean unRegisterClass(String var1);

   boolean isRegistered(String var1);

   <ET extends GenericEntity> EntityManager<ET, GenericEntityHeader> getEntityManager(@NotNull Class<ET> var1);

   <ET extends GenericEntity> ET findByGenericClassAndPrimaryKey(@NotNull Class<ET> var1, Goid var2) throws FindException;

   <ET extends GenericEntity> Collection<ET> findAll(Class<ET> var1) throws FindException;

   Collection<GenericEntityHeader> findAllHeaders(@NotNull Class<? extends GenericEntity> var1) throws FindException;

   Collection<GenericEntityHeader> findAllHeaders(@NotNull Class<? extends GenericEntity> var1, int var2, int var3) throws FindException;

   <ET extends GenericEntity> Goid save(@NotNull Class<ET> var1, ET var2) throws SaveException;

   <ET extends GenericEntity> void save(@NotNull Goid var1, @NotNull Class<ET> var2, ET var3) throws SaveException;

   <ET extends GenericEntity> Integer getVersion(@NotNull Class<ET> var1, Goid var2) throws FindException;

   <ET extends GenericEntity> Map<Goid, Integer> findVersionMap(@NotNull Class<ET> var1) throws FindException;

   <ET extends GenericEntity> void delete(@NotNull Class<ET> var1, ET var2) throws DeleteException;

   <ET extends GenericEntity> ET getCachedEntity(@NotNull Class<ET> var1, Goid var2, int var3) throws FindException;

   <ET extends GenericEntity> ET findByUniqueName(@NotNull Class<ET> var1, String var2) throws FindException;

   GenericEntity findByUniqueName(@NotNull String var1, String var2) throws FindException;

   <ET extends GenericEntity> void delete(@NotNull Class<ET> var1, Goid var2) throws DeleteException, FindException;

   <ET extends GenericEntity> void update(@NotNull Class<ET> var1, ET var2) throws UpdateException;

   <ET extends GenericEntity> ET findByHeader(@NotNull Class<ET> var1, EntityHeader var2) throws FindException;

   <ET extends GenericEntity> List<ET> findPagedMatching(
      @NotNull Class<ET> var1, int var2, int var3, @Nullable String var4, @Nullable Boolean var5, @Nullable Map<String, List<Object>> var6
   ) throws FindException;

   <ET extends GenericEntity> ET asConcreteEntity(GenericEntity var1) throws InvalidGenericEntityException;
}
