/*
* #%L
* Service Activity Monitoring :: Server
* %%
* Copyright (C) 2011 - 2012 Talend Inc.
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package org.talend.esb.sam.soap.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.talend.esb.sam.common.event.Event;
import org.talend.esb.sam.common.event.persistence.EventRepository;
import org.talend.esb.sam.common.service.MonitoringService;
import org.talend.esb.sam.common.spi.EventFilter;
import org.talend.esb.sam.common.spi.EventHandler;
/**
* Implementation of MonitoringService. This service needs all handler for
* manipulating events.
*
*/
public class MonitoringServiceImpl implements MonitoringService {
@Autowired(required = false)
private List<EventFilter> eventFilters = new ArrayList<EventFilter>();
@Autowired(required = false)
private List<EventHandler> eventHandlers = new ArrayList<EventHandler>();
private EventRepository persistenceHandler;
/**
* Sets a list of event filter. A filtered event will not processed.
*
* @param eventFilters the new event filters
*/
public void setEventFilters(List<EventFilter> eventFilters) {
this.eventFilters = eventFilters;
}
/**
* Sets a list of event manipulator. Normally it's used for password
* filtering and cutting the content.
*
* @param eventHandlers the new event handlers
*/
public void setEventHandlers(List<EventHandler> eventHandlers) {
this.eventHandlers = eventHandlers;
}
/**
* Set a persistence handler. For example the DefaultDatabaseHandler
*
* @param persistenceHandler the new persistence handler
*/
public void setPersistenceHandler(EventRepository persistenceHandler) {
this.persistenceHandler = persistenceHandler;
}
/**
* Executes all event manipulating handler and writes the event with persist
* handler.
*
* @param events the events
*/
public void putEvents(List<Event> events) {
List<Event> filteredEvents = filterEvents(events);
executeHandlers(filteredEvents);
for (Event event : filteredEvents) {
persistenceHandler.writeEvent(event);
}
}
/**
* Execute all filters for the event.
*
* @param event the event
* @return true, if successful
*/
private boolean filter(Event event) {
for (EventFilter filter : eventFilters) {
if (filter.filter(event)) {
return true;
}
}
return false;
}
/**
* Filter events.
*
* @param events the events
* @return the list of filtered events
*/
private List<Event> filterEvents(List<Event> events) {
List<Event> filteredEvents = new ArrayList<Event>();
for (Event event : events) {
if (!filter(event)) {
filteredEvents.add(event);
}
}
return filteredEvents;
}
/**
* Execute handlers.
*
* @param filteredEvents the filtered events
*/
private void executeHandlers(List<Event> filteredEvents) {
for (EventHandler current : eventHandlers) {
for (Event event : filteredEvents) {
current.handleEvent(event);
}
}
}
}