/*
* $Id: FireEventFilter.java,v 1.2 2007/05/10 22:35:04 thomas Exp $
* Created on Jan 11, 2007
*
* Copyright (C) 2007 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package com.idega.core.event.impl;
import java.util.Iterator;
import java.util.Map;
import com.idega.core.event.MethodCallEvent;
import com.idega.util.datastructures.map.TimeLimitedMap;
/**
*
* Last modified: $Date: 2007/05/10 22:35:04 $ by $Author: thomas $
*
* @author <a href="mailto:thomas@idega.com">thomas</a>
* @version $Revision: 1.2 $
*/
public class FireEventFilter {
public static final long EVENT_STORE_TIME = 30;
private Map forbiddenEvents = null;
public FireEventFilter() {
forbiddenEvents = TimeLimitedMap.getInstanceWithTimeLimitInMinutes(EVENT_STORE_TIME);
}
public void add(MethodCallEvent methodCallEvent) {
forbiddenEvents.put(methodCallEvent.getIdentifier(), methodCallEvent);
}
public boolean isAccepted(MethodCallEvent methodCallEvent) {
String sameEvent = findEqualEvent(methodCallEvent);
if (sameEvent == null) {
return true;
}
forbiddenEvents.remove(sameEvent);
return false;
}
private String findEqualEvent(MethodCallEvent methodCallEvent) {
Iterator iterator = forbiddenEvents.values().iterator();
while (iterator.hasNext()) {
MethodCallEvent forbiddenEvent = (MethodCallEvent) iterator.next();
if (hasSameContent(forbiddenEvent, methodCallEvent)) {
return forbiddenEvent.getIdentifier();
}
}
return null;
}
private boolean hasSameContent(MethodCallEvent forbiddenEvent, MethodCallEvent event) {
String forbiddenSubject = forbiddenEvent.getSubject();
String subject = event.getSubject();
if (! hasSameValue(forbiddenSubject, subject)) {
return false;
}
Iterator forbiddenKeys = forbiddenEvent.getKeys().iterator();
while (forbiddenKeys.hasNext()) {
String key = (String) forbiddenKeys.next();
String forbiddenValue = forbiddenEvent.get(key);
String value = event.get(key);
if (! hasSameValue(forbiddenValue,value)) {
return false;
}
}
return true;
}
private boolean hasSameValue(String value1, String value2) {
if (value1 == null && value2 == null) {
return true;
}
if (value1 != null) {
return value1.equals(value2);
}
// value1 is null but not value2 therefore false
return false;
}
}