use of org.ovirt.engine.ui.frontend.communication.VdcOperationCallbackList in project ovirt-engine by oVirt.
the class Frontend method runMultipleAction.
/**
* Run multiple actions using the same {@code ActionType}.
* @param actionType The action type.
* @param parameters The list of parameters.
* @param isRunOnlyIfAllValidationPass A flag to only run the actions if all can be completed.
* @param callback The callback to call when the operation completes.
* @param state The state.
* @param showErrorDialog Should we show an error dialog?
* @param waitForResult a flag to return the result after running the whole action and not just the can do actions.
*/
public void runMultipleAction(final ActionType actionType, final List<ActionParametersBase> parameters, final boolean isRunOnlyIfAllValidationPass, final IFrontendMultipleActionAsyncCallback callback, final Object state, final boolean showErrorDialog, final boolean waitForResult) {
VdcOperationCallbackList<VdcOperation<ActionType, ActionParametersBase>, List<ActionReturnValue>> multiCallback = new VdcOperationCallbackList<VdcOperation<ActionType, ActionParametersBase>, List<ActionReturnValue>>() {
@Override
public void onSuccess(final List<VdcOperation<ActionType, ActionParametersBase>> operationList, final List<ActionReturnValue> resultObject) {
// $NON-NLS-1$
logger.finer("Frontend: successfully executed runMultipleAction, determining result!");
List<ActionReturnValue> failed = resultObject.stream().filter(v -> !v.isValid()).collect(Collectors.toList());
if (showErrorDialog && !failed.isEmpty()) {
translateErrors(failed);
getEventsHandler().runMultipleActionFailed(actionType, failed);
}
if (callback != null) {
callback.executed(new FrontendMultipleActionAsyncResult(actionType, parameters, resultObject, state));
}
fireAsyncActionSucceededEvent(state);
}
@Override
public void onFailure(final List<VdcOperation<ActionType, ActionParametersBase>> operation, final Throwable caught) {
if (ignoreFailure(caught)) {
return;
}
// $NON-NLS-1$
logger.log(Level.SEVERE, "Failed to execute runMultipleAction: " + caught, caught);
failureEventHandler(caught);
if (callback != null) {
callback.executed(new FrontendMultipleActionAsyncResult(actionType, parameters, null, state));
}
fireAsyncActionFailedEvent(state);
}
};
List<VdcOperation<?, ?>> operationList = parameters.stream().map(p -> new VdcOperation<>(actionType, p, !waitForResult, multiCallback, isRunOnlyIfAllValidationPass)).collect(Collectors.toList());
fireAsyncOperationStartedEvent(state);
if (operationList.isEmpty()) {
// it ourselves.
if (scheduler == null) {
scheduler = Scheduler.get();
}
scheduler.scheduleDeferred(() -> {
if (callback != null) {
List<ActionReturnValue> emptyResult = new ArrayList<>();
callback.executed(new FrontendMultipleActionAsyncResult(actionType, parameters, emptyResult, state));
}
});
} else {
getOperationManager().addOperationList(operationList);
}
}
use of org.ovirt.engine.ui.frontend.communication.VdcOperationCallbackList in project ovirt-engine by oVirt.
the class Frontend method runMultipleQueries.
/**
* Run multiple queries in a single request to the back-end.
* @param queryTypeList A list of {@code QueryType}s.
* @param queryParamsList A list of parameters associated with each query.
* @param callback The callback to call when the query completes.
* @param state The state object.
*/
public void runMultipleQueries(final List<QueryType> queryTypeList, final List<QueryParametersBase> queryParamsList, final IFrontendMultipleQueryAsyncCallback callback, final Object state) {
VdcOperationCallbackList<VdcOperation<QueryType, QueryParametersBase>, List<QueryReturnValue>> multiCallback = new VdcOperationCallbackList<VdcOperation<QueryType, QueryParametersBase>, List<QueryReturnValue>>() {
@Override
public void onSuccess(final List<VdcOperation<QueryType, QueryParametersBase>> operationList, final List<QueryReturnValue> resultObject) {
// $NON-NLS-1$
logger.finer("Succesful returned result from runMultipleQueries!");
FrontendMultipleQueryAsyncResult f = new FrontendMultipleQueryAsyncResult(queryTypeList, queryParamsList, resultObject);
callback.executed(f);
fireAsyncQuerySucceededEvent(state);
}
@Override
public void onFailure(final List<VdcOperation<QueryType, QueryParametersBase>> operationList, final Throwable caught) {
try {
if (ignoreFailure(caught)) {
return;
}
// $NON-NLS-1$
logger.log(Level.SEVERE, "Failed to execute runMultipleQueries: " + caught, caught);
FrontendMultipleQueryAsyncResult f = new FrontendMultipleQueryAsyncResult(queryTypeList, queryParamsList, null);
failureEventHandler(caught);
callback.executed(f);
} finally {
fireAsyncQueryFailedEvent(state);
}
}
};
List<VdcOperation<?, ?>> operationList = new ArrayList<>();
for (int i = 0; i < queryTypeList.size(); i++) {
QueryParametersBase parameters = queryParamsList.get(i);
// Why do we do this?
parameters.setRefresh(false);
initQueryParamsFilter(parameters);
operationList.add(new VdcOperation<>(queryTypeList.get(i), parameters, true, multiCallback, false));
}
fireAsyncOperationStartedEvent(state);
getOperationManager().addOperationList(operationList);
}
Aggregations