package org.ovirt.engine.api.restapi.resource.gluster;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.common.util.EnumValidator;
import org.ovirt.engine.api.model.Action;
import org.ovirt.engine.api.model.GlusterHook;
import org.ovirt.engine.api.model.ResolutionType;
import org.ovirt.engine.api.resource.gluster.GlusterHookResource;
import org.ovirt.engine.api.restapi.resource.AbstractBackendActionableResource;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.gluster.GlusterHookManageParameters;
import org.ovirt.engine.core.common.action.gluster.GlusterHookParameters;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterHookEntity;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.common.queries.gluster.GlusterHookContentQueryParameters;
import org.ovirt.engine.core.common.queries.gluster.GlusterHookQueryParameters;
import org.ovirt.engine.core.compat.Guid;
/**
* Implementation of the "glusterhooks/{id}" resource
*/
public class BackendGlusterHookResource
extends AbstractBackendActionableResource<GlusterHook, GlusterHookEntity>
implements GlusterHookResource {
private BackendGlusterHooksResource parent;
public BackendGlusterHookResource(String hookId, BackendGlusterHooksResource parent) {
this(hookId);
setParent(parent);
}
public BackendGlusterHookResource(String hookId) {
super(hookId, GlusterHook.class, GlusterHookEntity.class);
}
@Override
protected GlusterHook addParents(GlusterHook model) {
model.setId(id);
parent.addParents(model);
return model;
}
@Override
public GlusterHook get() {
GlusterHook hook = performGet(VdcQueryType.GetGlusterHookById, new GlusterHookQueryParameters(guid, true));
VdcQueryReturnValue result = runQuery(VdcQueryType.GetGlusterHookContent, new GlusterHookContentQueryParameters(guid));
if (result != null
&& result.getSucceeded()
&& result.getReturnValue() != null) {
hook.setContent(result.getReturnValue());
}
return hook;
}
@Override
public Response enable(Action action) {
return doAction(VdcActionType.EnableGlusterHook, new GlusterHookParameters(guid), action);
}
@Override
public Response disable(Action action) {
return doAction(VdcActionType.DisableGlusterHook, new GlusterHookParameters(guid), action);
}
@Override
public Response resolve(Action action) {
validateParameters(action, "resolutionType");
ResolutionType resolutionType = EnumValidator.validateEnum(ResolutionType.class, action.getResolutionType(), true);
switch (resolutionType) {
case ADD:
return addToMissingServers(action);
case COPY:
return copy(action);
default:
return null;
}
}
private Response addToMissingServers(Action action) {
return doAction(VdcActionType.AddGlusterHook, new GlusterHookManageParameters(guid), action);
}
private Response copy(Action action) {
GlusterHookManageParameters params = new GlusterHookManageParameters(guid);
if (action.isSetHost()) {
validateParameters(action.getHost(), "id|name");
Guid hostId = getHostId(action);
params.setSourceServerId(hostId);
}
return doAction(VdcActionType.UpdateGlusterHook, params, action);
}
public BackendGlusterHooksResource getParent() {
return parent;
}
public void setParent(BackendGlusterHooksResource parent) {
this.parent = parent;
}
public String getId() {
return this.id;
}
@Override
public Response remove() {
get();
return performAction(VdcActionType.RemoveGlusterHook, new GlusterHookManageParameters(guid));
}
}