/*******************************************************************************
* Copyright (c) May 18, 2011 Zend Technologies Ltd.
* 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
*******************************************************************************/
package org.zend.sdklib.internal.library;
import java.util.ArrayList;
import java.util.List;
import org.zend.sdklib.internal.event.StatusChangeEvent;
import org.zend.sdklib.logger.ILogger;
import org.zend.sdklib.logger.Log;
import org.zend.webapi.core.progress.IChangeNotifier;
import org.zend.webapi.core.progress.IStatus;
import org.zend.webapi.core.progress.IStatusChangeEvent;
import org.zend.webapi.core.progress.IStatusChangeListener;
/**
* Abstract class which implement {@link IChangeNotifier} interface. It is
* intended that it should be extended by all library classes. It consists
* common logic related to spreading of status changes.
*
* @author Wojciech Galanciak, 2011
*
*/
public abstract class AbstractChangeNotifier implements IChangeNotifier {
protected ILogger log;
protected IChangeNotifier notifier;
private List<IStatusChangeListener> listeners;
public AbstractChangeNotifier() {
this.log = Log.getInstance().getLogger(this.getClass().getName());
this.listeners = new ArrayList<IStatusChangeListener>();
this.notifier = this;
}
public AbstractChangeNotifier(IChangeNotifier notifier) {
this();
this.notifier = notifier;
}
@Override
public void addStatusChangeListener(IStatusChangeListener listener) {
listeners.add(listener);
}
@Override
public void removeStatusChangeListener(IStatusChangeListener listener) {
listeners.remove(listener);
}
@Override
public void statusChanged(IStatus status) {
IStatusChangeEvent event = new StatusChangeEvent(status);
for (IStatusChangeListener listener : listeners) {
listener.statusChanged(event);
}
}
}