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

io.airlift.airship.shared.RepositorySet Maven / Gradle / Ivy

The newest version!
package io.airlift.airship.shared;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;

import javax.inject.Inject;
import java.net.URI;
import java.util.Set;

import static com.google.common.collect.Sets.newTreeSet;

public class RepositorySet implements Repository
{
    private final Set repositories;

    @Inject
    public RepositorySet(Set repositories)
    {
        Preconditions.checkNotNull(repositories, "repositories is null");
        this.repositories = ImmutableSet.copyOf(repositories);
    }

    @Override
    public String configShortName(String config)
    {
        if (!config.startsWith("@")) {
            return null;
        }
        String noAtSign = config.substring(1);

        for (Repository repository : repositories) {
            String shortName = repository.configShortName(config);
            if (!config.equals(shortName) && !noAtSign.endsWith(shortName)) {
                return shortName;
            }
        }
        return noAtSign.replaceAll("[:%/ !$]", "_");
    }

    @Override
    public String configRelativize(String config)
    {
        Set relativeConfigs = newTreeSet();
        for (Repository repository : repositories) {
            String relativeConfig = repository.configRelativize(config);
            if (relativeConfig != null) {
                relativeConfigs.add(relativeConfig);
            }
        }
        
        // if we end up with more than one form for the relative config, just return the absolute config
        if (relativeConfigs.size() != 1) {
            return config;
        }
        return relativeConfigs.iterator().next();
    }

    @Override
    public String configResolve(String config)
    {
        Set configs = newTreeSet();
        for (Repository repository : repositories) {
            String resolved = repository.configResolve(config);
            if (resolved != null) {
                configs.add(resolved);
            }
        }

        if (configs.size() > 1) {
            throw new RuntimeException(String.format("Ambiguous config %s matched %s", config, configs));
        }

        if (configs.isEmpty()) {
            return null;
        }

        return configs.iterator().next();
    }


    @Override
    public String configUpgrade(String config, String version)
    {
        Set configs = newTreeSet();
        for (Repository repository : repositories) {
            String resolved = repository.configUpgrade(config, version);
            if (resolved != null) {
                configs.add(resolved);
            }
        }

        if (configs.size() > 1) {
            throw new RuntimeException(String.format("Ambiguous upgrade version %s for config %s matched %s", version, config, configs));
        }

        if (configs.isEmpty()) {
            return null;
        }

        return configs.iterator().next();
    }

    @Override
    public boolean configEqualsIgnoreVersion(String config1, String config2)
    {
        for (Repository repository : repositories) {
            if (repository.configEqualsIgnoreVersion(config1, config2)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public URI configToHttpUri(String config)
    {
        Set httpUris = newTreeSet();
        for (Repository repository : repositories) {
            URI httpUri = repository.configToHttpUri(config);
            if (httpUri != null) {
                httpUris.add(httpUri);
            }
        }

        if (httpUris.size() > 1) {
            throw new RuntimeException(String.format("Ambiguous config %s found %s", config, httpUris));
        }

        if (httpUris.isEmpty()) {
            return null;
        }

        return httpUris.iterator().next();
    }

    @Override
    public String binaryRelativize(String binary)
    {
        Set relativeBinaries = newTreeSet();
        for (Repository repository : repositories) {
            String relativeBinary = repository.binaryRelativize(binary);
            if (relativeBinary != null) {
                relativeBinaries.add(relativeBinary);
            }
        }

        // if we end up with more than one form for the relative binary, just return the absolute binary
        if (relativeBinaries.size() != 1) {
            return binary;
        }
        return relativeBinaries.iterator().next();
    }

    @Override
    public String binaryResolve(String binary)
    {
        Set binaries = newTreeSet();
        for (Repository repository : repositories) {
            String resolved = repository.binaryResolve(binary);
            if (resolved != null) {
                binaries.add(resolved);
            }
        }

        if (binaries.size() > 1) {
            throw new RuntimeException(String.format("Ambiguous binary %s matched %s", binary, binaries));
        }

        if (binaries.isEmpty()) {
            return null;
        }

        return binaries.iterator().next();
    }

    @Override
    public String binaryUpgrade(String binary, String version)
    {
        Set binaries = newTreeSet();
        for (Repository repository : repositories) {
            String resolved = repository.binaryUpgrade(binary, version);
            if (resolved != null) {
                binaries.add(resolved);
            }
        }

        if (binaries.size() > 1) {
            throw new RuntimeException(String.format("Ambiguous upgrade version %s for binary %s matched %s", version, binary, binaries));
        }

        if (binaries.isEmpty()) {
            return null;
        }

        return binaries.iterator().next();
    }

    @Override
    public boolean binaryEqualsIgnoreVersion(String binary1, String binary2)
    {
        for (Repository repository : repositories) {
            if (repository.binaryEqualsIgnoreVersion(binary1, binary2)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public URI binaryToHttpUri(String binary)
    {
        Set httpUris = newTreeSet();
        for (Repository repository : repositories) {
            URI httpUri = repository.binaryToHttpUri(binary);
            if (httpUri != null) {
                httpUris.add(httpUri);
            }
        }

        if (httpUris.size() > 1) {
            throw new RuntimeException(String.format("Ambiguous binary %s found %s", binary, httpUris));
        }

        if (httpUris.isEmpty()) {
            return null;
        }

        return httpUris.iterator().next();
    }

    @Override
    public String toString()
    {
        final StringBuilder sb = new StringBuilder();
        sb.append("RepositorySet");
        sb.append("{repositories=").append(repositories);
        sb.append('}');
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy