/* * Copyright 2012 Nodeable Inc * * Licensed 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 com.streamreduce.util; import com.google.common.collect.Iterables; import com.streamreduce.connections.AnalyticsProvider; import com.streamreduce.connections.CloudProvider; import com.streamreduce.connections.ConnectionProvider; import com.streamreduce.connections.FeedProvider; import com.streamreduce.connections.GatewayProvider; import com.streamreduce.connections.MonitoringProvider; import com.streamreduce.connections.ProjectHostingProvider; import com.streamreduce.connections.SocialProvider; import com.streamreduce.core.model.Account; import org.bson.types.ObjectId; import java.util.HashMap; import java.util.Map; import java.util.ServiceLoader; public final class ConnectionUtils { public static final Map<String, Class<? extends ConnectionProvider>> PROVIDER_MAP = new HashMap<>(); static { PROVIDER_MAP.put(CloudProvider.TYPE, CloudProvider.class); PROVIDER_MAP.put(FeedProvider.TYPE, FeedProvider.class); PROVIDER_MAP.put(GatewayProvider.TYPE, GatewayProvider.class); PROVIDER_MAP.put(MonitoringProvider.TYPE, MonitoringProvider.class); PROVIDER_MAP.put(ProjectHostingProvider.TYPE, ProjectHostingProvider.class); PROVIDER_MAP.put(AnalyticsProvider.TYPE, AnalyticsProvider.class); PROVIDER_MAP.put(SocialProvider.TYPE, SocialProvider.class); } /** * Returns an iterable of all {@link ConnectionProvider}, regardless of type. * * @return an iterable of supported provider objects, regardless of type */ public static Iterable<? extends ConnectionProvider> getAllProviders() { Iterable<? extends ConnectionProvider> allProviders = null; for (String providerType : PROVIDER_MAP.keySet()) { Iterable<? extends ConnectionProvider> providers = getSupportedProviders(providerType); if (allProviders == null) { allProviders = providers; } else { allProviders = Iterables.concat(allProviders, providers); } } return allProviders; } /** * Returns an iterable of {@link ConnectionProvider} of a particular type or null if the provider type is invalid. * * @param providerType the type of the provider * @return an iterable of supported provider objects of a particular type */ public static Iterable<? extends ConnectionProvider> getSupportedProviders(String providerType) { if (!PROVIDER_MAP.keySet().contains(providerType)) { return null; } return ServiceLoader.load(PROVIDER_MAP.get(providerType)); } /** * Returns the provider with the given id and type or null if one cannot be found. * * @param providerType the type of the provider * @param providerId the of the provider * @return - ConnectionProvider or null */ public static ConnectionProvider getProviderFromId(String providerType, String providerId) { for (ConnectionProvider provider : getSupportedProviders(providerType)) { if (provider.getId().equals(providerId)) { return provider; } } return null; } public static boolean isBlacklisted(Account account, ObjectId connectionId) { return account.getPublicConnectionBlacklist().contains(connectionId); } }