blob: 865156b936c56b8e821501b33841d68d43dc9173 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 Christian Pontesegger and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christian Pontesegger - initial API and implementation
*******************************************************************************/
package org.eclipse.skills.dependencies;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.ui.PlatformUI;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
public class BrokerEventDependency extends AbstractCustomDependency implements EventHandler {
public String getTopic() {
return getProperty("topic", "*");
}
@Override
public void activate() {
final IEventBroker eventBroker = PlatformUI.getWorkbench().getService(IEventBroker.class);
eventBroker.subscribe(getTopic(), this);
}
@Override
public void deactivate() {
final IEventBroker eventBroker = PlatformUI.getWorkbench().getService(IEventBroker.class);
eventBroker.unsubscribe(this);
}
@Override
public String toString() {
return "Event on \"" + getTopic() + "\" detected";
}
@Override
public void handleEvent(Event event) {
boolean matches = true;
for (final Entry<Object, Object> entry : getProperties().entrySet()) {
if ("topic".equals(entry.getKey()))
continue;
matches &= Pattern.matches(String.valueOf(entry.getValue()), getEventData(event, String.valueOf(entry.getKey())));
}
if (matches)
setFulfilled(true);
}
private String getEventData(Event event, String key) {
if ("data".equals(key)) {
Object value = event.getProperty(key);
if (value == null)
value = event.getProperty(IEventBroker.DATA);
return String.valueOf(value);
}
return String.valueOf(event.getProperty(key));
}
}