package io.katharsis.dispatcher.registry;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.katharsis.dispatcher.controller.BaseController;
import io.katharsis.errorhandling.mapper.DefaultExceptionMapperLookup;
import io.katharsis.resource.include.IncludeLookupSetter;
import io.katharsis.resource.registry.ResourceRegistry;
import io.katharsis.utils.parser.TypeParser;
import java.util.LinkedList;
import java.util.List;
/**
* A builder class which holds all of the Katharsis controllers, which must be placed in
* {@link io.katharsis.dispatcher.controller} package.
*/
public class ControllerRegistryBuilder {
private final ResourceRegistry resourceRegistry;
private final TypeParser typeParser;
private final ObjectMapper objectMapper;
private final IncludeLookupSetter includeFieldSetter;
public ControllerRegistryBuilder(@SuppressWarnings("SameParameterValue") ResourceRegistry resourceRegistry, @SuppressWarnings("SameParameterValue") TypeParser typeParser,
@SuppressWarnings("SameParameterValue") ObjectMapper objectMapper) {
this.resourceRegistry = resourceRegistry;
this.typeParser = typeParser;
this.objectMapper = objectMapper;
this.includeFieldSetter = new IncludeLookupSetter(resourceRegistry);
}
/**
* Uses the {@link DefaultExceptionMapperLookup} to collect all controllers.
*
* @return an instance of {@link ControllerRegistry} with initialized controllers
*/
public ControllerRegistry build() {
return build(new DefaultControllerLookup(resourceRegistry, typeParser, objectMapper, includeFieldSetter));
}
/**
* Uses the given {@link ControllerLookup} to get all controllers.
*
* @param lookup an instance of a lookup class to get the controllers
* @return an instance of {@link ControllerRegistry} with initialized controllers
*/
private static ControllerRegistry build(ControllerLookup lookup) {
List<BaseController> controllers = new LinkedList<>();
controllers.addAll(lookup.getControllers());
return new ControllerRegistry(controllers);
}
}