/******************************************************************************* * Copyright (c) 2008, 2012 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.eef.runtime.ui.editor.messages; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import org.eclipse.emf.eef.runtime.ui.editor.InteractiveEEFEditor; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.forms.IMessageManager; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; /** * @author glefur * */ public class MessageProcessor extends HyperlinkAdapter { private FormEditor formEditor; private Collection<MessageHandler> handlers; /** * */ public MessageProcessor() { handlers = new HashSet<MessageHandler>(); } /** * @param editor */ public void init(InteractiveEEFEditor editor) { this.formEditor = editor; for (@SuppressWarnings("rawtypes") Iterator iterator = editor.getPages().iterator(); iterator.hasNext();) { Object page = iterator.next(); //TODO: reactivate this // if (page instanceof FormPage) // ((FormPage)page).getManagedForm().getForm().getForm().addMessageHyperlinkListener(this); } } /** * @param handler the handler to add. */ public void addHandler(MessageHandler handler) { handler.setProcessor(this); handlers.add(handler); } /** * @param handler the handler to remove. */ public void removeHandler(MessageHandler handler) { handlers.remove(handler); } /** * {@inheritDoc} * @see org.eclipse.ui.forms.events.HyperlinkAdapter#linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent) */ public void linkActivated(HyperlinkEvent event) { for (MessageHandler handler : handlers) { if (handler.handle(event)) handler.process(event); } } /** * Add a message to the form editor header * @param key a unique key to identify message * @param message the message to display * @param severity the message severity */ public void addMessage(final Object key, final String message, final int severity) { if (formEditor.getSelectedPage() instanceof FormPage) { final FormPage selectedPage = (FormPage) formEditor.getSelectedPage(); selectedPage.getPartControl().getDisplay().asyncExec(new Runnable() { public void run() { IMessageManager messageManager = selectedPage.getManagedForm().getMessageManager(); messageManager.addMessage(key, message, null, severity); } }); } } /** * Remove the messages associated to the given event. * @param control the key control. */ public void removeAssociatedMessages(Control control) { if (formEditor.getSelectedPage() instanceof FormPage) { ((FormPage) formEditor.getSelectedPage()).getManagedForm().getMessageManager().removeMessages(control); } } }