/*
* $Id: MethodCallEventDispatcherImpl.java,v 1.3 2007/05/11 13:32:57 thomas Exp $
* Created on Jan 9, 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.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.idega.core.event.MethodCallEvent;
import com.idega.core.event.MethodCallEventDispatcher;
import com.idega.core.event.MethodCallEventHandler;
/**
*
* Last modified: $Date: 2007/05/11 13:32:57 $ by $Author: thomas $
*
* @author <a href="mailto:thomas@idega.com">thomas</a>
* @version $Revision: 1.3 $
*/
public class MethodCallEventDispatcherImpl implements MethodCallEventDispatcher{
// identifer used e.g. for sender id (used by filters)
private String identifier = null;
private List eventHandler = null;
private boolean isActive = false;
public boolean isActive() {
return isActive;
}
public MethodCallEventDispatcherImpl(String identifier) {
this.identifier = identifier;
}
public String getIdentifier() {
return identifier;
}
public synchronized void addListener(MethodCallEventHandler methodCallEventHandler) {
if (eventHandler == null) {
eventHandler = new ArrayList();
}
eventHandler.add(methodCallEventHandler);
isActive = true;
}
public synchronized void removeListener(MethodCallEventHandler methodCallEventHandler) {
if (eventHandler != null) {
// wrong call, was never added
return;
}
if (! eventHandler.remove(methodCallEventHandler)) {
// wrong call, is already removed or was never added
return;
}
// still active?
if (eventHandler.isEmpty()){
isActive = false;
}
}
public void fireEvent(MethodCallEvent methodCallEvent) {
if (isActive()) {
Iterator iterator = eventHandler.iterator();
while (iterator.hasNext()) {
MethodCallEventHandler methodCallEventListener = (MethodCallEventHandler) iterator.next();
methodCallEventListener.handleEvent(methodCallEvent);
}
}
}
}