/*
* Copyright 2013 Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.tools.core.internal.builder;
import java.util.ArrayList;
/**
* A collection of {@link DeltaListener}s.
*
* @coverage dart.tools.core.builder
*/
public class DeltaListenerList implements DeltaListener {
/**
* Answer a listener that broadcasts events to both the existing listener and the new listener
*
* @param existingListener the existing listener or {@link DeltaListenerList} or {@code null} if
* there is no existing listener
* @param newListener the listener to be added (not {@code null})
* @return a new composite listener (not {@code null})
*/
public static DeltaListener add(DeltaListener existingListener, DeltaListener newListener) {
if (existingListener == null) {
return newListener;
}
if (existingListener instanceof DeltaListenerList) {
DeltaListenerList list = (DeltaListenerList) existingListener;
if (list.children.size() == 0) {
return newListener;
}
list.children.add(newListener);
return list;
}
DeltaListenerList list = new DeltaListenerList();
list.children.add(existingListener);
list.children.add(newListener);
return list;
}
/**
* The listeners to which events are broadcast
*/
private ArrayList<DeltaListener> children = new ArrayList<DeltaListener>();
@Override
public void packageSourceAdded(SourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.packageSourceAdded(event);
}
}
@Override
public void packageSourceChanged(SourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.packageSourceChanged(event);
}
}
@Override
public void packageSourceContainerRemoved(SourceContainerDeltaEvent event) {
for (DeltaListener listener : children) {
listener.packageSourceContainerRemoved(event);
}
}
@Override
public void packageSourceRemoved(SourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.packageSourceRemoved(event);
}
}
@Override
public void pubspecAdded(ResourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.pubspecAdded(event);
}
}
@Override
public void pubspecChanged(ResourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.pubspecChanged(event);
}
}
@Override
public void pubspecRemoved(ResourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.pubspecRemoved(event);
}
}
@Override
public void sourceAdded(SourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.sourceAdded(event);
}
}
@Override
public void sourceChanged(SourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.sourceChanged(event);
}
}
@Override
public void sourceContainerRemoved(SourceContainerDeltaEvent event) {
for (DeltaListener listener : children) {
listener.sourceContainerRemoved(event);
}
}
@Override
public void sourceRemoved(SourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.sourceRemoved(event);
}
}
@Override
public void visitContext(ResourceDeltaEvent event) {
for (DeltaListener listener : children) {
listener.visitContext(event);
}
}
}