/*
* $Id: EventClient.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.HashMap;
import java.util.Map;
import com.idega.core.event.MethodCallEvent;
import com.idega.core.event.MethodCallEventDispatcher;
import com.idega.core.event.MethodCallEventGenerator;
import com.idega.core.event.MethodCallEventHandler;
import com.idega.core.event.client.MethodWrapper;
/**
*
* 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 abstract class EventClient implements MethodCallEventGenerator, MethodCallEventHandler {
private static final String METHOD_NAME = "methodName";
protected MethodCallEventDispatcher dispatcher = null;
private String subject = null;
private Map methodWrappers = null;
protected void initialize(Class parentClass) {
this.subject = parentClass.getName();
// set firing events
InOutEventDispatcher inOutEventDispatcher = InOutEventDispatcher.getInstance();
dispatcher = inOutEventDispatcher.getOutEventDispatcher();
// set listening to events
MethodCallEventDispatcher inDispatcher = inOutEventDispatcher.getInEventDispatcher();
inDispatcher.addListener(this);
}
public void addMethod(MethodWrapper methodWrapper) {
String identifier = methodWrapper.getIdentifier();
getMethodWrappers().put(identifier, methodWrapper);
}
public MethodWrapper getMethod(String methodName) {
return (MethodWrapper) getMethodWrappers().get(methodName);
}
private Map getMethodWrappers() {
if (methodWrappers == null) {
methodWrappers = new HashMap();
}
return methodWrappers;
}
protected boolean isNothingToDo() {
return ! (dispatcher.isActive());
}
protected boolean isMethod(MethodCallEvent methodCallEvent, String methodName) {
return methodName.equals(methodCallEvent.get(METHOD_NAME));
}
protected void fireEvent(String methodName) {
fireEvent(methodName, null, null);
}
protected void fireEvent(String methodName, String key1, String value1) {
fireEvent(methodName, key1, value1, null, null);
}
protected void fireEvent(String methodName, String key1, String value1, String key2, String value2) {
// use application id as sender
String sender = dispatcher.getIdentifier();
MethodCallEvent methodCallEvent = new MethodCallEventImpl(sender, subject);
methodCallEvent.put(METHOD_NAME, methodName);
if (key1 != null) {
methodCallEvent.put(key1, value1);
}
if (key2 != null) {
methodCallEvent.put(key2, value2);
}
dispatcher.fireEvent(methodCallEvent);
}
protected boolean isEventCompatible(MethodCallEvent methodCallEvent) {
String eventSubject = methodCallEvent.getSubject();
return subject.equals(eventSubject);
}
/* (non-Javadoc)
* @see com.idega.core.event.MethodCallEventHandler#handleEvent(com.idega.core.event.MethodCallEvent)
*/
public void handleEvent(MethodCallEvent methodCallEvent) {
// typically method body looks like:
//if (isEventCompatible(methodCallEvent)) {
// do something
//}
}
}