package org.ovirt.engine.api.restapi.resource;
import java.util.List;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.Action;
import org.ovirt.engine.api.model.Event;
import org.ovirt.engine.api.model.Events;
import org.ovirt.engine.api.resource.ActionResource;
import org.ovirt.engine.api.resource.EventResource;
import org.ovirt.engine.api.resource.EventsResource;
import org.ovirt.engine.api.restapi.types.ExternalStatusMapper;
import org.ovirt.engine.core.common.action.AddExternalEventParameters;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.AuditLog;
import org.ovirt.engine.core.common.interfaces.SearchType;
import org.ovirt.engine.core.common.queries.GetAuditLogByIdParameters;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
public class BackendEventsResource
extends AbstractBackendCollectionResource<Event, AuditLog>
implements EventsResource {
public BackendEventsResource() {
super(Event.class, AuditLog.class);
}
@Override
public Events list() {
return mapCollection(getBackendCollection());
}
private Events mapCollection(List<AuditLog> entities) {
Events collection = new Events();
for (AuditLog entity : entities) {
collection.getEvents().add(addLinks(map(entity)));
}
return collection;
}
@Override
public Response undelete(Action action) {
return performAction(VdcActionType.DisplayAllAuditLogAlerts, new VdcActionParametersBase(), action, false);
}
@Override
public EventResource getEventResource(String id) {
return inject(new BackendEventResource(id));
}
private List<AuditLog> getBackendCollection() {
if (isFiltered()) {
return getBackendCollection(VdcQueryType.GetAllEventMessages, new VdcQueryParametersBase());
} else {
return getBackendCollection(SearchType.AuditLog);
}
}
@Override
public Response add(Event event) {
validateParameters(event, "origin", "severity", "customId", "description");
return performCreate(VdcActionType.AddExternalEvent,
getParameters(event),
new QueryIdResolver<Long>(VdcQueryType.GetAuditLogById, GetAuditLogByIdParameters.class));
}
private AddExternalEventParameters getParameters(Event event) {
AddExternalEventParameters parameters;
boolean isHostExternalStateDefined = event.isSetHost() &&
event.getHost().isSetExternalStatus();
boolean isStorageDomainExternalStateDefined = event.isSetStorageDomain() &&
event.getStorageDomain().isSetExternalStatus();
if (isHostExternalStateDefined) {
parameters = new AddExternalEventParameters(
map(event),
ExternalStatusMapper.map(event.getHost().getExternalStatus())
);
}
else if (isStorageDomainExternalStateDefined) {
parameters = new AddExternalEventParameters(
map(event),
ExternalStatusMapper.map(event.getStorageDomain().getExternalStatus())
);
}
else {
parameters = new AddExternalEventParameters(map(event), null);
}
return parameters;
}
@Override
public ActionResource getActionResource(String action, String oid) {
return inject(new BackendActionResource(action, oid));
}
}