/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 * * 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 org.apache.felix.log; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.Vector; import org.osgi.service.log.LogListener; import org.osgi.service.log.LogReaderService; /** * Implementation of the OSGi {@link LogReaderService} interface. See section 101 * of the OSGi service compendium. * <p> * The {@link LogReaderService} maintains a list of {@link org.osgi.service.log.LogEntry} * objects called the <i>log</i>. The {@link LogReaderService} is a service that bundle * developers can use to retrieve information contained in this log, and receive * notifications about {@link org.osgi.service.log.LogEntry} objects when they are created * through the {@link org.osgi.service.log.LogService}. */ final class LogReaderServiceImpl implements LogReaderService { /** The log implementation. */ private final Log m_log; /** The listeners associated with this service. */ private final List m_listeners = new Vector(); /** * Create a new instance. * @param log the log implementation */ LogReaderServiceImpl(final Log log) { this.m_log = log; } /** * This method is used to subscribe to the Log Reader Service in order to receive * log messages as they occur. Unlike the previously recorded log entries, all * log messages must be sent to subscribers of the Log Reader Service as they are * recorded. * <p> * A subscriber to the Log Reader Service must implement the {@link LogListener} * interface. * <p> * After a subscription of the Log Reader Service has been started, the subscriber's * {@link LogListener#logged(LogEntry)} method must be called with a {@link LogEntry} * object for the message each time a message is logged. * @param listener the listener object to subscribe */ public synchronized void addLogListener(final LogListener listener) { m_listeners.add(listener); m_log.addListener(listener); } /** * This method is used to unsubscribe from the Log Reader Service. * @param listener the listener object to unsubscribe */ public synchronized void removeLogListener(final LogListener listener) { m_listeners.remove(listener); m_log.removeListener(listener); } /** * This method retrieves past log entries as an enumeration with the most recent * entry first. * @return an enumeration of the {@link LogEntry} objects that have been stored */ public Enumeration getLog() { return m_log.getEntries(); } /** * Remove all log listeners registered through this service. */ synchronized void removeAllLogListeners() { Iterator listenerIt = m_listeners.iterator(); while (listenerIt.hasNext()) { LogListener listener = (LogListener) listenerIt.next(); m_log.removeListener(listener); } } }