/******************************************************************************* | |
* 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); | |
} | |
} | |
} |