/*
* 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.List;
import com.emc.storageos.model.BulkIdParam;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.compute.ComputeImageServerBulkRep;
import com.emc.storageos.model.compute.ComputeImageServerCreate;
import com.emc.storageos.model.compute.ComputeImageServerList;
import com.emc.storageos.model.compute.ComputeImageServerRestRep;
import com.emc.storageos.model.compute.ComputeImageServerUpdate;
import com.emc.vipr.client.Task;
import com.emc.vipr.client.Tasks;
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.core.util.ResourceUtils;
import com.emc.vipr.client.impl.RestClient;
/**
* Storage Systems resources.
* <p>
* Base URL: <tt>/compute/compute-imageservers</tt>
*/
public class ComputeImageServers extends AbstractCoreBulkResources<ComputeImageServerRestRep> implements
TopLevelResources<ComputeImageServerRestRep>, TaskResources<ComputeImageServerRestRep> {
public ComputeImageServers(ViPRCoreClient parent, RestClient client) {
super(parent, client, ComputeImageServerRestRep.class, PathConstants.COMPUTE_IMAGE_SERVER_URL);
}
@Override
public ComputeImageServers withInactive(boolean inactive) {
return (ComputeImageServers) super.withInactive(inactive);
}
@Override
protected List<ComputeImageServerRestRep> getBulkResources(BulkIdParam input) {
ComputeImageServerBulkRep response = client.post(ComputeImageServerBulkRep.class, input, getBulkUrl());
return defaultList(response.getComputeImageServers());
}
@Override
public Tasks<ComputeImageServerRestRep> getTasks(URI id) {
return doGetTasks(id);
}
@Override
public Task<ComputeImageServerRestRep> getTask(URI id, URI taskId) {
return doGetTask(id, taskId);
}
/**
* Lists all compute image servers.
* <p>
* API Call: <tt>GET /compute/compute-imageservers</tt>
*
* @return the list of compute image server references.
*/
@Override
public List<NamedRelatedResourceRep> list() {
ComputeImageServerList response = client.get(ComputeImageServerList.class, baseUrl);
return ResourceUtils.defaultList(response.getComputeImageServers());
}
/**
* Gets the list of all compute image servers. This is a convenience method for: <tt>getByRefs(list())</tt>.
*
* @return the list of all compute image servers.
*/
@Override
public List<ComputeImageServerRestRep> getAll() {
return getAll(null);
}
/**
* Gets the list of all compute image servers, optionally filtering the results. This is a convenience method for:
* <tt>getByRefs(list(), filter)</tt>.
*
* @param filter
* the resource filter to apply to the results as they are returned (optional).
* @return the list of all compute image servers.
*/
@Override
public List<ComputeImageServerRestRep> getAll(ResourceFilter<ComputeImageServerRestRep> filter) {
List<NamedRelatedResourceRep> refs = list();
return getByRefs(refs, filter);
}
/**
* Begins creating a compute image server.
* <p>
* API Call: <tt>POST /compute/computeimageservers</tt>
*
* @param input
* the create configuration.
* @return a task for monitoring the progress of the operation.
*/
public Task<ComputeImageServerRestRep> create(ComputeImageServerCreate input) {
return postTask(input, baseUrl);
}
/**
* Begins updating the given compute image servers by ID.
* <p>
* API Call: <tt>PUT /compute/compute-imageservers/{id}</tt>
*
* @param id
* the ID of the compute image server.
* @param input
* the update configuration.
* @return ComputeImageServerRestRep.
*/
public ComputeImageServerRestRep update(URI id, ComputeImageServerUpdate input) {
return client.put(ComputeImageServerRestRep.class, input, getIdUrl(), id);
}
/**
* Deletes the given compute image server by ID.
*
* API Call: <tt>POST /compute-imageservers/{id}/deactivate</tt>
*
* @param id
* the ID of the compute image server to delete.
*
*/
public void deactivate(URI id) {
doDeactivate(id);
}
}