/*
* 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.ComputeElementBulkRep;
import com.emc.storageos.model.compute.ComputeElementList;
import com.emc.storageos.model.compute.ComputeElementRestRep;
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;
/**
* Compute Elements resources.
* <p>
* Base URL: <tt>/vdc/compute-elements</tt>
*/
public class ComputeElements extends AbstractCoreBulkResources<ComputeElementRestRep> implements
TopLevelResources<ComputeElementRestRep> {
public ComputeElements(ViPRCoreClient parent, RestClient client) {
super(parent, client, ComputeElementRestRep.class, PathConstants.COMPUTE_ELEMENTS_URL);
}
@Override
public ComputeElements withInactive(boolean inactive) {
return (ComputeElements) super.withInactive(inactive);
}
@Override
protected List<ComputeElementRestRep> getBulkResources(BulkIdParam input) {
ComputeElementBulkRep response = client.post(ComputeElementBulkRep.class, input, getBulkUrl());
return defaultList(response.getComputeElements());
}
/**
* Lists all compute elements.
* <p>
* API Call: <tt>GET /vdc/compute-elements</tt>
*
* @return the list of all compute element references.
*/
@Override
public List<NamedRelatedResourceRep> list() {
ComputeElementList response = client.get(ComputeElementList.class, baseUrl);
return defaultList(response.getComputeElements());
}
/**
* Gets all compute elements. This is a convenience method for: <tt>getByRefs(list())</tt>
*
* @return the list of all compute elements.
*/
@Override
public List<ComputeElementRestRep> getAll() {
return getAll(null);
}
/**
* Gets all compute elements. 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 elements.
*/
@Override
public List<ComputeElementRestRep> getAll(ResourceFilter<ComputeElementRestRep> filter) {
List<NamedRelatedResourceRep> refs = list();
return getByRefs(refs, filter);
}
/**
* Rediscover a compute element.
* <p>
* API Call: <tt>POST /vdc/compute-elements/{id}/discover</tt>
*
* @param id
* the ID of the compute element.
*/
public ComputeElementRestRep rediscover(URI id) {
return client.post(ComputeElementRestRep.class, getIdUrl() + "/discover", id);
}
/**
* Registers a compute element with the given compute system.
* <p>
* API Call: <tt>POST /vdc/compute-systems/{computeSystemId}/compute-elements/{computeElementId}/register</tt>
*
* @param computeElementId
* the ID of the compute element.
* @return the compute element.
*/
public ComputeElementRestRep register(URI computeElementId) {
return client.post(ComputeElementRestRep.class, getIdUrl() + "/register", computeElementId);
}
/**
* Deregisters a compute element.
* <p>
* API Call: <tt>POST /vdc/compute-elements/{id}/deregister</tt>
*
* @param id
* the ID of the compute element.
*/
public ComputeElementRestRep deregister(URI id) {
return client.post(ComputeElementRestRep.class, getIdUrl() + "/deregister", id);
}
}