blob: 273f9fcf9db0337b561f51cb1b4fce9df5b236f3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2016 Cognos Incorporated, IBM Corporation and others
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
******************************************************************************/
package org.eclipse.osgi.internal.log;
import java.util.*;
import org.eclipse.equinox.log.ExtendedLogReaderService;
import org.eclipse.equinox.log.LogFilter;
import org.osgi.service.log.LogEntry;
import org.osgi.service.log.LogListener;
public class ExtendedLogReaderServiceImpl implements ExtendedLogReaderService {
private final ExtendedLogReaderServiceFactory factory;
private Set<LogListener> listeners = new HashSet<>();
ExtendedLogReaderServiceImpl(ExtendedLogReaderServiceFactory factory) {
this.factory = factory;
}
@Override
public synchronized void addLogListener(LogListener listener, LogFilter filter) {
checkShutdown();
if (listener == null)
throw new IllegalArgumentException("LogListener must not be null"); //$NON-NLS-1$
if (filter == null)
throw new IllegalArgumentException("LogFilter must not be null"); //$NON-NLS-1$
listeners.add(listener);
factory.addLogListener(listener, filter);
}
@Override
public void addLogListener(LogListener listener) {
addLogListener(listener, ExtendedLogReaderServiceFactory.NULL_LOGGER_FILTER);
}
@Override
public Enumeration<LogEntry> getLog() {
checkShutdown();
return factory.getLog();
}
@Override
public synchronized void removeLogListener(LogListener listener) {
checkShutdown();
if (listener == null)
throw new IllegalArgumentException("LogListener must not be null"); //$NON-NLS-1$
factory.removeLogListener(listener);
listeners.remove(listener);
}
private synchronized void checkShutdown() {
if (listeners == null)
throw new IllegalStateException("LogReaderService is shutdown."); //$NON-NLS-1$
}
synchronized void shutdown() {
for (LogListener listener : listeners) {
factory.removeLogListener(listener);
}
listeners = null;
}
}