/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.core.notification;
import org.eclipse.che.commons.lang.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
/**
* @author andrew00x
*/
@Singleton
public class EventOriginClientPropagationPolicy implements ClientEventPropagationPolicy {
private static final Logger LOG = LoggerFactory.getLogger(EventOriginClientPropagationPolicy.class);
private final Map<URI, Set<String>> forPropagation;
@Inject
EventOriginClientPropagationPolicy(@Named("notification.client.propagate_events") Pair<String, String>[] forPropagation) {
final Map<URI, Set<String>> cfg = new HashMap<>();
for (Pair<String, String> service : forPropagation) {
try {
final URI key = new URI(service.first);
Set<String> values = cfg.get(key);
if (values == null) {
cfg.put(key, values = new LinkedHashSet<>());
}
if (service.second != null) {
values.add(service.second);
}
} catch (URISyntaxException e) {
LOG.error(e.getMessage(), e);
}
}
this.forPropagation = cfg;
}
@Override
public boolean shouldPropagated(URI uri, Object event) {
final EventOrigin eventOrigin = event.getClass().getAnnotation(EventOrigin.class);
final Set<String> set = forPropagation.get(uri);
return set != null && set.contains(eventOrigin.value());
}
}