Package com.emc.vipr.client.core

Source Code of com.emc.vipr.client.core.BlockSnapshots

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.SnapshotList;
import com.emc.storageos.model.block.BlockConsistencyGroupSnapshotCreate;
import com.emc.storageos.model.block.BlockSnapshotBulkRep;
import com.emc.storageos.model.block.BlockSnapshotRestRep;
import com.emc.storageos.model.block.VolumeSnapshotParam;
import com.emc.storageos.model.block.export.ITLRestRep;
import com.emc.storageos.model.block.export.ITLRestRepList;
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.impl.RestClient;

/**
* Block snapshot resources.
* <p>
* Base URL: <tt>/block/snapshots</tt>
*/
public class BlockSnapshots extends AbstractBulkResources<BlockSnapshotRestRep> implements
        TaskResources<BlockSnapshotRestRep> {
    public BlockSnapshots(ViPRCoreClient parent, RestClient client) {
        super(parent, client, BlockSnapshotRestRep.class, PathConstants.BLOCK_SNAPSHOT_URL);
    }

    @Override
    public BlockSnapshots withInactive(boolean inactive) {
        return (BlockSnapshots) super.withInactive(inactive);
    }

    @Override
    protected List<BlockSnapshotRestRep> getBulkResources(BulkIdParam input) {
        BlockSnapshotBulkRep response = client.post(BlockSnapshotBulkRep.class, input, getBulkUrl());
        return defaultList(response.getBlockSnapshots());
    }

    /**
     * Gets a list of block snapshot references from the given URL (path + args).
     *
     * @param path
     *        the path to get.
     * @param args
     *        the arguments for the path.
     * @return the list of snapshot references.
     */
    protected List<NamedRelatedResourceRep> getList(String path, Object... args) {
        SnapshotList response = client.get(SnapshotList.class, path, args);
        return defaultList(response.getSnapList());
    }

    @Override
    public Tasks<BlockSnapshotRestRep> getTasks(URI id) {
        return doGetTasks(id);
    }

    @Override
    public Task<BlockSnapshotRestRep> getTask(URI id, URI taskId) {
        return doGetTask(id, taskId);
    }

    /**
     * Begins activating a given block snapshot by ID.
     * <p>
     * API Call: <tt>POST /block/snapshots/{id}/activate</tt>
     *
     * @param id
     *        the ID of the snapshot to activate.
     * @return a task for monitoring the progress of the operation.
     */
    public Task<BlockSnapshotRestRep> activate(URI id) {
        return postTask(getIdUrl() + "/activate", id);
    }

    /**
     * Begins restoring a given block snapshot by ID.
     * <p>
     * API Call: <tt>POST /block/snapshots/{id}/restore</tt>
     *
     * @param id
     *        the ID of the snapshot to restore.
     * @return a task for monitoring the progress of the operation.
     */
    public Task<BlockSnapshotRestRep> restore(URI id) {
        return postTask(getIdUrl() + "/restore", id);
    }

    /**
     * Begins deactivating a given block snapshot by ID.
     * <p>
     * API Call: <tt>POST /block/snapshots/{id}/deactivate</tt>
     *
     * @param id
     *        the ID of the snapshot to deactivate.
     * @return a task for monitoring the progress of the operation.
     */
    public Task<BlockSnapshotRestRep> deactivate(URI id) {
        return doDeactivateWithTask(id);
    }

    /**
     * Gets the list of exports (initiator-target-lun) for a given block snapshot by ID.
     * <p>
     * API Call: <tt>GET /block/snapshots/{id}/exports</tt>
     *
     * @param id
     *        the ID of the snapshot.
     * @return the list of exports for a snapshot.
     */
    public List<ITLRestRep> listExports(URI id) {
        ITLRestRepList response = client.get(ITLRestRepList.class, getIdUrl() + "/exports", id);
        return defaultList(response.getExportList());
    }

    /**
     * Gets the URL for looking up block snapshots by volume: <tt>/block/volumes/{volumeId}/protection/snapshots</tt>
     *
     * @return the URL for snapshots by volume.
     */
    protected String getByVolumeUrl() {
        return PathConstants.BLOCK_VOLUMES_URL + "/{volumeId}/protection/snapshots";
    }

    /**
     * Lists the block snapshots for a given block volume.
     * <p>
     * API Call: <tt>GET /block/volumes/{volumeId}/protection/snapshots</tt>
     *
     * @param volumeId
     *        the ID of the block volume.
     * @return the list of snapshot references for the volume.
     */
    public List<NamedRelatedResourceRep> listByVolume(URI volumeId) {
        return getList(getByVolumeUrl(), volumeId);
    }

    /**
     * Gets the block snapshots for a given block volume.
     *
     * @param volumeId
     *        the ID of the block volume.
     * @return the list of block snapshots for the volume.
     *
     * @see #listByVolume(URI)
     * @see #getByRefs(java.util.Collection)
     */
    public List<BlockSnapshotRestRep> getByVolume(URI volumeId) {
        return getByVolume(volumeId, null);
    }

    /**
     * Gets the block snapshots for a given block volume, optionally filtering the results.
     *
     * @param volumeId
     *        the ID of the block volume.
     * @param filter
     *        the filter to apply (may be null, for no filtering).
     * @return the list of block snapshots for the volume.
     *
     * @see #listByVolume(URI)
     * @see #getByRefs(java.util.Collection, ResourceFilter)
     */
    public List<BlockSnapshotRestRep> getByVolume(URI volumeId, ResourceFilter<BlockSnapshotRestRep> filter) {
        List<NamedRelatedResourceRep> refs = listByVolume(volumeId);
        return getByRefs(refs, filter);
    }

    /**
     * Begins creating a snapshot (or snapshots) of a given block volume by ID.
     * <p>
     * API Call: <tt>POST /block/volumes/{volumeId}/protection/snapshots</tt>
     *
     * @param volumeId
     *        the ID of the block volume to snapshot.
     * @param input
     *        the snapshot configuration.
     * @return tasks for monitoring the progress each snapshot creation.
     */
    public Tasks<BlockSnapshotRestRep> createForVolume(URI volumeId, VolumeSnapshotParam input) {
        return postTasks(input, getByVolumeUrl(), volumeId);
    }

    /**
     * Gets the URL for listing block snapshots by consistency group:
     * <tt>/block/consistency-groups/{consistencyGroupId}/protection/snapshots</tt>
     *
     * @return the URL for listing by consistency group.
     */
    protected String getByConsistencyGroupUrl() {
        return PathConstants.BLOCK_CONSISTENCY_GROUP_URL + "/{consistencyGroupId}/protection/snapshots";
    }

    /**
     * Lists the block snapshots for a consistency group by ID.
     * <p>
     * <API Call: <tt>GET /block/consistency-groups/{consistencyGroupId}/protection/snapshots</tt>
     *
     * @param consistencyGroupId
     *        the ID of the consistency group.
     * @return the list of block snapshot references.
     */
    public List<NamedRelatedResourceRep> listByConsistencyGroup(URI consistencyGroupId) {
        return getList(getByConsistencyGroupUrl(), consistencyGroupId);
    }

    /**
     * Gets the block snapshots for a consistency group by ID.
     *
     * @param consistencyGroupId
     *        the ID of the consistency group.
     * @return the list of consistency groups.
     *
     * @see #listByConsistencyGroup(URI)
     * @see #getByRefs(java.util.Collection)
     */
    public List<BlockSnapshotRestRep> getByConsistencyGroup(URI consistencyGroupId) {
        return getByConsistencyGroup(consistencyGroupId, null);
    }

    /**
     * Gets the block snapshots for a consistency group by ID, optionally filtering the results.
     *
     * @param consistencyGroupId
     *        the ID of the consistency group.
     * @param filter
     *        the filter to apply (may be null, for no filtering).
     * @return the list of consistency groups.
     *
     * @see #listByConsistencyGroup(URI)
     * @see #getByRefs(java.util.Collection, ResourceFilter)
     */
    public List<BlockSnapshotRestRep> getByConsistencyGroup(URI consistencyGroupId,
            ResourceFilter<BlockSnapshotRestRep> filter) {
        List<NamedRelatedResourceRep> refs = listByConsistencyGroup(consistencyGroupId);
        return getByRefs(refs, filter);
    }

    /**
     * Begins creating a block snapshot for the given consistency group by ID.
     * <p>
     * API Call: <tt>POST /block/consistency-groups/{consistencyGroupId}/protection/snapshots</tt>
     *
     * @param consistencyGroupId
     *        the ID of the consistency group.
     * @param input
     *        the create configuration.
     * @return tasks for monitoring the progress of the block snapshot creation.
     */
    public Tasks<BlockSnapshotRestRep> createForConsistencyGroup(URI consistencyGroupId,
            BlockConsistencyGroupSnapshotCreate input) {
        return postTasks(input, getByConsistencyGroupUrl(), consistencyGroupId);
    }

    /**
     * Gets a particular block snapshot for a given consistency group by ID.
     * <p>
     * API Call: <tt>GET /block/consistency-groups/{consistencyGroupId}/protection/snapshots/{id}</tt>
     *
     * @param consistencyGroupId
     *        the ID of the consistency group.
     * @param id
     *        the ID of the block snapshot.
     * @return the block snapshot.
     */
    public BlockSnapshotRestRep getForConsistencyGroup(URI consistencyGroupId, URI id) {
        return client.get(BlockSnapshotRestRep.class, getByConsistencyGroupUrl() + "/{id}", consistencyGroupId, id);
    }

    /**
     * Begins activating a block snapshot for a given consistency group by ID.
     * <p>
     * API Call: <tt>POST /block/consistency-groups/{consistencyGroupId}/protection/snapshots/{id}/activate</tt>
     *
     * @param consistencyGroupId
     *        the ID of the consistency group.
     * @param id
     *        the ID of the block snapshot to activate.
     * @return a task for monitoring the progress of the operation.
     */
    public Task<BlockSnapshotRestRep> activateForConsistencyGroup(URI consistencyGroupId, URI id) {
        return postTask(getByConsistencyGroupUrl() + "/{id}/activate", consistencyGroupId, id);
    }

    /**
     * Begins deactivating a block snapshot for a consistency group by ID.
     * <p>
     * API Call: <tt>POST /block/consistency-groups/{consistencyGroupId}/protection/snapshots/{id}/deactivate</tt>
     *
     * @param consistencyGroupId
     *        the ID of the consistency group.
     * @param id
     *        the ID of the block snapshot to deactivate.
     * @return a task for monitoring the progress of the operation.
     */
    public Task<BlockSnapshotRestRep> deactivateForConsistencyGroup(URI consistencyGroupId, URI id) {
        return postTask(getByConsistencyGroupUrl() + "/{id}/deactivate", consistencyGroupId, id);
    }

    /**
     * Begins restoring a block snapshot for a consistency group by ID
     * <p>
     * API Call: <tt>POST /block/consistency-groups/{consistencyGroupId}/protection/snapshots/{id}/restore</tt>
     *
     * @param consistencyGroupId
     *        the ID of the consistency group.
     * @param id
     *        the ID of the block snapshot to restore.
     * @return a task for monitoring the progress of the operation.
     */
    public Task<BlockSnapshotRestRep> restoreForConsistencyGroup(URI consistencyGroupId, URI id) {
        return postTask(getByConsistencyGroupUrl() + "/{id}/restore", consistencyGroupId, id);
    }
}
TOP

Related Classes of com.emc.vipr.client.core.BlockSnapshots

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.