package com.idega.event;
import java.util.Hashtable;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.event.EventListenerList;
import com.idega.business.IBOSessionBean;
import com.idega.core.component.data.ICObjectInstance;
import com.idega.idegaweb.IWException;
import com.idega.idegaweb.IWLocation;
import com.idega.presentation.IWContext;
import com.idega.presentation.Page;
import com.idega.util.ArrayUtil;
/**
* <p>Title: idegaWeb</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: idega Software</p>
* @author <a href="gummi@idega.is">Gu�mundur �g�st S�mundsson</a>
* @version 1.0
**/
public class IWEventMachineBean extends IBOSessionBean implements IWEventMachine {
private static final long serialVersionUID = -1882304329276711514L;
private static final Logger LOGGER = Logger.getLogger(IWEventMachineBean.class.getName());
/**
*
* @uml.property name="_stateMap"
* @uml.associationEnd multiplicity="(0 1)" qualifier="idObj:java.lang.Object list:javax.swing.event.EventListenerList"
*/
private Map<Object, EventListenerList> _stateMap = new Hashtable<Object, EventListenerList>();
public EventListenerList getListenersFor(ICObjectInstance instance) {
return getListenersFor(instance.getPrimaryKey());
}
public EventListenerList getListenersFor(IWLocation location) {
return getListenersFor((Object)location);
}
public EventListenerList getListenersFor(String location) {
return getListenersFor((Object)location);
}
public EventListenerList getListenersForCompoundId(String compoundId) {
return getListenersFor(compoundId);
}
private EventListenerList getListenersFor(Object idObj) {
EventListenerList list = this.getUserStatesMap().get(idObj);
if (list == null) {
list = new EventListenerList();
getUserStatesMap().put(idObj, list);
}
return list;
}
private Map<Object, EventListenerList> getUserStatesMap() {
return this._stateMap;
}
public void processEvent(Page page, IWContext iwc) {
IWPresentationEvent[] events = IWPresentationEvent.getCurrentEvents(iwc);
if (ArrayUtil.isEmpty(events)) {
return;
}
for (int i = 0; i < events.length; i++) {
events[i].setPage(page);
events[i].setIWContext(iwc);
}
Object id = IWPresentationEvent.getSource(iwc);
if (id == null) {
LOGGER.warning("Object ID can not be resolved!");
return;
}
EventListenerList list = this.getListenersFor(id);
if (list == null) {
return;
}
IWActionListener[] listeners = list.getListeners(IWActionListener.class);
for (int i = 0; i < listeners.length; i++) {
IWActionListener listener = listeners[i];
for (int j = 0; j < events.length; j++) {
IWPresentationEvent event = events[j];
try {
listener.actionPerformed(event);
} catch (IWException ex) {
LOGGER.log(Level.WARNING, "Error performing event " + event + " for listener: " + listener, ex);
}
}
}
}
}