com.dell.cpsd.hdp.capability.registry.client.binder.AbstractAmqpCapabilityBindingService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hdp-capability-registry-client Show documentation
Show all versions of hdp-capability-registry-client Show documentation
This repository contains the source code for the capability registry API.
This API exposes the interface through which a consumer or provider interacts with the capability registry.
/**
* Copyright © 2017 Dell Inc. or its subsidiaries. All Rights Reserved.
* Dell EMC Confidential/Proprietary Information
*/
package com.dell.cpsd.hdp.capability.registry.client.binder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import com.dell.cpsd.hdp.capability.registry.api.CapabilityProvider;
import com.dell.cpsd.hdp.capability.registry.api.ProviderEndpoint;
import com.dell.cpsd.hdp.capability.registry.client.CapabilityRegistryException;
import com.dell.cpsd.hdp.capability.registry.client.ICapabilityRegistryLookupManager;
import com.dell.cpsd.hdp.capability.registry.client.callback.ListCapabilityProvidersResponse;
import com.dell.cpsd.service.common.client.exception.ServiceTimeoutException;
/**
*
* Copyright © 2017 Dell Inc. or its subsidiaries. All Rights Reserved.
* Dell EMC Confidential/Proprietary Information
*
*
* @since 1.0
*/
public abstract class AbstractAmqpCapabilityBindingService implements CapabilityBindingService
{
private final ICapabilityRegistryLookupManager capabilityRegistryLookupManager;
private final AmqpAdmin amqpAdmin;
/**
* Constructor
*
* @param capabilityRegistryLookupManager
* The capability register service client
* @param amqpAdmin
* The AMQP administrative operations
*/
public AbstractAmqpCapabilityBindingService(ICapabilityRegistryLookupManager capabilityRegistryLookupManager, AmqpAdmin amqpAdmin)
{
this.capabilityRegistryLookupManager = capabilityRegistryLookupManager;
this.amqpAdmin = amqpAdmin;
}
/**
* {@inheritDoc}
*/
@Override
public List lookupCapabilities(CapabilityMatcher... matchers) throws CapabilityRegistryException,
ServiceTimeoutException
{
if (matchers != null)
{
return lookupCapabilities(Arrays.asList(matchers));
}
return Collections.emptyList();
}
/**
* {@inheritDoc}
*/
@Override
public List lookupCapabilities(List matchers) throws CapabilityRegistryException,
ServiceTimeoutException
{
final ListCapabilityProvidersResponse listCapabilityProvidersResponse = capabilityRegistryLookupManager
.listCapabilityProviders(TimeUnit.SECONDS.toMillis(5));
final List providers = listCapabilityProvidersResponse.getResponse();
Set matched = new HashSet<>();
if (matchers != null)
{
for (CapabilityMatcher matcher : matchers)
{
matched.addAll(matcher.match(providers));
}
}
return new ArrayList<>(matched);
}
/**
* {@inheritDoc}
*/
@Override
public void add(CapabilityData capabilityData) throws CapabilityRegistryException
{
ProviderEndpoint providerEndpoint = capabilityData.getCapability().getProviderEndpoint();
Binding binding = createBinding(providerEndpoint);
amqpAdmin.declareBinding(binding);
}
/**
* {@inheritDoc}
*/
@Override
public void remove(CapabilityData capabilityData) throws CapabilityRegistryException
{
ProviderEndpoint providerEndpoint = capabilityData.getCapability().getProviderEndpoint();
Binding binding = createBinding(providerEndpoint);
amqpAdmin.removeBinding(binding);
}
/**
* Create the necessary binding for the endpoint
*
* @param providerEndpoint
* The provider endpoint
* @return The binding been created
* @throws CapabilityRegistryException
* Thrown if the request fails.
*/
protected abstract Binding createBinding(ProviderEndpoint providerEndpoint) throws CapabilityRegistryException;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy