package org.ovirt.engine.ui.common.uicommon;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.ui.common.CommonApplicationTemplates;
import org.ovirt.engine.ui.common.gin.AssetProvider;
import org.ovirt.engine.ui.frontend.Message;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
/**
* Utility class used to format Frontend messages into Strings suitable for displaying in UI.
*/
public class ErrorMessageFormatter {
private static final CommonApplicationTemplates templates = AssetProvider.getTemplates();
public static String formatMessages(List<Message> values) {
// If one error message without description no need to format
if (values.size() == 1) {
Message msg = values.get(0);
if (msg.getDescription() == null || "".equals(msg.getDescription())) { //$NON-NLS-1$
return msg.getText();
}
}
SafeHtmlBuilder allSb = new SafeHtmlBuilder();
allSb.append(SafeHtmlUtils.fromTrustedString("<br/><br/>")); //$NON-NLS-1$
Map<String, Set<String>> desc2msgs = getDescription2MsgMap(values);
for (Map.Entry<String, Set<String>> entry : desc2msgs.entrySet()) {
String desc = entry.getKey();
SafeHtml sh = buildItemList(entry.getValue());
if (!"".equals(desc)) { //$NON-NLS-1$
allSb.append(SafeHtmlUtils.fromString(desc + ":")); //$NON-NLS-1$
}
allSb.append(sh);
}
return allSb.toSafeHtml().asString();
}
public static String formatErrorMessages(List<String> values) {
if (values.size() == 1) {
return values.get(0);
}
SafeHtmlBuilder allSb = new SafeHtmlBuilder();
allSb.append(SafeHtmlUtils.fromTrustedString("<br/><br/>")); //$NON-NLS-1$
SafeHtml sh = buildItemList(values);
allSb.append(sh);
return allSb.toSafeHtml().asString();
}
private static SafeHtml buildItemList(Collection<String> items) {
SafeHtmlBuilder itemBuilder = new SafeHtmlBuilder();
for (String i : items) {
itemBuilder.append(templates.listItem(SafeHtmlUtils.fromSafeConstant(i)));
}
return templates.unsignedList(itemBuilder.toSafeHtml());
}
public static String formatReturnValues(List<VdcReturnValueBase> values) {
StringBuilder msg = new StringBuilder();
for (VdcReturnValueBase val : values) {
msg.append(val.getFault().getMessage());
}
return msg.toString();
}
public static String formatQueryReturnValues(List<VdcQueryReturnValue> values) {
StringBuilder msg = new StringBuilder();
for (VdcQueryReturnValue val : values) {
msg.append(val.getExceptionString());
}
return msg.toString();
}
private static Map<String, Set<String>> getDescription2MsgMap(List<Message> msgList) {
Map<String, Set<String>> desc2Msgs = new HashMap<>();
for (Message msg : msgList) {
String desc = msg.getDescription();
if (desc == null) {
desc = ""; //$NON-NLS-1$
}
desc = desc.trim();
Set<String> msgs = desc2Msgs.get(desc);
if (msgs == null) {
msgs = new HashSet<>();
desc2Msgs.put(desc, msgs);
}
msgs.add(msg.getText());
}
return desc2Msgs;
}
}