package org.apereo.cas.services;
import org.apereo.cas.authentication.principal.Service;
import java.util.Collection;
import java.util.function.Predicate;
/**
* Manages the storage, retrieval, and matching of Services wishing to use CAS
* and services that have been registered with CAS.
*
* @author Scott Battaglia
* @since 3.1
*/
public interface ServicesManager {
/**
* Register a service with CAS, or update an existing an entry.
*
* @param registeredService the RegisteredService to update or add.
* @return newly persisted RegisteredService instance
*/
RegisteredService save(RegisteredService registeredService);
/**
* Delete the entry for this RegisteredService.
*
* @param id the id of the registeredService to delete.
* @return the registered service that was deleted, null if there was none.
*/
RegisteredService delete(long id);
/**
* Find a RegisteredService by matching with the supplied service.
*
* @param serviceId the service to match with.
* @return the RegisteredService that matches the supplied service.
*/
RegisteredService findServiceBy(String serviceId);
/**
* Find a RegisteredService by matching with the supplied service.
*
* @param service the service to match with.
* @return the RegisteredService that matches the supplied service.
*/
RegisteredService findServiceBy(Service service);
/**
* Find a collection of services by type.
*
* @param clazz the clazz
* @return the collection of services that matches the supplied type
*/
Collection<RegisteredService> findServiceBy(Predicate<RegisteredService> clazz);
/**
* Find service by type.
*
* @param <T> the type parameter
* @param serviceId the service id
* @param clazz the clazz
* @return the t
*/
<T extends RegisteredService> T findServiceBy(Service serviceId, Class<T> clazz);
/**
* Find service by type.
*
* @param <T> the type parameter
* @param serviceId the service id
* @param clazz the clazz
* @return the t
*/
<T extends RegisteredService> T findServiceBy(String serviceId, Class<T> clazz);
/**
* Find a RegisteredService by matching with the supplied id.
*
* @param id the id to match with.
* @return the RegisteredService that matches the supplied service.
*/
RegisteredService findServiceBy(long id);
/**
* Retrieve the collection of all registered services.
*
* @return the collection of all services.
*/
Collection<RegisteredService> getAllServices();
/**
* Convenience method to let one know if a service exists in the data store.
*
* @param service the service to check.
* @return true if it exists, false otherwise.
*/
boolean matchesExistingService(Service service);
/**
* Convenience method to let one know if a service exists in the data store.
*
* @param service the service to check.
* @return true if it exists, false otherwise.
*/
boolean matchesExistingService(String service);
/**
* Inform the ServicesManager to reload its list of services if its cached
* them. Note that this is a suggestion and that ServicesManagers are free
* to reload whenever they want.
*/
void load();
/**
* Return a count of loaded services by this manager.
*
* @return the count/size of registry.
*/
default int count() {
return 0;
}
}