package com.l7tech.identity;

import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.EntityHeaderSet;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.IdentityHeader;
import com.l7tech.objectmodel.ObjectNotFoundException;
import com.l7tech.objectmodel.SaveException;
import com.l7tech.objectmodel.UpdateException;
import java.util.Collection;
import java.util.Set;
import org.jetbrains.annotations.NotNull;

public interface GroupManager<UT extends User, GT extends Group> {
   GT findByPrimaryKey(String var1) throws FindException;

   void delete(GT var1) throws DeleteException;

   void delete(String var1) throws DeleteException, ObjectNotFoundException;

   void deleteAll(Goid var1) throws DeleteException, ObjectNotFoundException;

   void deleteAllVirtual(Goid var1) throws DeleteException, ObjectNotFoundException;

   String saveGroup(GT var1) throws SaveException;

   void update(GT var1) throws UpdateException, FindException;

   String save(GT var1, Set<IdentityHeader> var2) throws SaveException;

   String save(Goid var1, GT var2, Set<IdentityHeader> var3) throws SaveException;

   void update(GT var1, Set<IdentityHeader> var2) throws UpdateException, FindException;

   Collection<IdentityHeader> search(String var1) throws FindException;

   Class getImpClass();

   GT reify(GroupBean var1);

   boolean isMember(User var1, GT var2) throws FindException;

   void addUsers(GT var1, Set<UT> var2) throws FindException, UpdateException;

   void removeUsers(GT var1, Set<UT> var2) throws FindException, UpdateException;

   void addUser(UT var1, Set<GT> var2) throws FindException, UpdateException;

   void removeUser(UT var1, Set<GT> var2) throws FindException, UpdateException;

   void addUser(UT var1, GT var2) throws FindException, UpdateException;

   void removeUser(UT var1, GT var2) throws FindException, UpdateException;

   Set<IdentityHeader> getGroupHeaders(UT var1) throws FindException;

   Set<IdentityHeader> getGroupHeaders(String var1) throws FindException;

   @NotNull
   Set<IdentityHeader> getGroupHeadersForNestedGroup(@NotNull String var1) throws FindException;

   void setGroupHeaders(UT var1, Set<IdentityHeader> var2) throws FindException, UpdateException;

   void setGroupHeaders(String var1, Set<IdentityHeader> var2) throws FindException, UpdateException;

   Set<IdentityHeader> getUserHeaders(GT var1) throws FindException;

   Set<IdentityHeader> getUserHeaders(String var1) throws FindException;

   void setUserHeaders(GT var1, Set<IdentityHeader> var2) throws FindException, UpdateException;

   void setUserHeaders(String var1, Set<IdentityHeader> var2) throws FindException, UpdateException;

   EntityHeaderSet<IdentityHeader> findAllHeaders() throws FindException;

   Collection findAll() throws FindException;

   GT findByName(String var1) throws FindException;
}
