/* * Copyright (c) 2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.resource; import static com.emc.storageos.api.mapper.BlockMapper.map; import java.net.URI; import java.util.Iterator; import java.util.List; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import com.emc.storageos.api.mapper.DbObjectMapper; import com.emc.storageos.api.mapper.functions.MapStorageTier; import com.emc.storageos.api.service.impl.response.BulkList; import com.emc.storageos.db.client.model.StorageTier; import com.emc.storageos.model.BulkIdParam; import com.emc.storageos.model.ResourceTypeEnum; import com.emc.storageos.model.block.tier.StorageTierBulkRep; import com.emc.storageos.model.block.tier.StorageTierList; import com.emc.storageos.model.block.tier.StorageTierRestRep; import com.emc.storageos.security.authorization.CheckPermission; import com.emc.storageos.security.authorization.DefaultPermissions; import com.emc.storageos.security.authorization.Role; @Path("/vdc/storage-tiers") @DefaultPermissions(readRoles = { Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR }, writeRoles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN }) public class StorageTierService extends TaggedResource { @Override protected StorageTier queryResource(URI id) { ArgValidator.checkUri(id); StorageTier tier = _dbClient.queryObject(StorageTier.class, id); ArgValidator.checkEntityNotNull(tier, id, isIdEmbeddedInURL(id)); return tier; } @Override protected URI getTenantOwner(URI id) { return null; } /** * get Storage Tier associated with id. * * @param id the URN of a ViPR storage tier * @brief Show storage tier * @return Policy Object */ @GET @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR }) @Path("/{id}") public StorageTierRestRep getStorageTier(@PathParam("id") URI id) { // CQECC00606330 ArgValidator.checkFieldUriType(id, StorageTier.class, "id"); StorageTier tier = queryResource(id); return map(tier); } /** * * List all storage tiers * * @prereq none * @brief List all storage tiers. * @return StorageTierList */ @GET @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR }) public StorageTierList getStorageTiers() { StorageTierList tierList = new StorageTierList(); List<URI> tierUris = _dbClient.queryByType(StorageTier.class, true); List<StorageTier> tiers = _dbClient.queryObject(StorageTier.class, tierUris); for (StorageTier tier : tiers) { tierList.getStorageTiers().add( DbObjectMapper.toNamedRelatedResource(ResourceTypeEnum.STORAGE_TIER, tier.getId(), tier.getLabel())); } return tierList; } /** * Retrieve resource representations based on input ids. * * @param param POST data containing the id list. * @brief List data of storage tier resources * @return list of representations. */ @POST @Path("/bulk") @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Override public StorageTierBulkRep getBulkResources(BulkIdParam param) { return (StorageTierBulkRep) super.getBulkResources(param); } @SuppressWarnings("unchecked") @Override public Class<StorageTier> getResourceClass() { return StorageTier.class; } @Override public StorageTierBulkRep queryBulkResourceReps(List<URI> ids) { Iterator<StorageTier> _dbIterator = _dbClient.queryIterativeObjects(getResourceClass(), ids); return new StorageTierBulkRep(BulkList.wrapping(_dbIterator, MapStorageTier.getInstance())); } @Override public StorageTierBulkRep queryFilteredBulkResourceReps(List<URI> ids) { verifySystemAdmin(); return queryBulkResourceReps(ids); } @Override protected ResourceTypeEnum getResourceType() { return ResourceTypeEnum.STORAGE_TIER; } }