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

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