/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation 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:
* Intel Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
public class NotificationManager /*implements ISettingsChangeListener */{
private static NotificationManager fInstance;
private List<ISettingsChangeListener> fListeners;
private NotificationManager(){
fListeners = new CopyOnWriteArrayList<ISettingsChangeListener>();
}
public static NotificationManager getInstance(){
if(fInstance == null)
fInstance = new NotificationManager();
return fInstance;
}
public void optionRemoved(IResourceInfo rcInfo, IHoldsOptions holder, IOption option) {
SettingsChangeEvent event = createOptionRemovedEvent(rcInfo, holder, option);
notifyListeners(event);
}
public void optionChanged(IResourceInfo rcInfo, IHoldsOptions holder, IOption option, Object oldValue) {
SettingsChangeEvent event = createOptionChangedEvent(rcInfo, holder, option, oldValue);
notifyListeners(event);
}
private void notifyListeners(SettingsChangeEvent event){
for (ISettingsChangeListener listener : fListeners)
listener.settingsChanged(event);
}
private static SettingsChangeEvent createOptionChangedEvent(IResourceInfo rcInfo, IHoldsOptions holder, IOption option, Object oldValue){
return new SettingsChangeEvent(SettingsChangeEvent.CHANGED, rcInfo, holder, option, oldValue);
}
private static SettingsChangeEvent createOptionRemovedEvent(IResourceInfo rcInfo, IHoldsOptions holder, IOption option){
return new SettingsChangeEvent(SettingsChangeEvent.REMOVED, rcInfo, holder, option, null);
}
public void subscribe(ISettingsChangeListener listener){
fListeners.add(listener);
}
public void unsubscribe(ISettingsChangeListener listener){
fListeners.remove(listener);
}
}