package org.ovirt.engine.ui.genericapi;
import java.util.ArrayList;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.Addressing;
import org.ovirt.engine.core.common.action.LoginUserParameters;
import org.ovirt.engine.core.common.action.LogoutUserParameters;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.interfaces.BackendLocal;
import org.ovirt.engine.core.common.queries.AsyncQueryResults;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.ui.genericapi.parameters.UIQueryParametersBase;
import org.ovirt.engine.ui.genericapi.returnvalues.UIQueryReturnValue;
import org.ovirt.engine.ui.genericapi.uiqueries.UIQueryBase;
import org.ovirt.engine.ui.genericapi.uiqueries.UIQueryType;
import org.ovirt.engine.core.utils.CXFContextInterceptor;
import org.ovirt.engine.core.utils.ThreadLocalParamsContainer;
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
@BindingType(value = javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
@Addressing(enabled = true, required = true)
@WebService(name = "IBackendCxf", serviceName = "IBackend", targetNamespace = "http://service.engine.ovirt.org")
@Stateless
@Interceptors({ CXFContextInterceptor.class })
public class GenericApiService {
@EJB(name = "engine/Backend/local")
private static BackendLocal backend;
@WebMethod
public VdcReturnValueBase EndAction(VdcActionType actionType, VdcActionParametersBase parameters) {
VdcReturnValueBase returnValue = backend.EndAction(actionType, parameters);
return returnValue;
}
@WebMethod
public VdcReturnValueBase RunAction(VdcActionType actionType, VdcActionParametersBase parameters) {
VdcReturnValueBase returnValue = backend.RunAction(actionType, parameters);
return returnValue;
}
@WebMethod
public void RunAsyncQuery(VdcQueryType actionType, VdcQueryParametersBase parameters) {
backend.RunAsyncQuery(actionType, parameters);
}
@WebMethod
public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType actionType,
ArrayList<VdcActionParametersBase> parameters) {
java.util.ArrayList<VdcReturnValueBase> returnValue = backend.RunMultipleActions(
actionType, parameters);
return returnValue;
}
@WebMethod
public VdcQueryReturnValue RunQuery(VdcQueryType actionType, VdcQueryParametersBase parameters) {
VdcQueryReturnValue returnValue = backend.RunQuery(actionType, parameters);
return returnValue;
}
@WebMethod
public AsyncQueryResults GetAsyncQueryResults() {
// AsyncQueryResults returnValue =
// Backend.getInstance().GetAsyncQueryResults();
return backend.GetAsyncQueryResults();
}
@WebMethod
public VdcReturnValueBase Login(LoginUserParameters parameters) {
VdcReturnValueBase returnValue = backend.Login(parameters);
return returnValue;
}
@WebMethod
public VdcReturnValueBase Logoff(LogoutUserParameters parameters) {
VdcReturnValueBase returnValue = backend.Logoff(parameters);
return returnValue;
}
@WebMethod
public VdcQueryReturnValue RunPublicQuery(VdcQueryType actionType,
VdcQueryParametersBase parameters) {
VdcQueryReturnValue returnValue = backend.RunPublicQuery(actionType, parameters);
return returnValue;
}
@WebMethod
public VdcReturnValueBase RunAutoAction(VdcActionType actionType,
VdcActionParametersBase parameters) {
VdcReturnValueBase returnValue = backend.RunAutoAction(actionType, parameters);
return returnValue;
}
@WebMethod
public VdcQueryReturnValue RunAutoQuery(VdcQueryType actionType,
VdcQueryParametersBase parameters) {
VdcQueryReturnValue returnValue = backend.RunAutoQuery(actionType, parameters);
return returnValue;
}
@WebMethod
public UIQueryReturnValue RunUIQuery(UIQueryType actionType, UIQueryParametersBase parameters) {
UIQueryBase query = UICommandsFactory.CreateQueryCommand(actionType, parameters);
query.executeQuery();
return query.getReturnValue();
}
@WebMethod
public ArrayList<VdcQueryReturnValue> RunMultipleQueries(ArrayList<VdcQueryType> queryTypeList, ArrayList<VdcQueryParametersBase> queryParamsList) {
ArrayList<VdcQueryReturnValue> ret = new ArrayList<VdcQueryReturnValue>();
if(queryTypeList == null || queryParamsList == null) {
// TODO: LOG: "queryTypeList and/or queryParamsList is null."
}
else if(queryTypeList.size() != queryParamsList.size()) {
// TODO: LOG: "queryTypeList and queryParamsList don't have the same amount of items."
}
else if(queryTypeList.size() == 0) {
// TODO: LOG: no queries to execute.
}
else {
// TODO: next section is a temporary hack for setting the session ID
// for all queries to be the correct one.
VdcQueryParametersBase firstParams = queryParamsList.get(0);
if(StringHelper.isNullOrEmpty(firstParams.getHttpSessionId()) && StringHelper.isNullOrEmpty(firstParams.getSessionId())) {
String sessionID = ThreadLocalParamsContainer.getHttpSessionId();
for(VdcQueryParametersBase queryParams : queryParamsList) {
queryParams.setSessionId(sessionID);
queryParams.setHttpSessionId(sessionID);
}
}
for(int i=0; i<queryTypeList.size() ; i++) {
ret.add(RunQuery(queryTypeList.get(i), queryParamsList.get(i)));
}
}
return ret;
}
}