Package com.bazaarvoice.ostrich.discovery

Source Code of com.bazaarvoice.ostrich.discovery.ConfiguredFixedHostDiscoverySource

package com.bazaarvoice.ostrich.discovery;

import com.bazaarvoice.ostrich.HostDiscovery;
import com.bazaarvoice.ostrich.HostDiscoverySource;
import com.bazaarvoice.ostrich.ServiceEndPoint;
import com.bazaarvoice.ostrich.ServiceEndPointBuilder;
import com.google.common.collect.Lists;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import static com.google.common.base.Preconditions.checkNotNull;

/**
* Convenience class for configuring FixedHostDiscovery objects in Dropwizard.
* <p>
* To make this directly configurable via a Dropwizard YAML configuration file, subclass this class, provide a concrete
* Payload class implementation that the Dropwizard YAML parser can use to construct the Map constructor argument, and
* mark the single argument constructor with @JsonCreator.
*/
public class ConfiguredFixedHostDiscoverySource<Payload> implements HostDiscoverySource {
    /** Map of end point id to payload data. */
    private final Map<String, Payload> _endPoints;

    /**
     * Creates an empty {@link HostDiscoverySource} that always returns {@code null}, causing the service pool builder
     * to try the next {@code HostDiscoverySource} (typically ZooKeeper).
     */
    public ConfiguredFixedHostDiscoverySource() {
        this(Collections.<String, Payload>emptyMap());
    }

    /**
     * Creates a {@link HostDiscoverySource} that, if the map is non-empty, can override other host discovery sources
     * such as ZooKeeper with a fixed set of end points.
     */
    public ConfiguredFixedHostDiscoverySource(Map<String, Payload> endPoints) {
        _endPoints = checkNotNull(endPoints);
    }

    @Override
    public HostDiscovery forService(String serviceName) {
        if (_endPoints.isEmpty()) {
            return null;
        }

        List<ServiceEndPoint> endPoints = Lists.newArrayListWithCapacity(_endPoints.size());
        for (Map.Entry<String, Payload> entry : _endPoints.entrySet()) {
            String id = entry.getKey();
            Payload payload = entry.getValue();
            endPoints.add(new ServiceEndPointBuilder()
                    .withServiceName(serviceName)
                    .withId(id)
                    .withPayload(serialize(serviceName, id, payload))
                    .build());
        }
        return new FixedHostDiscovery(endPoints);
    }

    /**
     * Subclasses may override this to customize the persistent format of the payload.
     */
    @SuppressWarnings("UnusedParameters")
    protected String serialize(String serviceName, String id, Payload payload) {
        return String.valueOf(payload);
    }

    @Override
    public String toString() {
        return _endPoints.keySet().toString();
    }
}
TOP

Related Classes of com.bazaarvoice.ostrich.discovery.ConfiguredFixedHostDiscoverySource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.