package org.ovirt.engine.ui.common.widget.tooltip; import java.util.LinkedHashSet; import java.util.Set; import org.gwtbootstrap3.client.ui.constants.Placement; import org.ovirt.engine.ui.uicompat.external.StringUtils; public class TooltipConfig { public interface Defaults { /** * Tooltip HTML template. * <p> * <code>{0}</code> should contain {@value TEMPLATE_CLASS_OUTER} <br> * <code>{1}</code> should contain {@value TEMPLATE_CLASS_ARROW} <br> * <code>{2}</code> should contain {@value TEMPLATE_CLASS_INNER} */ String TEMPLATE = "<div class=\"{0}\"><div class=\"{1}\"></div><div class=\"{2}\"></div></div>"; //$NON-NLS-1$ String TEMPLATE_CLASS_OUTER = "tooltip"; //$NON-NLS-1$ String TEMPLATE_CLASS_ARROW = "tooltip-arrow"; //$NON-NLS-1$ String TEMPLATE_CLASS_INNER = "tooltip-inner"; //$NON-NLS-1$ Placement PLACEMENT = Placement.TOP; } private Placement placement = Defaults.PLACEMENT; private Set<String> extraTooltipClassNames = new LinkedHashSet<>(); private boolean forceShow = false; private boolean forCellWidgetElement = false; public TooltipConfig setPlacement(Placement placement) { if (placement != null) { this.placement = placement; } return this; } public Placement getPlacement() { return placement; } public TooltipConfig addTooltipClassName(String className) { if (StringUtils.isNotEmpty(className)) { extraTooltipClassNames.add(className); } return this; } public String getTooltipTemplate() { String template = Defaults.TEMPLATE; template = template.replace("{0}", getOuterClassNames()); //$NON-NLS-1$ template = template.replace("{1}", Defaults.TEMPLATE_CLASS_ARROW); //$NON-NLS-1$ template = template.replace("{2}", Defaults.TEMPLATE_CLASS_INNER); //$NON-NLS-1$ return template; } private String getOuterClassNames() { Set<String> classNames = new LinkedHashSet<>(); classNames.add(Defaults.TEMPLATE_CLASS_OUTER); classNames.addAll(extraTooltipClassNames); return StringUtils.join(classNames, " "); //$NON-NLS-1$ } public TooltipConfig setForceShow() { forceShow = true; return this; } public boolean isForceShow() { return forceShow; } public TooltipConfig markAsCellWidgetTooltip() { forCellWidgetElement = true; return this; } public boolean isForCellWidgetElement() { return forCellWidgetElement; } }