package org.ovirt.engine.ui.frontend.server.gwt;
import java.util.ArrayList;
import java.util.Random;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
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.businessentities.VMStatus;
import org.ovirt.engine.core.common.businessentities.VmOsType;
import org.ovirt.engine.core.common.businessentities.VmPoolType;
import org.ovirt.engine.core.common.interfaces.BackendLocal;
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.common.users.VdcUser;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
import org.ovirt.engine.ui.frontend.gwtservices.GenericApiGWTService;
import org.ovirt.engine.ui.genericapi.GenericApiService;
public class GenericApiGWTServiceImpl extends AbstractGWTServiceImpl implements
GenericApiGWTService {
static Random r = new Random();
boolean noBackend = false;
private static LogCompat log = LogFactoryCompat
.getLog(GenericApiGWTServiceImpl.class);
private BackendLocal backend;
// @EJB(name = "engine/GenericApi/local")
private static GenericApiService genericApiService;
public void init() throws ServletException {
log.debug("Initializing servlet!");
}
@Override
public VdcQueryReturnValue RunQuery(VdcQueryType search,
VdcQueryParametersBase searchParameters) {
log.debug("Server: RunQuery invoked!");
searchParameters.setSessionId(getSessionId());
return getBackend().RunQuery(search, searchParameters);
}
@Override
public VdcQueryReturnValue RunPublicQuery(VdcQueryType queryType,
VdcQueryParametersBase params) {
log.debug("Server: RunPublicQuery invoked!");
return getBackend().RunPublicQuery(queryType, params);
}
@Override
public ArrayList<VdcQueryReturnValue> RunMultipleQueries(
ArrayList<VdcQueryType> queryTypeList,
ArrayList<VdcQueryParametersBase> queryParamsList) {
log.debug("Server: RunMultipleQuery invoked! [amount of queries: " + queryTypeList.size() + "]");
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 {
for (int i = 0; i < queryTypeList.size(); i++) {
ret.add(RunQuery(queryTypeList.get(i), queryParamsList.get(i)));
}
}
for (VdcQueryReturnValue vqrv : ret) {
log.debug("VdcQueryReturnValue: " + vqrv);
}
log.debug("Server: RunMultipleQuery result [amount of queries: " + ret.size() + "]");
return ret;
}
public ArrayList<VdcReturnValueBase> RunMultipleActions(VdcActionType actionType, ArrayList<VdcActionParametersBase> multipleParams) {
log.debug("Server: RunMultipleAction invoked! [amount of actions: " + multipleParams.size() + "]");
for (VdcActionParametersBase params : multipleParams) {
params.setSessionId(getSessionId());
}
ArrayList<VdcReturnValueBase> returnValues = getBackend().RunMultipleActions(actionType,multipleParams);
return returnValues;
}
@Override
public VdcReturnValueBase RunAction(VdcActionType actionType,
VdcActionParametersBase params) {
log.debug("Server: RunAction invoked!");
params.setSessionId(getSessionId());
if (noBackend) {
VdcReturnValueBase rValue = new VdcReturnValueBase();
rValue.setSucceeded(true);
return rValue;
}
return getBackend().RunAction(actionType, params);
}
@Override
public VdcUser getLoggedInUser() {
VdcQueryParametersBase queryParams = new VdcQueryParametersBase();
queryParams.setSessionId(getSessionId());
queryParams.setHttpSessionId(getSessionId());
VdcQueryReturnValue vqrv = RunQuery(VdcQueryType.GetUserBySessionId,
queryParams);
if (!vqrv.getSucceeded()) {
return null;
} else if (vqrv.getSucceeded()) {
if (vqrv.getReturnValue() == null)
return null;
return (VdcUser) vqrv.getReturnValue();
} else {
// For unknown reason the result was failed be returned.
return null;
}
}
@Override
public VdcReturnValueBase logOff(VdcUser userToLogoff) {
LogoutUserParameters params = new LogoutUserParameters(userToLogoff.getUserId());
params.setSessionId(getSessionId());
VdcReturnValueBase returnValue = getBackend().Logoff(params);
return returnValue;
}
@Override
public VdcReturnValueBase Login(String userName, String password, String domain){
LoginUserParameters params = new LoginUserParameters(userName, password, domain, null, null, null);
params.setSessionId(getSessionId());
params.setActionType(VdcActionType.LoginAdminUser);
VdcReturnValueBase returnValue = getBackend().Login(params);
return returnValue;
}
private static VMStatus getRandomStatus() {
VMStatus[] status_values = VMStatus.values();
VMStatus status = status_values[r.nextInt(status_values.length)];
return status;
}
private static VmOsType getRandomOSType() {
VmOsType[] os_types = VmOsType.values();
VmOsType os = os_types[r.nextInt(os_types.length)];
return os;
}
private static VmPoolType getRandomVmPoolType() {
VmPoolType[] pool_types = VmPoolType.values();
VmPoolType type = pool_types[r.nextInt(pool_types.length)];
return type;
}
public BackendLocal getBackend() {
return backend;
}
@EJB(beanInterface = BackendLocal.class, mappedName = "engine/Backend/local")
public void setBackend(BackendLocal backend) {
this.backend = backend;
}
private String getSessionId() {
HttpServletRequest request = this.getThreadLocalRequest();
HttpSession session = request.getSession();
log.debug("IP [" + request.getRemoteAddr() + "], Session ID [" + session.getId() + "]");
return session.getId();
}
}