blob: 8716fedd46da07bde1f8bce5741dc7ab03c6208a [file] [log] [blame]
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.providers;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.find;
import java.util.NoSuchElementException;
import java.util.ServiceLoader;
import com.google.common.base.Predicates;
/**
* The Providers class provides static methods for accessing providers.
*
* @author Jeremy Whitlock <jwhitlock@apache.org>
*/
public class Providers {
/**
* Returns the providers located on the classpath via {@link java.util.ServiceLoader}.
*
* @return all available providers loaded from classpath via ServiceLoader
*/
private static Iterable<ProviderMetadata> fromServiceLoader() {
return ServiceLoader.load(ProviderMetadata.class);
}
/**
* Returns all available providers.
*
* @return all available providers
*/
public static Iterable<ProviderMetadata> all() {
return fromServiceLoader();
}
/**
* Returns the first provider with the provided id
*
* @param id
* the id of the provider to return
*
* @return the provider with the given id
*
* @throws NoSuchElementException
* whenever there are no providers with the provided id
*/
public static ProviderMetadata withId(String id) throws NoSuchElementException {
return find(all(), ProviderPredicates.id(id));
}
/**
* Returns the providers that are of type
* {@link org.jclouds.providers.ProviderMetadata#BLOBSTORE_TYPE}.
*
* @return the blobstore providers
*/
public static Iterable<ProviderMetadata> allBlobStore() {
return filter(all(), ProviderPredicates.type(ProviderMetadata.BLOBSTORE_TYPE));
}
/**
* Returns the providers that are of type
* {@link org.jclouds.providers.ProviderMetadata#COMPUTE_TYPE}.
*
* @return the compute service providers
*/
public static Iterable<ProviderMetadata> allCompute() {
return filter(all(), ProviderPredicates.type(ProviderMetadata.COMPUTE_TYPE));
}
/**
* Returns the providers that are of type
* {@link org.jclouds.providers.ProviderMetadata#QUEUE_TYPE}.
*
* @return the queue service providers
*/
public static Iterable<ProviderMetadata> allQueue() {
return filter(all(), ProviderPredicates.type(ProviderMetadata.QUEUE_TYPE));
}
/**
* Returns the providers that are of type
* {@link org.jclouds.providers.ProviderMetadata#TABLE_TYPE}.
*
* @return the table service providers
*/
public static Iterable<ProviderMetadata> allTable() {
return filter(all(), ProviderPredicates.type(ProviderMetadata.TABLE_TYPE));
}
/**
* Returns the providers that are of type
* {@link org.jclouds.providers.ProviderMetadata#LOADBALANCER_TYPE}.
*
* @return the load balancer service providers
*/
public static Iterable<ProviderMetadata> allLoadBalancer() {
return filter(all(), ProviderPredicates.type(ProviderMetadata.LOADBALANCER_TYPE));
}
/**
* Returns the providers that are of the provided type.
*
* @param type
* the type to providers to return
*
* @return the providers of the provided type
*/
public static Iterable<ProviderMetadata> ofType(String type) {
return filter(all(), ProviderPredicates.type(type));
}
/**
* Returns the providers that are bound to the same location as the given ISO 3166 code regardless of type.
*
* @param isoCode
* the ISO 3166 code to filter providers by
*
* @return the providers bound by the given ISO 3166 code
*/
public static Iterable<ProviderMetadata> boundedByIso3166Code(String iso3166Code) {
return filter(all(), ProviderPredicates.boundedByIso3166Code(iso3166Code));
}
/**
* Returns the providers that are bound to the same location as the given ISO 3166 code and of the given type.
*
* @param iso3166Code
* the ISO 3166 code to filter providers by
* @param type
* the type to filter providers by
*
* @return the providers bound by the given ISO 3166 code and of the proper type
*/
public static Iterable<ProviderMetadata> boundedByIso3166Code(String iso3166Code, String type) {
return filter(all(), Predicates.and(ProviderPredicates.boundedByIso3166Code(iso3166Code),
ProviderPredicates.type(type)));
}
/**
* Returns the providers that have at least one common ISO 3166 code in common regardless of type.
*
* @param providerMetadata
* the provider metadata to use to filter providers by
*
* @return the providers that share at least one common ISO 3166 code
*/
public static Iterable<ProviderMetadata> collocatedWith(ProviderMetadata providerMetadata) {
return filter(all(), ProviderPredicates.intersectingIso3166Code(providerMetadata));
}
/**
* Returns the providers that have at least one common ISO 3166 code and are of the given type.
*
* @param providerMetadata
* the provider metadata to use to filter providers by
* @param type
* the type to filter providers by
*
* @return the providers that share at least one common ISO 3166 code and of the given type
*/
public static Iterable<ProviderMetadata> collocatedWith(ProviderMetadata providerMetadata, String type) {
return filter(all(), Predicates.and(ProviderPredicates.intersectingIso3166Code(providerMetadata),
ProviderPredicates.type(type)));
}
}