| /******************************************************************************* |
| * Copyright (c) 2010, 2011 Tasktop Technologies and others. |
| * 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: |
| * Tasktop Technologies - initial API and implementation |
| * Itema AS - bug 331424 handle default event-sink action associations |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.internal.commons.notifications.ui; |
| |
| import java.util.ArrayList; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtensionPoint; |
| import org.eclipse.core.runtime.IExtensionRegistry; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.mylyn.commons.notifications.core.NotificationSink; |
| |
| /** |
| * Describes an event that is handled through a notification. The handling of event is stored in |
| * {@link NotificationAction} objects that delegate to {@link NotificationSink} objects for the handling of actual |
| * events. |
| * |
| * @author Steffen Pingel |
| * @author Torkild U. Resheim |
| */ |
| public class NotificationEvent extends NotificationElement { |
| |
| private static final String EXTENSION_POINT_ID = "org.eclipse.mylyn.commons.notifications.notifications"; //$NON-NLS-1$ |
| |
| private NotificationCategory category; |
| |
| private boolean selected; |
| |
| private final ArrayList<String> defaultSinks; |
| |
| /** |
| * Tests whether or not the event should per default be handled by the sink with the specified identifier. |
| * |
| * @param sinkId |
| * the sink identifier |
| * @return <code>true</code> if the |
| */ |
| public boolean defaultHandledBySink(String sinkId) { |
| if (defaultSinks.isEmpty() || defaultSinks.contains(sinkId)) { |
| return true; |
| } |
| return false; |
| } |
| |
| public NotificationEvent(IConfigurationElement element) { |
| super(element); |
| defaultSinks = new ArrayList<String>(); |
| IConfigurationElement[] children = element.getChildren("defaultHandler"); //$NON-NLS-1$ |
| for (IConfigurationElement child : children) { |
| defaultSinks.add(child.getAttribute("sinkId")); //$NON-NLS-1$ |
| } |
| doEventMappings(); |
| } |
| |
| private void doEventMappings() { |
| IExtensionRegistry registry = Platform.getExtensionRegistry(); |
| IExtensionPoint point = registry.getExtensionPoint(EXTENSION_POINT_ID); |
| if (point != null) { |
| IConfigurationElement[] elements = point.getConfigurationElements(); |
| for (IConfigurationElement mapping : elements) { |
| if (mapping.getName().equals("eventMapping")) { //$NON-NLS-1$ |
| String eventIds = mapping.getAttribute("eventIds"); //$NON-NLS-1$ |
| String[] list = eventIds.split(","); //$NON-NLS-1$ |
| for (String item : list) { |
| if (wildCardMatch(getId(), item)) { |
| defaultSinks.add(mapping.getAttribute("sinkId")); //$NON-NLS-1$ |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| private boolean wildCardMatch(String text, String pattern) { |
| String[] cards = pattern.split("\\*"); //$NON-NLS-1$ |
| for (String card : cards) { |
| int idx = text.indexOf(card); |
| if (idx == -1) { |
| return false; |
| } |
| text = text.substring(idx + card.length()); |
| } |
| |
| return true; |
| } |
| |
| public NotificationCategory getCategory() { |
| return category; |
| } |
| |
| public String getCategoryId() { |
| return element.getAttribute("categoryId"); //$NON-NLS-1$ |
| } |
| |
| public String getDescription() { |
| IConfigurationElement[] children = element.getChildren("description"); //$NON-NLS-1$ |
| if (children.length > 0) { |
| return children[0].getValue(); |
| } |
| return ""; //$NON-NLS-1$ |
| } |
| |
| public void setCategory(NotificationCategory category) { |
| this.category = category; |
| } |
| |
| @Deprecated |
| public boolean isSelected() { |
| return selected; |
| } |
| |
| @Deprecated |
| public void setSelected(boolean selected) { |
| this.selected = selected; |
| } |
| |
| } |