2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.logreader.internal.filereader;
15 import java.util.List;
16 import java.util.Objects;
17 import java.util.concurrent.CopyOnWriteArrayList;
19 import org.eclipse.jdt.annotation.NonNullByDefault;
20 import org.openhab.binding.logreader.internal.filereader.api.FileReaderListener;
21 import org.openhab.binding.logreader.internal.filereader.api.LogFileReader;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
26 * Base class for LogFileReader implementations. Implements base functions which are same for all LogFileReaders.
28 * @author Pauli Anttila - Initial contribution
31 public abstract class AbstractLogFileReader implements LogFileReader {
32 private final Logger logger = LoggerFactory.getLogger(AbstractLogFileReader.class);
34 private List<FileReaderListener> fileReaderListeners = new CopyOnWriteArrayList<>();
37 public boolean registerListener(FileReaderListener fileReaderListener) {
38 Objects.requireNonNull(fileReaderListener, "It's not allowed to pass a null FileReaderListener.");
39 return fileReaderListeners.contains(fileReaderListener) ? false : fileReaderListeners.add(fileReaderListener);
43 public boolean unregisterListener(FileReaderListener fileReaderListener) {
44 Objects.requireNonNull(fileReaderListener, "It's not allowed to pass a null FileReaderListener.");
45 return fileReaderListeners.remove(fileReaderListener);
49 * Send file not found event to all registered listeners.
52 public void sendFileNotFoundToListeners() {
53 for (FileReaderListener fileReaderListener : fileReaderListeners) {
55 fileReaderListener.fileNotFound();
56 } catch (Exception e) {
57 // catch all exceptions give all handlers a fair chance of handling the messages
58 logger.debug("An exception occurred while calling the FileReaderListener. ", e);
64 * Send read log line to all registered listeners.
67 public void sendLineToListeners(String line) {
68 for (FileReaderListener fileReaderListener : fileReaderListeners) {
70 fileReaderListener.handle(line);
71 } catch (Exception e) {
72 // catch all exceptions give all handlers a fair chance of handling the messages
73 logger.debug("An exception occurred while calling the FileReaderListener. ", e);
79 * Send file rotation event to all registered listeners.
82 public void sendFileRotationToListeners() {
83 for (FileReaderListener fileReaderListener : fileReaderListeners) {
85 fileReaderListener.fileRotated();
86 } catch (Exception e) {
87 // catch all exceptions give all handlers a fair chance of handling the messages
88 logger.debug("An exception occurred while calling the FileReaderListener. ", e);
94 * Send exception event to all registered listeners.
97 public void sendExceptionToListeners(Exception e) {
98 for (FileReaderListener fileReaderListener : fileReaderListeners) {
100 fileReaderListener.handle(e);
101 } catch (Exception ex) {
102 // catch all exceptions give all handlers a fair chance of handling the messages
103 logger.debug("An exception occurred while calling the FileReaderListener. ", ex);