// Path: katharsis-core/src/main/java/io/katharsis/legacy/internal/QueryParamsAdapterBuilder.java
// public class QueryParamsAdapterBuilder implements QueryAdapterBuilder {
// 
// 	private QueryParamsBuilder queryParamsBuilder;
// 	private ModuleRegistry moduleRegistry;
// 
// 	public QueryParamsAdapterBuilder(QueryParamsBuilder queryParamsBuilder, ModuleRegistry moduleRegistry) {
// 		this.queryParamsBuilder = queryParamsBuilder;
// 		this.moduleRegistry = moduleRegistry;
// 	}
// 
// 	@Override
// 	public QueryAdapter build(ResourceInformation info, Map<String, Set<String>> parameters) {
// 		SimpleQueryParamsParserContext context = new SimpleQueryParamsParserContext(parameters, info);
// 		return new QueryParamsAdapter(info, queryParamsBuilder.buildQueryParams(context), moduleRegistry);
// 	}
// }
// 
// Path: katharsis-core/src/main/java/io/katharsis/repository/Repository.java
// public interface Repository {
// 
// }


import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import net.jodah.typetools.TypeResolver;
import io.katharsis.core.internal.dispatcher.ControllerRegistry;
import io.katharsis.core.internal.dispatcher.ControllerRegistryBuilder;
import io.katharsis.core.internal.dispatcher.RequestDispatcher;
import io.katharsis.core.internal.exception.ExceptionMapperLookup;
import io.katharsis.core.internal.exception.ExceptionMapperRegistry;
import io.katharsis.core.internal.exception.ExceptionMapperRegistryBuilder;
import io.katharsis.core.internal.jackson.JsonApiModuleBuilder;
import io.katharsis.core.internal.query.QueryAdapterBuilder;
import io.katharsis.core.internal.query.QuerySpecAdapterBuilder;
import io.katharsis.core.internal.registry.ResourceRegistryImpl;
import io.katharsis.core.internal.repository.information.DefaultRelationshipRepositoryInformationBuilder;
import io.katharsis.core.internal.repository.information.DefaultResourceRepositoryInformationBuilder;
import io.katharsis.core.internal.resource.AnnotationResourceInformationBuilder;
import io.katharsis.core.internal.resource.DocumentMapper;
import io.katharsis.core.internal.utils.ClassUtils;
import io.katharsis.core.internal.utils.PreconditionUtil;
import io.katharsis.core.properties.KatharsisProperties;
import io.katharsis.errorhandling.mapper.JsonApiExceptionMapper;
import io.katharsis.legacy.internal.QueryParamsAdapterBuilder;
import io.katharsis.legacy.locator.JsonServiceLocator;
import io.katharsis.legacy.locator.SampleJsonServiceLocator;
import io.katharsis.legacy.queryParams.QueryParamsBuilder;
import io.katharsis.legacy.repository.RelationshipRepository;
import io.katharsis.legacy.repository.ResourceRepository;
import io.katharsis.legacy.repository.annotations.JsonApiRelationshipRepository;
import io.katharsis.legacy.repository.annotations.JsonApiResourceRepository;
import io.katharsis.module.Module;
import io.katharsis.module.ModuleRegistry;
import io.katharsis.module.ServiceDiscovery;
import io.katharsis.module.ServiceDiscoveryFactory;
import io.katharsis.module.SimpleModule;
import io.katharsis.queryspec.DefaultQuerySpecDeserializer;
import io.katharsis.queryspec.QuerySpecDeserializer;
import io.katharsis.repository.RelationshipRepositoryV2;
import io.katharsis.repository.Repository;
import io.katharsis.repository.ResourceRepositoryV2;
import io.katharsis.repository.filter.DocumentFilter;
import io.katharsis.resource.information.ResourceFieldNameTransformer;
import io.katharsis.resource.registry.ConstantServiceUrlProvider;
import io.katharsis.resource.registry.ResourceRegistry;
import io.katharsis.resource.registry.ServiceUrlProvider;
				String serviceUrl = buildServiceUrl(resourceDefaultDomain, webPathPrefix);
				serviceUrlProvider = new ConstantServiceUrlProvider(serviceUrl);
			} else {
				// serviceUrl is obtained from incoming request context
				serviceUrlProvider = defaultServiceUrlProvider;
			}
		}
		PreconditionUtil.assertNotNull("expected serviceUrlProvider", serviceUrlProvider);
	}

	private String getProperty(String key) {
		if (propertiesProvider != null)
			return propertiesProvider.getProperty(key);
		return null;
	}

	private static String buildServiceUrl(String resourceDefaultDomain, String webPathPrefix) {
		return resourceDefaultDomain + (webPathPrefix != null ? webPathPrefix : "");
	}

	public RequestDispatcher getRequestDispatcher() {
		PreconditionUtil.assertNotNull("expected requestDispatcher", requestDispatcher);
		return requestDispatcher;
	}

	public ResourceRegistry getResourceRegistry() {
		return resourceRegistry;
	}

	public ObjectMapper getObjectMapper() {
// Path: katharsis-core/src/main/java/io/katharsis/legacy/internal/QueryParamsAdapterBuilder.java
// public class QueryParamsAdapterBuilder implements QueryAdapterBuilder {
// 
// 	private QueryParamsBuilder queryParamsBuilder;
// 	private ModuleRegistry moduleRegistry;
// 
// 	public QueryParamsAdapterBuilder(QueryParamsBuilder queryParamsBuilder, ModuleRegistry moduleRegistry) {
// 		this.queryParamsBuilder = queryParamsBuilder;
// 		this.moduleRegistry = moduleRegistry;
// 	}
// 
// 	@Override
// 	public QueryAdapter build(ResourceInformation info, Map<String, Set<String>> parameters) {
// 		SimpleQueryParamsParserContext context = new SimpleQueryParamsParserContext(parameters, info);
// 		return new QueryParamsAdapter(info, queryParamsBuilder.buildQueryParams(context), moduleRegistry);
// 	}
// }
// 
// Path: katharsis-core/src/main/java/io/katharsis/repository/Repository.java
// public interface Repository {
// 
// }


// Path: katharsis-core/src/main/java/io/katharsis/core/internal/boot/KatharsisBoot.java
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import net.jodah.typetools.TypeResolver;
import io.katharsis.core.internal.dispatcher.ControllerRegistry;
import io.katharsis.core.internal.dispatcher.ControllerRegistryBuilder;
import io.katharsis.core.internal.dispatcher.RequestDispatcher;
import io.katharsis.core.internal.exception.ExceptionMapperLookup;
import io.katharsis.core.internal.exception.ExceptionMapperRegistry;
import io.katharsis.core.internal.exception.ExceptionMapperRegistryBuilder;
import io.katharsis.core.internal.jackson.JsonApiModuleBuilder;
import io.katharsis.core.internal.query.QueryAdapterBuilder;
import io.katharsis.core.internal.query.QuerySpecAdapterBuilder;
import io.katharsis.core.internal.registry.ResourceRegistryImpl;
import io.katharsis.core.internal.repository.information.DefaultRelationshipRepositoryInformationBuilder;
import io.katharsis.core.internal.repository.information.DefaultResourceRepositoryInformationBuilder;
import io.katharsis.core.internal.resource.AnnotationResourceInformationBuilder;
import io.katharsis.core.internal.resource.DocumentMapper;
import io.katharsis.core.internal.utils.ClassUtils;
import io.katharsis.core.internal.utils.PreconditionUtil;
import io.katharsis.core.properties.KatharsisProperties;
import io.katharsis.errorhandling.mapper.JsonApiExceptionMapper;
import io.katharsis.legacy.internal.QueryParamsAdapterBuilder;
import io.katharsis.legacy.locator.JsonServiceLocator;
import io.katharsis.legacy.locator.SampleJsonServiceLocator;
import io.katharsis.legacy.queryParams.QueryParamsBuilder;
import io.katharsis.legacy.repository.RelationshipRepository;
import io.katharsis.legacy.repository.ResourceRepository;
import io.katharsis.legacy.repository.annotations.JsonApiRelationshipRepository;
import io.katharsis.legacy.repository.annotations.JsonApiResourceRepository;
import io.katharsis.module.Module;
import io.katharsis.module.ModuleRegistry;
import io.katharsis.module.ServiceDiscovery;
import io.katharsis.module.ServiceDiscoveryFactory;
import io.katharsis.module.SimpleModule;
import io.katharsis.queryspec.DefaultQuerySpecDeserializer;
import io.katharsis.queryspec.QuerySpecDeserializer;
import io.katharsis.repository.RelationshipRepositoryV2;
import io.katharsis.repository.Repository;
import io.katharsis.repository.ResourceRepositoryV2;
import io.katharsis.repository.filter.DocumentFilter;
import io.katharsis.resource.information.ResourceFieldNameTransformer;
import io.katharsis.resource.registry.ConstantServiceUrlProvider;
import io.katharsis.resource.registry.ResourceRegistry;
import io.katharsis.resource.registry.ServiceUrlProvider;

				String serviceUrl = buildServiceUrl(resourceDefaultDomain, webPathPrefix);
				serviceUrlProvider = new ConstantServiceUrlProvider(serviceUrl);
			} else {
				// serviceUrl is obtained from incoming request context
				serviceUrlProvider = defaultServiceUrlProvider;
			}
		}
		PreconditionUtil.assertNotNull("expected serviceUrlProvider", serviceUrlProvider);
	}

	private String getProperty(String key) {
		if (propertiesProvider != null)
			return propertiesProvider.getProperty(key);
		return null;
	}

	private static String buildServiceUrl(String resourceDefaultDomain, String webPathPrefix) {
		return resourceDefaultDomain + (webPathPrefix != null ? webPathPrefix : "");
	}

	public RequestDispatcher getRequestDispatcher() {
		PreconditionUtil.assertNotNull("expected requestDispatcher", requestDispatcher);
		return requestDispatcher;
	}

	public ResourceRegistry getResourceRegistry() {
		return resourceRegistry;
	}

	public ObjectMapper getObjectMapper() {
		if (objectMapper == null) {