/*
* Copyright (c) 2016 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.TaskResourceRep;
import com.emc.storageos.model.auth.ACLAssignmentChanges;
import com.emc.storageos.model.auth.ACLEntry;
import com.emc.storageos.model.file.policy.FilePolicyAssignParam;
import com.emc.storageos.model.file.policy.FilePolicyBulkRep;
import com.emc.storageos.model.file.policy.FilePolicyCreateParam;
import com.emc.storageos.model.file.policy.FilePolicyCreateResp;
import com.emc.storageos.model.file.policy.FilePolicyListRestRep;
import com.emc.storageos.model.file.policy.FilePolicyRestRep;
import com.emc.storageos.model.file.policy.FilePolicyStorageResourceRestRep;
import com.emc.storageos.model.file.policy.FilePolicyStorageResources;
import com.emc.storageos.model.file.policy.FilePolicyUnAssignParam;
import com.emc.storageos.model.file.policy.FilePolicyUpdateParam;
import com.emc.vipr.client.Task;
import com.emc.vipr.client.Tasks;
import com.emc.vipr.client.ViPRCoreClient;
import com.emc.vipr.client.core.impl.PathConstants;
import com.emc.vipr.client.impl.RestClient;
public class FileProtectionPolicies extends AbstractCoreBulkResources<FilePolicyRestRep>
implements TaskResources<FilePolicyRestRep>, ACLResources {
public FileProtectionPolicies(ViPRCoreClient parent, RestClient client) {
super(parent, client, FilePolicyRestRep.class, PathConstants.FILE_PROTECTION_POLICIES_URL);
}
private String getAssignPolicyUrl() {
return PathConstants.FILE_PROTECTION_POLICY_URL + "/assign-policy";
}
private String getUnAssignPolicyUrl() {
return PathConstants.FILE_PROTECTION_POLICY_URL + "/unassign-policy";
}
private String getPolicyStorageResourcesUrl() {
return PathConstants.FILE_PROTECTION_POLICY_URL + "/policy-storage-resources";
}
/**
* Deletes the given file protection policy by ID.
* <p>
* API Call: <tt>DELETE /file/file-policies/{id}</tt>
*
* @param id
* the ID of policy to deactivate.
*/
public void delete(URI id) {
client.delete(String.class, PathConstants.FILE_PROTECTION_POLICY_URL, id);
}
/**
* Creates a File Protection Policy.
* <p>
* API Call: <tt>POST /file/file-policies/</tt>
*
* @param input
* the Policy configuration.
* @return the newly created schedule policy.
*/
public FilePolicyCreateResp create(FilePolicyCreateParam input) {
FilePolicyCreateResp element = client
.post(FilePolicyCreateResp.class, input, PathConstants.FILE_PROTECTION_POLICIES_URL);
return element;
}
/**
* Updates the given File Protection Policy by ID.
* <p>
* API Call: <tt>PUT /file/file-policies/{id}</tt>
*
* @param id
* the ID of the policy to update.
* @param input
* the update configuration.
*/
public TaskResourceRep update(URI id, FilePolicyUpdateParam input) {
return client.put(TaskResourceRep.class, input, PathConstants.FILE_PROTECTION_POLICY_URL, id);
}
/**
* Get the details of a given policy.
* <p>
* API Call: <tt>GET /file/file-policies/{id}</tt>
*
* @param id
* the ID of the policy.
* @return get the details of given policy.
*/
public FilePolicyRestRep getFilePolicy(URI id) {
FilePolicyRestRep response = client.get(FilePolicyRestRep.class, PathConstants.FILE_PROTECTION_POLICY_URL, id);
return response;
}
/**
* Lists the file policies.
* <p>
* API Call: <tt>GET /file/file-policies</tt>
*
* @return get the details of given policy.
*/
public FilePolicyListRestRep listFilePolicies() {
FilePolicyListRestRep response = client.get(FilePolicyListRestRep.class, PathConstants.FILE_PROTECTION_POLICIES_URL);
return response;
}
@Override
protected List<FilePolicyRestRep> getBulkResources(BulkIdParam input) {
FilePolicyBulkRep response = client.post(FilePolicyBulkRep.class, input, getBulkUrl());
return defaultList(response.getFilePolicies());
}
/**
* Assign the given policy to a give level.
* <p>
* API Call: <tt>POST /file/file-policies/{id}/assign-policy</tt>
*
* @param id
* the ID of the policy to be assigned.
* @param input
* the update configuration.
*/
public TaskResourceRep assignPolicy(URI id, FilePolicyAssignParam input) {
return client.post(TaskResourceRep.class, input, getAssignPolicyUrl(), id);
}
/**
* Un-assign the given policy from a level.
* <p>
* API Call: <tt>POST /file/file-policies/{id}/unassign-policy</tt>
*
* @param id
* the ID of the policy to be assigned.
* @param input
* the update configuration.
*/
public TaskResourceRep unassignPolicy(URI id, FilePolicyUnAssignParam input) {
return client.post(TaskResourceRep.class, input, getUnAssignPolicyUrl(), id);
}
@Override
public Tasks<FilePolicyRestRep> getTasks(URI id) {
return doGetTasks(id);
}
@Override
public Task<FilePolicyRestRep> getTask(URI id, URI taskId) {
return doGetTask(id, taskId);
}
@Override
public List<ACLEntry> getACLs(URI id) {
return doGetACLs(id);
}
@Override
public List<ACLEntry> updateACLs(URI id, ACLAssignmentChanges aclChanges) {
return doUpdateACLs(id, aclChanges);
}
/**
* Lists the file policy storage resources.
* <p>
* API Call: <tt>GET /file/file-policies/{id}/policy-storage-resources</tt>
*
* @return get the details policy storage resource for given policy.
*/
public List<FilePolicyStorageResourceRestRep> getPolicyStorageResources(URI id) {
FilePolicyStorageResources response = client.get(FilePolicyStorageResources.class, getPolicyStorageResourcesUrl(), id);
return defaultList(response.getStorageResources());
}
}