All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sap.cds.services.runtime.CdsRuntimeConfigurer Maven / Gradle / Ivy

/**************************************************************************
 * (C) 2019-2024 SAP SE or an SAP affiliate company. All rights reserved. *
 **************************************************************************/
package com.sap.cds.services.runtime;

import java.io.IOException;
import java.util.function.Supplier;

import com.sap.cds.reflect.CdsModel;
import com.sap.cds.services.CoreFactory;
import com.sap.cds.services.Service;
import com.sap.cds.services.ServiceCatalog;
import com.sap.cds.services.environment.ApplicationInfoProvider;
import com.sap.cds.services.environment.PropertiesProvider;
import com.sap.cds.services.environment.ServiceBindingProvider;
import com.sap.cds.services.messages.LocalizedMessageProvider;

public interface CdsRuntimeConfigurer {

	/**
	 * Creates a new {@link CdsRuntimeConfigurer}.
	 *
	 * In addition it automatically adds all {@link CdsRuntimeConfiguration} modules
	 * registered through {@link ExtendedServiceLoader} mechanisms.
	 *
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	static CdsRuntimeConfigurer create() {
		return CoreFactory.INSTANCE.createCdsRuntimeConfigurer(null);
	}

	/**
	 * Creates a new {@link CdsRuntimeConfigurer} with the given {@link PropertiesProvider}.
	 *
	 * In addition it automatically adds all {@link CdsRuntimeConfiguration} modules
	 * registered through {@link ExtendedServiceLoader} mechanisms.
	 *
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	static CdsRuntimeConfigurer create(PropertiesProvider propertiesProvider) {
		return CoreFactory.INSTANCE.createCdsRuntimeConfigurer(propertiesProvider);
	}

	/**
	 * The {@link CdsRuntime} that is configured by this {@link CdsRuntimeConfigurer}.
	 * It can be retrieved at any time, although it might get enriched by subsequent calls to this {@link CdsRuntimeConfigurer}.
	 *
	 * @return the {@link CdsRuntime}
	 */
	CdsRuntime getCdsRuntime();

	/**
	 * Adds a given {@link CdsRuntimeConfiguration} to the {@link CdsRuntimeConfigurer}.
	 * This configuration will be applied in parts, when the respective bulk operations are triggered,
	 * for example {@link #serviceConfigurations()} or {@link #eventHandlerConfigurations()}
	 *
	 * @param configuration the {@link CdsRuntimeConfiguration}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer configuration(CdsRuntimeConfiguration configuration);

	/**
	 * Applies all environment configuration modules to the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer environmentConfigurations();

	/**
	 * Sets the {@link ServiceBindingProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param provider the {@link ServiceBindingProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer environment(ServiceBindingProvider provider);

	/**
	 * Sets the {@link ApplicationInfoProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param provider the {@link ApplicationInfoProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer environment(ApplicationInfoProvider provider);

	/**
	 * Sets the default CDS model on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer cdsModel();

	/**
	 * Sets the CDS model from the specified CSN file path on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param csnPath the CSN file path
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer cdsModel(String csnPath);

	/**
	 * Sets the given {@link CdsModel} on the {@link CdsRuntime} of this
	 * {@link CdsRuntimeConfigurer}
	 *
	 * @param model the {@link CdsModel}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer cdsModel(CdsModel model);

	/**
	 * Applies all service configuration modules to the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer serviceConfigurations();

	/**
	 * Registers a given {@link Service} in the {@link ServiceCatalog} of the {@link CdsRuntime}.
	 *
	 * @param service the {@link Service}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer service(Service service);

	/**
	 * Applies all event handler configuration modules to the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer eventHandlerConfigurations();

	/**
	 * Registers an event handler instance with the {@link CdsRuntime}.
	 * @param handler the event handler instance
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer eventHandler(Object handler);

	/**
	 * Registers an event handler class with the {@link CdsRuntime}, given a factory to create instances of the event handler
	 *
	 * @param             the event handler type
	 * @param handlerClass   the event handler class
	 * @param handlerFactory the supplier for instances of the event handler
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	 CdsRuntimeConfigurer eventHandler(Class handlerClass, Supplier handlerFactory);

	/**
	 * Scans the given package for event handler classes and registers them on the {@link CdsRuntime}
	 *
	 * @param packageName the name of the package
	 * @return the {@link CdsRuntimeConfigurer}
	 *
	 * @throws IOException if the classes of the package can't be loaded from the
	 *                     classpath
	 */
	CdsRuntimeConfigurer packageScan(String packageName) throws IOException;

	/**
	 * Applies all provider configuration modules to the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer providerConfigurations();

	/**
	 * Sets the given {@link CdsModelProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param provider the {@link CdsModelProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer provider(CdsModelProvider provider);

	/**
	 * Sets the given {@link AuthenticationInfoProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param provider the {@link AuthenticationInfoProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer provider(AuthenticationInfoProvider provider);

	/**
	 * Sets the given {@link UserInfoProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param provider the {@link UserInfoProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer provider(UserInfoProvider provider);

	/**
	 * Sets the given {@link ParameterInfoProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param provider the {@link ParameterInfoProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer provider(ParameterInfoProvider provider);

	/**
	 * Sets the given {@link FeatureTogglesInfoProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 * @param provider the {@link FeatureTogglesInfoProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer provider(FeatureTogglesInfoProvider provider);

	/**
	 * Sets the given {@link LocalizedMessageProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param provider the {@link LocalizedMessageProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer provider(LocalizedMessageProvider provider);

	/**
	 * Sets the generic {@link CdsProvider} on the {@link CdsRuntime} of this {@link CdsRuntimeConfigurer}
	 *
	 * @param provider the {@link CdsProvider}
	 * @return the {@link CdsRuntimeConfigurer}
	 */
	CdsRuntimeConfigurer provider(CdsProvider provider);

	/**
	 * Completes the {@link CdsRuntimeConfigurer} to prevent any further modifications of the {@link CdsRuntime}
	 *
	 * @return the {@link CdsRuntime} in its final state
	 */
	CdsRuntime complete();

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy