com.sap.cloud.environment.servicebinding.api.ServiceBindingAccessor Maven / Gradle / Ivy
/*
* Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved.
*/
package com.sap.cloud.environment.servicebinding.api;
import java.util.List;
import java.util.ServiceLoader;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import javax.annotation.Nonnull;
import com.sap.cloud.environment.servicebinding.api.exception.ServiceBindingAccessException;
/**
* Represents a source for {@link ServiceBinding}s.
*/
@FunctionalInterface
public interface ServiceBindingAccessor
{
/**
* Returns {@link ServiceBindingAccessor} instances for implementations that are exposed via the
* Service Loader Pattern.
*
* These instances are useful when the behavior of one (or more) specific {@link ServiceBindingAccessor}s should be
* overwritten while leaving others in their default state.
* Example:
*
*
* final List<ServiceBindingAccessor> defaultInstances = ServiceBindingAccessor.getInstancesViaServiceLoader();
* if( defaultInstances.removeIf(SapVcapServicesServiceBindingAccessor.class::isInstance) ) {
* defaultInstances.add(new SapVcapServicesServiceBindingAccessor(customEnvironmentVariableReader));
* }
*
* final ServiceBindingMerger merger = new ServiceBindingMerger(defaultInstances, ServiceBindingMerger.KEEP_UNIQUE);
* final SimpleServiceBindingCache cache = new SimpleServiceBindingCache(merger);
*
* DefaultServiceBindingAccessor.setInstance(cache);
*
*
* @return A {@link List} of {@link ServiceBindingAccessor} instances created from implementations that are exposed
* via the Service Locator Pattern (see above).
*/
static List getInstancesViaServiceLoader()
{
final ServiceLoader serviceLoader =
ServiceLoader.load(ServiceBindingAccessor.class, ServiceBindingAccessor.class.getClassLoader());
return StreamSupport.stream(serviceLoader.spliterator(), false).collect(Collectors.toList());
}
/**
* Retrieves all {@link ServiceBinding}s that are accessible for this {@link ServiceBindingAccessor}.
*
* @return All accessible {@link ServiceBinding}s.
* @throws ServiceBindingAccessException
* Thrown if anything went wrong while loading the {@link ServiceBinding}s.
*/
@Nonnull
List getServiceBindings()
throws ServiceBindingAccessException;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy