blob: 4e687ee4aed92fb4f7ee7bdb525a86dfea46da81 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2018 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* SAP AG - initial API and implementation
******************************************************************************/
package org.eclipse.ocl.examples.eventmanager.framework;
import java.lang.ref.WeakReference;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.emf.common.notify.Adapter;
/**
* A RegistrationSet is used to pool multiple {@link Registration Registrations} that were created by one call to a register...()
* method on the EventRegistry interface. This may happen when a client registers with multiple OR-connected filters. They are
* mapped to multiple registrations internally. In order to distinguish between one registration using OR-connected filters and
* several registrations, the resulting Registration objects are being pooled in the first case.
*
* @author Daniel Vocke (D044825), Axel Uhl (D043530)
*/
public class RegistrationSet {
/**
* The MoinEventFramework only stores <code>WeakReferences</code> to the registered listeners. Clients will have to
* keep a reference to their listener in order ro prevent the garbage collector from cleaning up the instance.
*/
private final WeakReference<? extends Adapter> _listener;
/**
* defines the type of the registration. (whether it is a registration for PreChangeEvent, ChangeEvents,...)
*/
private ListenerTypeEnum listenerType;
private final Set<Registration> registrations;
/**
* Adds this {@link RegistrationSet} to all <code>registrations</code>' using
* {@link Registration#addRegistrationSet(RegistrationSet)}
*/
public RegistrationSet(WeakReference<? extends Adapter> listener, ListenerTypeEnum listenerType, Collection<Registration> registrations) {
_listener = listener;
this.listenerType = listenerType;
this.registrations = new HashSet<Registration>();
for (Registration r : registrations) {
this.registrations.add(r);
r.addRegistrationSet(this);
}
}
/**
* Every Registration belongs exactly to one listener.
*
* @return a <code>WeakReference</code> to the associated listener
*/
WeakReference<? extends Adapter> getListener() {
return _listener;
}
/**
* The return value defines the type of the Listener
*
* @see ListenerTypeEnum
*/
public ListenerTypeEnum getListenerType() {
return listenerType;
}
/**
* @return a read-only collection with all {@link Registration}s that are pooled in this set
*/
Set<Registration> getRegistrations() {
return Collections.unmodifiableSet(registrations);
}
}