package org.ovirt.engine.ui.common.uicommon;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.errors.EngineError;
import org.ovirt.engine.core.common.errors.EngineFault;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.ui.common.CommonApplicationMessages;
import org.ovirt.engine.ui.common.gin.AssetProvider;
import org.ovirt.engine.ui.frontend.IFrontendEventsHandler;
import org.ovirt.engine.ui.frontend.Message;
import org.ovirt.engine.ui.uicommonweb.ErrorPopupManager;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.EnumTranslator;
import com.google.inject.Inject;
public class FrontendEventsHandlerImpl implements IFrontendEventsHandler {
private final ErrorPopupManager errorPopupManager;
private static final CommonApplicationMessages messages = AssetProvider.getMessages();
@Inject
public FrontendEventsHandlerImpl(ErrorPopupManager errorPopupManager) {
this.errorPopupManager = errorPopupManager;
}
@Override
public Boolean isRaiseErrorModalPanel(VdcActionType actionType, EngineFault fault) {
return !(actionType == VdcActionType.VmLogon && fault.getError() == EngineError.nonresp);
}
@Override
public Boolean isRaiseErrorModalPanel(VdcQueryType queryType) {
return false;
}
@Override
public void runActionExecutionFailed(VdcActionType action, EngineFault fault) {
if (isRaiseErrorModalPanel(action, fault)) {
errorPopupManager.show(messages.uiCommonRunActionExecutionFailed(
EnumTranslator.getInstance().translate(action), fault.getMessage()));
}
}
@Override
public void runMultipleActionFailed(VdcActionType action, List<VdcReturnValueBase> returnValues) {
List<VdcActionType> actions = new ArrayList<>();
for (int i = 0; i < returnValues.size(); i++) {
actions.add(action);
}
runMultipleActionsFailed(actions, returnValues);
}
@Override
public void runMultipleActionsFailed(Map<VdcActionType, List<VdcReturnValueBase>> failedActionsMap,
MessageFormatter messageFormatter) {
List<VdcActionType> actions = new ArrayList<>();
List<VdcReturnValueBase> returnValues = new ArrayList<>();
for (Entry<VdcActionType, List<VdcReturnValueBase>> entry : failedActionsMap.entrySet()) {
for (int i = 0; i < entry.getValue().size(); ++i) {
actions.add(entry.getKey());
}
returnValues.addAll(entry.getValue());
}
runMultipleActionsFailed(actions, returnValues, messageFormatter);
}
@Override
public void runMultipleActionsFailed(List<VdcActionType> actions, List<VdcReturnValueBase> returnValues) {
runMultipleActionsFailed(actions, returnValues, innerMessage -> messages.uiCommonRunActionFailed(innerMessage));
}
public void runMultipleActionsFailed(List<VdcActionType> actions,
List<VdcReturnValueBase> returnValues,
MessageFormatter messageFormatter) {
List<Message> errors = new ArrayList<>();
int actionNum = 0;
for (VdcReturnValueBase v : returnValues) {
if (isRaiseErrorModalPanel(actions.get(actionNum++), v.getFault())) {
String description =
(v.getDescription() != null && !"".equals(v.getDescription().trim())) || returnValues.size() == 1 ? v.getDescription() : ConstantsManager.getInstance().getConstants().action() + " " + actionNum; //$NON-NLS-1$ //$NON-NLS-2$
if (!v.isValid()) {
for (String validateMessage : v.getValidationMessages()) {
errors.add(new Message(description, validateMessage));
}
} else {
errors.add(new Message(description, v.getFault().getMessage()));
}
}
}
errorPopupManager.show(messageFormatter.format(ErrorMessageFormatter.formatMessages(errors)));
}
@Override
public void runQueryFailed(List<VdcQueryReturnValue> returnValue) {
errorPopupManager.show(
messages.uiCommonRunQueryFailed(
returnValue != null ? ErrorMessageFormatter.formatQueryReturnValues(returnValue) : "null")); //$NON-NLS-1$
}
@Override
public void publicConnectionClosed(Exception ex) {
errorPopupManager.show(
messages.uiCommonPublicConnectionClosed(ex.getLocalizedMessage()));
}
}