package org.ovirt.engine.core.bll; import org.ovirt.engine.core.compat.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.action.*; import org.ovirt.engine.core.common.asynctasks.*; import org.ovirt.engine.core.dal.dbbroker.*; public final class AsyncTaskFactory { /** * Constructs a task based on creation info (task type and task parameters * as retrieved from the vdsm). Use in order to construct tasks when service * is initializing. * * @param taskID * the ID of the task to construct. * @param pollingEnabled * true if we want to start polling the task, false otherwise. * @param creationInfo * the info by which we construct the task. * @return */ public static SPMAsyncTask Construct(AsyncTaskCreationInfo creationInfo) { async_tasks asyncTask = DbFacade.getInstance().getAsyncTaskDAO().get(creationInfo.getTaskID()); if (asyncTask == null || asyncTask.getaction_parameters() == null) { asyncTask = new async_tasks(VdcActionType.Unknown, AsyncTaskResultEnum.success, AsyncTaskStatusEnum.running, creationInfo.getTaskID(), new VdcActionParametersBase()); creationInfo.setTaskType(AsyncTaskType.unknown); } AsyncTaskParameters asyncTaskParams = new AsyncTaskParameters(creationInfo, asyncTask); return Construct(creationInfo.getTaskType(), asyncTaskParams); } /** * Constructs a task based on its type and the task type's parameters. * * @param taskID * the ID of the task to construct. * @param pollingEnabled * true if we want to start polling the task, false otherwise. * @param taskType * the type of the task which we want to construct. * @param asyncTaskParams * the parameters by which we construct the task. * @return */ public static SPMAsyncTask Construct(AsyncTaskType taskType, AsyncTaskParameters asyncTaskParams) { try { SPMAsyncTask result = null; if (taskType == AsyncTaskType.unknown) { result = new SPMAsyncTask(asyncTaskParams); } else { result = new EntityAsyncTask(asyncTaskParams); } return result; // java.lang.Class type = // java.lang.Class.forName(GetAsyncTaskTypeName(taskType)); // // java.lang.Class[] types = new java.lang.Class[2]; // types[0] = // BaseAsyncTaskParameters.class;//asyncTaskParams.getClass(); // types[1] = boolean.class; // // java.lang.reflect.Constructor info = type.getConstructor(types); // // Object[] taskCtorParams = new Object[2]; // taskCtorParams[0] = asyncTaskParams; // taskCtorParams[1] = pollingEnabled; // // Object TempAsCast = info.newInstance(taskCtorParams); // return (BaseAsyncTask)((TempAsCast instanceof BaseAsyncTask) ? // TempAsCast : null); } catch (Exception e) { log.error(String.format( "AsyncTaskFactory: Failed to get type information using reflection for AsyncTask type: %1$s.", taskType), e); return null; } } // private static String GetAsyncTaskTypeName(AsyncTaskType taskType) // { // return String.format("%1$s.%2$s%3$s", // AsyncTaskClassContainerAssemblyName, (taskType == AsyncTaskType.unknown ? // SpmAsyncTaskPrefix : EntityAsyncTaskPrefix), AsyncTaskClassPostfix); // } private static LogCompat log = LogFactoryCompat.getLog(AsyncTaskFactory.class); }