/*
* 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.ComputeImageBulkRep;
import com.emc.storageos.model.compute.ComputeImageCreate;
import com.emc.storageos.model.compute.ComputeImageList;
import com.emc.storageos.model.compute.ComputeImageRestRep;
import com.emc.storageos.model.compute.ComputeImageUpdate;
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;
/**
* Compute Image resource.
* <p>
* Base URL: <tt>/compute/images</tt>
*/
public class ComputeImages extends AbstractCoreBulkResources<ComputeImageRestRep> implements
TopLevelResources<ComputeImageRestRep>, TaskResources<ComputeImageRestRep> {
public ComputeImages(ViPRCoreClient parent, RestClient client) {
super(parent, client, ComputeImageRestRep.class, PathConstants.COMPUTE_IMAGE_URL);
}
@Override
public ComputeImages withInactive(boolean inactive) {
return (ComputeImages) super.withInactive(inactive);
}
@Override
public ComputeImages withInternal(boolean internal) {
return (ComputeImages) super.withInternal(internal);
}
@Override
protected List<ComputeImageRestRep> getBulkResources(BulkIdParam input) {
ComputeImageBulkRep response = client.post(ComputeImageBulkRep.class, input, getBulkUrl());
return defaultList(response.getComputeImages());
}
@Override
public Tasks<ComputeImageRestRep> getTasks(URI id) {
return doGetTasks(id);
}
@Override
public Task<ComputeImageRestRep> getTask(URI id, URI taskId) {
return doGetTask(id, taskId);
}
/**
* Lists all compute images.
* <p>
* API Call: <tt>GET /compute/images</tt>
*
* @return the list of compute image references.
*/
@Override
public List<NamedRelatedResourceRep> list() {
ComputeImageList response = client.get(ComputeImageList.class, baseUrl);
return ResourceUtils.defaultList(response.getComputeImages());
}
/**
* Gets the list of all compute images. This is a convenience for <tt>getByRefs(list())</tt>.
*
* @return the list of compute images.
*/
@Override
public List<ComputeImageRestRep> getAll() {
return getAll(null);
}
/**
* Gets the list of all compute images, optionally filtering the results. This is a convenience 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 compute images.
*/
@Override
public List<ComputeImageRestRep> getAll(ResourceFilter<ComputeImageRestRep> filter) {
List<NamedRelatedResourceRep> refs = list();
return getByRefs(refs, filter);
}
/**
* Begins creating a compute image.
* <p>
* API Call: <tt>POST /compute/images</tt>
*
* @param input
* the create configuration.
* @return a task for monitoring the progress of the operation.
*/
public Task<ComputeImageRestRep> create(ComputeImageCreate input) {
return postTask(input, baseUrl);
}
/**
* Begins updating a compute image by ID.
* <p>
* API Call: <tt>PUT /compute/images/{id}</tt>
*
* @param id
* the ID of the compute image to update.
* @param input
* the update configuration.
* @return the compute image reference.
*/
public Task<ComputeImageRestRep> update(URI id, ComputeImageUpdate input) {
return putTask(input, getIdUrl(), id);
}
/**
* Begins deactivating a compute image by ID.
* <p>
* API Call: <tt>POST /compute/images/{id}</tt>
*
* @param id
* the ID of the compute image to deactivate.
*/
public void deactivate(URI id) {
doDeactivate(id);
}
/**
* Filter to show only ESX/i compute images.
*
* @param imageType
* the type of the image (e.g. esx, linux)
* @return List of ESX/i compute images.
*/
public List<NamedRelatedResourceRep> listByImageType(String imageType) {
URI getUri = client.uriBuilder(baseUrl).queryParam("imageType", imageType).build();
ComputeImageList response = client.getURI(ComputeImageList.class, getUri);
return ResourceUtils.defaultList(response.getComputeImages());
}
/**
* Begins creating a compute image as a clone.
* <p>
* API Call: <tt>POST /compute/images</tt>
*
* @param input
* the clone configuration.
* @return a task for monitoring the progress of the operation.
*/
public Task<ComputeImageRestRep> cloneImage(ComputeImageCreate input) {
return postTask(input, baseUrl);
}
}