package com.linkedin.thirdeye.anomaly.events;
import com.linkedin.thirdeye.datalayer.dto.EventDTO;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang.NullArgumentException;
public class EventDataProviderManager {
Map<String, EventDataProvider<EventDTO>> eventDataProviderMap = new HashMap<>();
private static final EventDataProviderManager INSTANCE = new EventDataProviderManager();
private EventDataProviderManager() {
}
public static EventDataProviderManager getInstance() {
return INSTANCE;
}
public void registerEventDataProvider(String eventType, EventDataProvider<EventDTO> eventDataProvider) {
eventDataProviderMap.put(eventType, eventDataProvider);
}
/**
* Fetches events from the event data provider according to the eventType in event filter
* @param eventFilter
* @return
*/
public List<EventDTO> getEvents(EventFilter eventFilter) {
if (eventFilter == null) {
throw new NullArgumentException("EventFilter or event type found null ");
}
List<EventDTO> events = new ArrayList<>();
String eventType = eventFilter.getEventType();
if (eventType == null) {
// return all
for (Entry<String, EventDataProvider<EventDTO>> entry : eventDataProviderMap.entrySet()) {
events.addAll(entry.getValue().getEvents(eventFilter));
}
} else {
EventDataProvider<EventDTO> eventDataProvider = eventDataProviderMap.get(eventType);
if (eventDataProvider != null) {
events.addAll(eventDataProvider.getEvents(eventFilter));
} else {
throw new IllegalArgumentException("Event provider for event type " + eventType + " not registered");
}
}
return events;
}
}