/* * Copyright (c) 2012-2015 EMC * All Rights Reserved */ package com.emc.sa.asset.providers; import java.net.URI; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import org.springframework.stereotype.Component; import com.emc.sa.asset.AssetOptionsContext; import com.emc.sa.asset.AssetOptionsUtils; import com.emc.sa.asset.BaseAssetOptionsProvider; import com.emc.sa.asset.annotation.Asset; import com.emc.sa.asset.annotation.AssetDependencies; import com.emc.sa.asset.annotation.AssetNamespace; import com.emc.storageos.model.DataObjectRestRep; import com.emc.storageos.model.object.BucketACLUpdateParams; import com.emc.storageos.model.object.BucketRestRep; import com.emc.storageos.model.vpool.ObjectVirtualPoolRestRep; import com.emc.vipr.client.ViPRCoreClient; import com.emc.vipr.client.core.filters.ResourceFilter; import com.emc.vipr.client.core.util.ResourceUtils; import com.emc.vipr.model.catalog.AssetOption; import com.google.common.collect.Lists; @Component @AssetNamespace("vipr") public class ObjectProvider extends BaseAssetOptionsProvider { @Asset("sourceBuckets") @AssetDependencies("project") public List<AssetOption> getSourceBuckets(AssetOptionsContext ctx, URI project) { debug("getting source block volumes (project=%s)", project); return createBucketOptions(null, listSourceBuckets(api(ctx), project)); } protected static List<AssetOption> createBucketOptions(ViPRCoreClient client, Collection<? extends DataObjectRestRep> bucketObjects) { return createBucketOptions(client, null, null, bucketObjects); } protected static List<AssetOption> createBucketOptions(ViPRCoreClient client, URI project, URI hostId, Collection<? extends DataObjectRestRep> bucketObjects) { Map<URI, BucketRestRep> bucketNames = getProjectBucketNames(client, project); List<AssetOption> options = Lists.newArrayList(); for (DataObjectRestRep bucketObject : bucketObjects) { options.add(createBucketOption(client, hostId, bucketObject, bucketNames)); } AssetOptionsUtils.sortOptionsByLabel(options); return options; } protected static AssetOption createBucketOption(ViPRCoreClient client, URI hostId, DataObjectRestRep bucketObject, Map<URI, BucketRestRep> bucketNames) { String name = getBucketObjectLabel(client, bucketObject, bucketNames); String hardQuota = getBucketObjectHardQuota(bucketObject); String softQuota = getBucketObjectSoftQuota(bucketObject); String retention = getBucketObjectRetention(bucketObject); String label = getMessage("object.bucket.label", name, softQuota, hardQuota, retention); return new AssetOption(bucketObject.getId(), label); } protected static Map<URI, BucketRestRep> getProjectBucketNames(ViPRCoreClient client, URI project) { if (project == null) { return Collections.emptyMap(); } return ResourceUtils.mapById(client.objectBuckets().findByProject(project)); } private static String getBucketObjectHardQuota(DataObjectRestRep bucketObject) { if (bucketObject instanceof BucketRestRep) { BucketRestRep bucket = (BucketRestRep) bucketObject; return bucket.getHardQuota(); } return "N/A"; } private static String getBucketObjectSoftQuota(DataObjectRestRep bucketObject) { if (bucketObject instanceof BucketRestRep) { BucketRestRep bucket = (BucketRestRep) bucketObject; return bucket.getSoftQuota(); } return "N/A"; } private static String getBucketObjectRetention(DataObjectRestRep bucketObject) { if (bucketObject instanceof BucketRestRep) { BucketRestRep bucket = (BucketRestRep) bucketObject; return bucket.getRetention(); } return "N/A"; } private static String getBucketObjectLabel(ViPRCoreClient client, DataObjectRestRep bucketObject, Map<URI, BucketRestRep> volumeNames) { if (bucketObject instanceof BucketRestRep) { BucketRestRep bucket = (BucketRestRep) bucketObject; return bucket.getName(); } return bucketObject.getName(); } @SafeVarargs public static List<BucketRestRep> listSourceBuckets(ViPRCoreClient client, URI project, ResourceFilter<BucketRestRep>... filters) { return client.objectBuckets().findByProject(project); } @Asset("objectVirtualPool") @AssetDependencies({ "objectVirtualArray" }) public List<AssetOption> getObjectVirtualPoolsForVirtualArray(AssetOptionsContext ctx, URI virtualArray) { debug("getting getObjectVirtualPoolsForVirtualArray(virtualArray=%s)", virtualArray); List<ObjectVirtualPoolRestRep> virtualPools = api(ctx).objectVpools().getByVirtualArrayAndTenant(virtualArray, ctx.getTenant()); return BlockProvider.createVirtualPoolResourceOptions(virtualPools); } @Asset("objectVirtualPool") public List<AssetOption> getObjectVirtualPools(AssetOptionsContext ctx) { debug("getting objectVirtualPools"); return createBaseResourceOptions(api(ctx).objectVpools().getByTenant(ctx.getTenant())); } @Asset("objectACLPermission") public List<AssetOption> getObjectACLPermissions(AssetOptionsContext ctx) { List<AssetOption> options = Lists.newArrayList(); for (BucketACLUpdateParams.BucketPermissions perm : BucketACLUpdateParams.BucketPermissions.values()) { options.add(newAssetOption(perm.name(), String.format("Object.ACL.permission.%s", perm.name()))); } return options; } }