package alien4cloud.security.groups;
import java.util.List;
import java.util.Map;
import alien4cloud.dao.model.GetMultipleDataResult;
import alien4cloud.security.model.Group;
/**
* DAO to manage groups in a store.
*
* @author igor ngouagna
*/
public interface IAlienGroupDao {
/**
* Search group by id
*
* @param id id of the group
* @return the group if found, null otherwise
*/
Group find(String id);
/**
* Create/update a group in the store.
*
* @param group The group to store.
*/
void save(Group group);
/**
* Delete a group from the store, given its name.
*
* @param groupId The id of the group to delete.
*
*/
void delete(String groupId);
/**
* Read a group from the store.
*
* @param groupName The group's name.
*/
boolean isGroupWithNameExist(String groupName);
/**
* Search for groups.
*
* @param searchQuery the search query text.
* @param filters filters to apply
* @param from offset from the first result you want to fetch.
* @param size maximum amount of {@link Group} to be returned.
*/
GetMultipleDataResult search(String searchQuery, Map<String, String[]> filters, int from, int size);
/**
* Find group with filters
*
* @param filters
* @param maxElements
* @return
*/
GetMultipleDataResult find(Map<String, String[]> filters, int maxElements);
/**
* Read groups from the store.
*
* @param ids an array of unique ids.
*/
List<Group> find(String... ids);
/**
* Find a group by name
*
* @return
*/
Group findByName(String groupName);
}