/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.sa.asset; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.security.authentication.StorageOSUser; import com.emc.vipr.model.catalog.AssetOption; /** * Finds, introspects and registers all {@link AbstractAssetOptionsProvider}s */ @Component public class AssetOptionsManagerImpl implements AssetOptionsManager { private static final Logger log = Logger.getLogger(AssetOptionsManagerImpl.class); @Autowired private List<AssetOptionsProvider> assetOptionsProviders; @Override public List<AssetOptionsProvider> getAssetOptionsProviders() { return assetOptionsProviders; } @Override public void setAssetOptionsProviders(List<AssetOptionsProvider> assetOptionsProviders) { this.assetOptionsProviders = assetOptionsProviders; } @Override public List<AssetOption> getOptions(AssetOptionsContext context, String assetType, Map<String, String> availableAssets) { log.info("retrieving asset options for asset [" + assetType + "]"); AssetOptionsProvider provider = getProviderForAssetType(assetType); if (provider != null) { return provider.getAssetOptions(context, assetType, availableAssets); } else { return Collections.emptyList(); } } public AssetOptionsContext createDefaultContext(StorageOSUser user) { AssetOptionsContext context = new AssetOptionsContext(); context.setAuthToken(user.getToken()); context.setTenant(URIUtil.uri(user.getTenantId())); context.setUserName(user.getUserName()); return context; } @Override public List<String> getAssetDependencies(String assetType, Set<String> availableTypes) { AssetOptionsProvider provider = getProviderForAssetType(assetType); if (provider != null) { return provider.getAssetDependencies(assetType, availableTypes); } else { return Collections.emptyList(); } } public AssetOptionsProvider getProviderForAssetType(String assetType) { for (AssetOptionsProvider provider : assetOptionsProviders) { if (provider.isAssetTypeSupported(assetType)) { return provider; } } return null; } }