package com.mobilesorcery.sdk.ui; import java.util.LinkedHashMap; import java.util.Set; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.swt.widgets.Control; /** * A message provider that handles validation of several properties. * @author mattias.bybro@mosync.com * */ public class ValidationMessageProvider implements IMessageProvider { private final LinkedHashMap<Control, IMessageProvider> messages = new LinkedHashMap<Control, IMessageProvider>(); public void setMessage(Control control, IMessageProvider message) { if (message == this) { throw new IllegalArgumentException(); } if (DefaultMessageProvider.isEmpty(message)) { messages.remove(control); } else { messages.put(control, message); } } @Override public String getMessage() { IMessageProvider message = getMaxSeverityMessage(); return message == null ? null : message.getMessage(); } @Override public int getMessageType() { IMessageProvider message = getMaxSeverityMessage(); return message == null ? NONE : message.getMessageType(); } public IMessageProvider getMessage(Control control) { return messages.get(control); } public IMessageProvider getMaxSeverityMessage() { int maxSeverity = IMessageProvider.NONE; IMessageProvider result = null; for (Control control : messages.keySet()) { IMessageProvider message = messages.get(control); if (message.getMessageType() > maxSeverity) { maxSeverity = message.getMessageType(); result = message; } } return result; } public static int compare(IMessageProvider provider1, IMessageProvider provider2) { if (provider1 == null) { provider1 = DefaultMessageProvider.EMPTY; } if (provider2 == null) { provider2 = DefaultMessageProvider.EMPTY; } return provider1.getMessageType() - provider2.getMessageType(); } public boolean isEmpty(Control control) { return DefaultMessageProvider.isEmpty(getMessage(control)); } public Set<Control> getControls() { return this.messages.keySet(); } @Override public String toString() { return messages.toString(); } }