/* * 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.file.QuotaDirectoryBulkRep; import com.emc.storageos.model.file.QuotaDirectoryCreateParam; import com.emc.storageos.model.file.QuotaDirectoryDeleteParam; import com.emc.storageos.model.file.QuotaDirectoryList; import com.emc.storageos.model.file.QuotaDirectoryRestRep; import com.emc.storageos.model.file.QuotaDirectoryUpdateParam; 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; /** * File Systems quota directory resources. * <p> * Base URL: <tt>/file/quotadirectories</tt> */ public class QuotaDirectories extends ProjectResources<QuotaDirectoryRestRep> implements TaskResources<QuotaDirectoryRestRep> { public QuotaDirectories(ViPRCoreClient parent, RestClient client) { super(parent, client, QuotaDirectoryRestRep.class, PathConstants.FILESYSTEM_QDIR_URL); } @Override public QuotaDirectories withInactive(boolean inactive) { return (QuotaDirectories) super.withInactive(inactive); } @Override public QuotaDirectories withInternal(boolean internal) { return (QuotaDirectories) super.withInternal(internal); } @Override public Tasks<QuotaDirectoryRestRep> getTasks(URI id) { return doGetTasks(id); } @Override public Task<QuotaDirectoryRestRep> getTask(URI id, URI taskId) { return doGetTask(id, taskId); } /** * Begins creating quota-directory for a file system * <p> * API Call: <tt>POST /file/filesystems/{id}/quota-directories</tt> * * @param fileSystemId * the ID of the file system. * @param input * the Quota directory configuration. * @return a task for monitoring the progress of the operation. */ public Task<QuotaDirectoryRestRep> createQuotaDirectory(URI fileSystemId, QuotaDirectoryCreateParam input) { return postTask(input, getByFileSystemUrl(), fileSystemId); } /** * Updates an quota directory from the given quota directory ID. * <p> * API Call: <tt>POST /file/quotadirectories/{id}</tt> * * @param id * the ID of the quota directory. * @param update * the update configuration. * @return a task for monitoring the progress of the operation. */ public Task<QuotaDirectoryRestRep> updateQuotaDirectory(URI id, QuotaDirectoryUpdateParam update) { return postTask(update, getIdUrl(), id); } /** * Begins deleting quota-directory from a file system * <p> * API Call: <tt>POST /file/quotadirectories/{id}/deactivate</tt> * * @param id * the ID of the quota directory. * @return a task for monitoring the progress of the operation. */ public Task<QuotaDirectoryRestRep> deleteQuotaDirectory(URI id, QuotaDirectoryDeleteParam input) { return postTask(input, getDeactivateUrl(), id); } /** * Gets the quota directory by ID. * <p> * API Call: <tt>GET /file/quotadirectories/{id}</tt> * * @param id * the ID of the Quota Directory * @return the quota directory for the given id. */ public QuotaDirectoryRestRep getQuotaDirectory(URI id) { QuotaDirectoryRestRep response = client.get(QuotaDirectoryRestRep.class, getIdUrl(), id); return response; } @Override protected List<QuotaDirectoryRestRep> getBulkResources(BulkIdParam input) { QuotaDirectoryBulkRep response = client.post(QuotaDirectoryBulkRep.class, input, getBulkUrl()); return defaultList(response.getQuotaDirectories()); } /** * Gets the base URL for finding quota directories by file system: <tt>/file/filesystems/{fileSystemId}/quota-directories</tt> * * @return the URL for finding by file system. */ protected String getByFileSystemUrl() { return PathConstants.FILESYSTEM_URL + "/{fileSystemId}/quota-directories"; } /** * Lists the file quota directories for the given file system by ID. * <p> * API Call: <tt>GET /file/filesystems/{fileSystemId}/quota-directories</tt> * * @param fileSystemId * the ID of the file system. * @return the list of file quota directory references for the file system. */ public List<NamedRelatedResourceRep> listByFileSystem(URI fileSystemId) { QuotaDirectoryList response = client.get(QuotaDirectoryList.class, getByFileSystemUrl(), fileSystemId); return defaultList(response.getQuotaDirs()); } /** * Gets the list of file quota directories for the given file system by ID. * <p> * This is a convenience method for: <tt>getByRefs(listByFileSystem(fileSystemId))</tt> * * @param fileSystemId * the ID of the file system. * @return the list of file quota directories for the file system. */ public List<QuotaDirectoryRestRep> getByFileSystem(URI fileSystemId) { return getByFileSystem(fileSystemId, null); } /** * Gets the list of file quota directories for the given file system by ID, optionally filtering the results. * <p> * This is a convenience method for: <tt>getByRefs(listByFileSystem(fileSystemId), filter)</tt> * * @param fileSystemId * the ID of the file system. * @param filter * the resource filter to apply to the results as they are returned (optional). * @return the list of file quota directories for the file system. */ public List<QuotaDirectoryRestRep> getByFileSystem(URI fileSystemId, ResourceFilter<QuotaDirectoryRestRep> filter) { List<NamedRelatedResourceRep> refs = listByFileSystem(fileSystemId); return getByRefs(refs, filter); } }