package org.apereo.cas.web.support;
import org.apereo.cas.authentication.principal.ServiceFactory;
import org.apereo.cas.authentication.principal.WebApplicationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
/**
* Abstract class for handling argument extraction.
*
* @author Scott Battaglia
* @since 3.1.2
*/
public abstract class AbstractArgumentExtractor implements ArgumentExtractor {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractArgumentExtractor.class);
/**
* The factory responsible for creating service objects based on the arguments extracted.
*/
protected List<ServiceFactory<? extends WebApplicationService>> serviceFactoryList;
/**
* Default extractor initiation.
*/
public AbstractArgumentExtractor() {
this.serviceFactoryList = new ArrayList<>();
}
/**
* Instantiates a new argument extractor.
*
* @param serviceFactory the service factory
*/
public AbstractArgumentExtractor(final ServiceFactory<? extends WebApplicationService> serviceFactory) {
this.serviceFactoryList = new ArrayList<>();
this.serviceFactoryList.add(serviceFactory);
}
/**
* Instantiates a new argument extractor.
*
* @param serviceFactoryList the service factory list
*/
public AbstractArgumentExtractor(final List<ServiceFactory<? extends WebApplicationService>> serviceFactoryList) {
this.serviceFactoryList = new ArrayList<>();
this.serviceFactoryList.addAll(serviceFactoryList);
}
@Override
public WebApplicationService extractService(final HttpServletRequest request) {
final WebApplicationService service = extractServiceInternal(request);
if (service == null) {
LOGGER.debug("Extractor did not generate service.");
} else {
LOGGER.debug("Extractor generated service type [{}] for: [{}]", service.getClass().getName(), service.getId());
}
return service;
}
/**
* Extract service from the request.
*
* @param request the request
* @return the web application service
*/
protected abstract WebApplicationService extractServiceInternal(HttpServletRequest request);
public ServiceFactory<? extends WebApplicationService> getServiceFactory() {
return this.serviceFactoryList.get(0);
}
@Override
public List<ServiceFactory<? extends WebApplicationService>> getServiceFactories() {
return this.serviceFactoryList;
}
}