/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.vipr.client.core;
import static com.emc.vipr.client.core.util.ResourceUtils.defaultList;
import java.net.URI;
import java.util.Collection;
import java.util.List;
import javax.ws.rs.core.UriBuilder;
import com.emc.storageos.model.BulkIdParam;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.block.tier.AutoTierPolicyList;
import com.emc.storageos.model.block.tier.AutoTieringPolicyBulkRep;
import com.emc.storageos.model.block.tier.AutoTieringPolicyRestRep;
import com.emc.vipr.client.ViPRCoreClient;
import com.emc.vipr.client.core.filters.ResourceFilter;
import com.emc.vipr.client.core.impl.PathConstants;
import com.emc.vipr.client.impl.RestClient;
/**
* Auto tier policy resources.
* <p>
* Base URL: <tt>/vdc/auto-tier-policies</tt>
*
* @see AutoTieringPolicyRestRep
*/
public class AutoTieringPolicies extends AbstractCoreBulkResources<AutoTieringPolicyRestRep> implements
TopLevelResources<AutoTieringPolicyRestRep> {
public AutoTieringPolicies(ViPRCoreClient parent, RestClient client) {
super(parent, client, AutoTieringPolicyRestRep.class, PathConstants.AUTO_TIERING_POLICY_URL);
}
@Override
public AutoTieringPolicies withInactive(boolean inactive) {
return (AutoTieringPolicies) super.withInactive(inactive);
}
@Override
public AutoTieringPolicies withInternal(boolean internal) {
return (AutoTieringPolicies) super.withInternal(internal);
}
@Override
protected List<AutoTieringPolicyRestRep> getBulkResources(BulkIdParam input) {
AutoTieringPolicyBulkRep response = client.post(AutoTieringPolicyBulkRep.class, input, getBulkUrl());
return defaultList(response.getAutoTierPolicies());
}
/**
* Gets a list of auto tier policy references from the given URL.
*
* @param url
* the URL.
* @param args
* the URL arguments.
* @return the list of auto tier policy references.
*/
protected List<NamedRelatedResourceRep> getList(String url, Object... args) {
AutoTierPolicyList response = client.get(AutoTierPolicyList.class, url, args);
return defaultList(response.getAutoTierPolicies());
}
/**
* Gets a list of auto tier policy references from the given URI.
*
* @param uri
* the URI.
* @return the list of auto tier policy references.
*/
protected List<NamedRelatedResourceRep> getList(URI uri) {
AutoTierPolicyList response = client.getURI(AutoTierPolicyList.class, uri);
return defaultList(response.getAutoTierPolicies());
}
/**
* Lists all auto tier policies.
* <p>
* API Call: <tt>GET /vdc/auto-tier-policies</tt>
*
* @return the list of auto tier policy references.
*/
@Override
public List<NamedRelatedResourceRep> list() {
return list(null, null);
}
/**
* Lists the auto tier policies, with the ability to limit by provisioning type or unique policy name.
* <p>
* API Call: <tt>GET /vdc/auto-tier-policies?provisioning_type={provisioningType} unique_auto_tier_policy_names={uniqueNames}</tt>
*
* @param provisioningType
* the provisioning type, if null matches any provisioning type.
* @param uniqueNames
* when true duplicate named policies will be ignored.
* @return the list of auto tier policy references.
*/
public List<NamedRelatedResourceRep> list(String provisioningType, Boolean uniqueNames) {
UriBuilder builder = client.uriBuilder(baseUrl);
if ((provisioningType != null) && (provisioningType.length() > 0)) {
builder.queryParam("provisioning_type", provisioningType);
}
if (uniqueNames != null) {
builder.queryParam("unique_auto_tier_policy_names", uniqueNames);
}
return getList(builder.build());
}
@Override
public List<AutoTieringPolicyRestRep> getAll() {
return getAll(null);
}
@Override
public List<AutoTieringPolicyRestRep> getAll(ResourceFilter<AutoTieringPolicyRestRep> filter) {
List<NamedRelatedResourceRep> refs = list();
return getByRefs(refs, filter);
}
/**
* Lists all auto tier policies for a given storage system.
* <p>
* API Call: <tt>GET /vdc/storage-systems/{storageSystemId}/auto-tier-policies</tt>
*
* @param storageSystemId
* the ID of the storage system.
* @return the list of auto tier policy references.
*
* @see StorageSystems
*/
public List<NamedRelatedResourceRep> listByStorageSystem(URI storageSystemId) {
return listByStorageSystem(storageSystemId, null);
}
/**
* Lists all auto tier policies for a given storage system.
* <p>
* API Call: <tt>GET /vdc/storage-systems/{storageSystemId}/auto-tier-policies?unique_policy_names={uniqueNames}</tt>
*
* @param storageSystemId
* the ID of the storage system.
* @param uniqueNames
* when true duplicate named policies will be ignored.
* @return the list of auto tier policy references.
*
* @see StorageSystems
*/
public List<NamedRelatedResourceRep> listByStorageSystem(URI storageSystemId, Boolean uniqueNames) {
UriBuilder builder = client.uriBuilder(PathConstants.AUTO_TIER_BY_STORAGE_SYSTEM_URL);
if (uniqueNames != null) {
builder.queryParam("unique_policy_names", uniqueNames);
}
return getList(builder.build(storageSystemId));
}
/**
* Gets all auto tier policies for a given storage system.
*
* @param storageSystemId
* the ID of the storage system.
* @return the list of auto tier policies.
*
* @see #listByStorageSystem(URI)
* @see #getByRefs(java.util.Collection)
* @see StorageSystems
*/
public List<AutoTieringPolicyRestRep> getByStorageSystem(URI storageSystemId) {
List<NamedRelatedResourceRep> refs = listByStorageSystem(storageSystemId);
return getByRefs(refs);
}
/**
* Lists all auto tier policies for a given virtual array.
* <p>
* API Call: <tt>GET /vdc/varrays/{virtualArrayId}/auto-tier-policies</tt>
*
* @param virtualArrayId
* the ID of the virtual array.
* @return the list of auto tier policy references.
*
* @see VirtualArrays
*/
public List<NamedRelatedResourceRep> listByVirtualArray(URI virtualArrayId) {
return getList(PathConstants.AUTO_TIER_BY_VARRAY_URL, virtualArrayId);
}
/**
* Lists all auto tier policies for a given virtual array.
* <p>
* API Call:
* <tt>GET /vdc/varrays/{virtualArrayId}/auto-tier-policies?provisioning_type={provisioningType} unique_auto_tier_policy_names={uniqueNames}</tt>
*
* @param virtualArrayId
* the ID of the virtual array.
* @param provisioningType
* the provisioning type, if null matches any provisioning type.
* @param uniqueNames
* when true duplicate named policies will be ignored.
* @return the list of auto tier policy references.
*
* @see VirtualArrays
*/
public List<NamedRelatedResourceRep> listByVirtualArray(URI virtualArrayId, String provisioningType,
Boolean uniqueNames) {
UriBuilder builder = client.uriBuilder(PathConstants.AUTO_TIER_BY_VARRAY_URL);
if ((provisioningType != null) && (provisioningType.length() > 0)) {
builder.queryParam("provisioning_type", provisioningType);
}
if (uniqueNames != null) {
builder.queryParam("unique_auto_tier_policy_names", uniqueNames);
}
return getList(builder.build(virtualArrayId));
}
/**
* Gets all auto tier policies for a given virtual array.
*
* @param virtualArrayId
* the ID of the virtual array.
* @param provisioningType
* the provisioning type, if null matches any provisioning type.
* @param uniqueNames
* when true duplicate named policies will be ignored.
* @param filter
* filter used to filter results
* @return the list of auto tier policies.
*
* @see #listByVirtualArray(URI, String, Boolean)
* @see #getByRefs(java.util.Collection)
* @see VirtualArrays
*/
public List<AutoTieringPolicyRestRep> getByVirtualArray(URI virtualArrayId, String provisioningType,
Boolean uniqueNames, ResourceFilter<AutoTieringPolicyRestRep> filter) {
List<NamedRelatedResourceRep> refs = listByVirtualArray(virtualArrayId, provisioningType, uniqueNames);
return getByRefs(refs, filter);
}
/**
* Gets all auto tier policies for all virtual arrays.
*
* @param virtualArrayIds
* the ID of the virtual array.
* @param provisioningType
* the provisioning type, if null matches any provisioning type.
* @param uniqueNames
* when true duplicate named policies will be ignored.
* @param filter
* @return the list of auto tier policies.
*
* @see #getByRefs(java.util.Collection)
* @see VirtualArrays
*/
public List<AutoTieringPolicyRestRep> getByVirtualArrays(Collection<URI> virtualArrayIds, String provisioningType, Boolean uniqueNames,
ResourceFilter<AutoTieringPolicyRestRep> filter) {
UriBuilder builder = client.uriBuilder(PathConstants.AUTO_TIER_FOR_ALL_VARRAY);
if ((provisioningType != null) && (provisioningType.length() > 0)) {
builder.queryParam("provisioning_type", provisioningType);
}
if (uniqueNames != null) {
builder.queryParam("unique_auto_tier_policy_names", uniqueNames);
}
BulkIdParam input = new BulkIdParam((List<URI>) virtualArrayIds);
AutoTierPolicyList response = client.postURI(AutoTierPolicyList.class, input, builder.build());
return defaultList(getByRefs(response.getAutoTierPolicies(), filter));
}
/**
* Gets all auto tier policies for a given virtual array. This is a convenience method for: <tt>getByRefs(list())</tt>.
*
* @param virtualArrayId
* the ID of the virtual array.
* @param provisioningType
* the provisioning type, if null matches any provisioning type.
* @param uniqueNames
* when true duplicate named policies will be ignored.
* @return the list of auto tier policies.
*
* @see #getByVirtualArray(URI, String, Boolean, ResourceFilter)
* @see VirtualArrays
*/
public List<AutoTieringPolicyRestRep> getByVirtualArray(URI virtualArrayId, String provisioningType,
Boolean uniqueNames) {
return getByVirtualArray(virtualArrayId, provisioningType, uniqueNames, null);
}
/**
* Gets all auto tier policies for a given virtual array.
*
* @param virtualArrayId
* the ID of the virtual array.
* @return the list of auto tier policies.
*
* @see #listByVirtualArray(URI)
* @see #getByRefs(java.util.Collection)
* @see VirtualArrays
*/
public List<AutoTieringPolicyRestRep> getByVirtualArray(URI virtualArrayId) {
List<NamedRelatedResourceRep> refs = listByVirtualArray(virtualArrayId);
return getByRefs(refs);
}
}