/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.vipr.client.core;
import static com.emc.vipr.client.core.impl.SearchConstants.TENANT_PARAM;
import static com.emc.vipr.client.core.util.ResourceUtils.defaultList;
import java.net.URI;
import java.util.List;
import javax.ws.rs.core.UriBuilder;
import com.emc.storageos.model.BulkIdParam;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.TaskList;
import com.emc.storageos.model.event.EventBulkRep;
import com.emc.storageos.model.event.EventDetailsRestRep;
import com.emc.storageos.model.event.EventList;
import com.emc.storageos.model.event.EventRestRep;
import com.emc.storageos.model.event.EventStatsRestRep;
import com.emc.storageos.model.search.SearchResultResourceRep;
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;
/**
* Actionable Events
* <p>
* Base URL: <tt>/vdc/events</tt>
*/
public class Events extends AbstractCoreBulkResources<EventRestRep>implements TenantResources<EventRestRep> {
public Events(ViPRCoreClient parent, RestClient client) {
super(parent, client, EventRestRep.class, PathConstants.EVENT_URL);
}
@Override
public Events withInactive(boolean inactive) {
return (Events) super.withInactive(inactive);
}
@Override
public Events withInternal(boolean internal) {
return (Events) super.withInternal(internal);
}
@Override
protected List<EventRestRep> getBulkResources(BulkIdParam input) {
EventBulkRep response = client.post(EventBulkRep.class, input, getBulkUrl());
return defaultList(response.getHosts());
}
public void deactivate(URI id) {
doDeactivate(id);
}
public TaskList approve(URI id) {
return client.post(TaskList.class, this.getIdUrl() + "/approve", id);
}
public void decline(URI id) {
client.post(String.class, this.getIdUrl() + "/decline", id);
}
public EventDetailsRestRep getDetails(URI id) {
return client.get(EventDetailsRestRep.class, this.getIdUrl() + "/details", id);
}
/**
* Returns task statistics for the given tenant
*/
public EventStatsRestRep getStatsByTenant(URI tenantId) {
UriBuilder builder = client.uriBuilder(baseUrl + "/stats");
addTenant(builder, tenantId);
URI uri = builder.build();
return client.resource(uri).get(EventStatsRestRep.class);
}
private void addTenant(UriBuilder builder, URI tenantId) {
if (tenantId != null) {
builder.queryParam(TENANT_PARAM, tenantId);
}
}
@Override
public List<NamedRelatedResourceRep> listByTenant(URI tenantId) {
UriBuilder uriBuilder = client.uriBuilder(baseUrl);
if (tenantId != null) {
uriBuilder.queryParam(TENANT_PARAM, tenantId);
}
EventList response = client.getURI(EventList.class, uriBuilder.build());
return defaultList(response.getEvents());
}
@Override
public List<NamedRelatedResourceRep> listByUserTenant() {
return listByTenant(null);
}
@Override
public List<EventRestRep> getByTenant(URI tenantId) {
return getByTenant(tenantId, null);
}
@Override
public List<EventRestRep> getByUserTenant() {
return getByTenant(parent.getUserTenantId(), null);
}
@Override
public List<EventRestRep> getByUserTenant(ResourceFilter<EventRestRep> filter) {
List<NamedRelatedResourceRep> refs = listByTenant(parent.getUserTenantId());
return getByRefs(refs, filter);
}
@Override
public List<EventRestRep> getByTenant(URI tenantId, ResourceFilter<EventRestRep> filter) {
List<NamedRelatedResourceRep> refs = listByTenant(tenantId);
return getByRefs(refs, filter);
}
public List<EventRestRep> findByResource(URI resourceId) {
List<SearchResultResourceRep> results = performSearchBy("resource", resourceId);
return getByRefs(results);
}
}