blob: 37b3a432483fe8ab31026989e82f33241d350b88 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Soyatec - initial API and implementation
*******************************************************************************/
package org.eclipse.xwt.databinding;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.databinding.observable.Realm;
/**
* This class <code>EventManager</code> is used to manage all event listeners for a observed object.
*
* @author jliu jin.liu@soyatec.com
*/
public class EventManager {
private static Map<Object, EventManager> managers = new HashMap<Object, EventManager>();
private Realm realm;
private Map<String, List<EventListener>> type2listeners = new HashMap<String, List<EventListener>>();
/**
* private constructor, lazy creating.
*/
private EventManager(Object observed, Realm realm) {
this.realm = realm;
}
public static EventManager getEventManager(Object eventTarget, Realm realm) {
EventManager eventManager = managers.get(eventTarget);
if (eventManager == null || eventManager.realm != realm) {
eventManager = new EventManager(eventTarget, realm);
managers.put(eventTarget, eventManager);
}
return eventManager;
}
public void dispatchEvent(Event event) {
String eventType = event.getEventType();
List<EventListener> listeners = type2listeners.get(eventType);
for (EventListener l : listeners) {
l.handleEvent(event);
}
}
public void addEventListener(String eventType, EventListener eventListener) {
List<EventListener> listeners = type2listeners.get(eventType);
if (listeners == null) {
listeners = new ArrayList<EventListener>();
type2listeners.put(eventType, listeners);
}
listeners.add(eventListener);
}
public void removeEventListener(String eventType, EventListener eventListener) {
List<EventListener> listeners = type2listeners.get(eventType);
if (listeners != null) {
listeners.remove(eventListener);
}
}
}