1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2024-06-16 08:34:50 +02:00
Smack/core/src/main/java/org/jivesoftware/smack/util/ObservableReader.java
Florian Schmaus 1e57f1c659 Activate checkstyle and add missing license headers
Delete also all "All rights reserved" statements, as they are
unnecessary and conflict with checkstyle's header check. Delete unused
imports.
2014-02-17 20:09:55 +01:00

115 lines
3.2 KiB
Java

/**
*
* Copyright 2003-2007 Jive Software.
*
* Licensed 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.jivesoftware.smack.util;
import java.io.*;
import java.util.*;
/**
* An ObservableReader is a wrapper on a Reader that notifies to its listeners when
* reading character streams.
*
* @author Gaston Dombiak
*/
public class ObservableReader extends Reader {
Reader wrappedReader = null;
List<ReaderListener> listeners = new ArrayList<ReaderListener>();
public ObservableReader(Reader wrappedReader) {
this.wrappedReader = wrappedReader;
}
public int read(char[] cbuf, int off, int len) throws IOException {
int count = wrappedReader.read(cbuf, off, len);
if (count > 0) {
String str = new String(cbuf, off, count);
// Notify that a new string has been read
ReaderListener[] readerListeners = null;
synchronized (listeners) {
readerListeners = new ReaderListener[listeners.size()];
listeners.toArray(readerListeners);
}
for (int i = 0; i < readerListeners.length; i++) {
readerListeners[i].read(str);
}
}
return count;
}
public void close() throws IOException {
wrappedReader.close();
}
public int read() throws IOException {
return wrappedReader.read();
}
public int read(char cbuf[]) throws IOException {
return wrappedReader.read(cbuf);
}
public long skip(long n) throws IOException {
return wrappedReader.skip(n);
}
public boolean ready() throws IOException {
return wrappedReader.ready();
}
public boolean markSupported() {
return wrappedReader.markSupported();
}
public void mark(int readAheadLimit) throws IOException {
wrappedReader.mark(readAheadLimit);
}
public void reset() throws IOException {
wrappedReader.reset();
}
/**
* Adds a reader listener to this reader that will be notified when
* new strings are read.
*
* @param readerListener a reader listener.
*/
public void addReaderListener(ReaderListener readerListener) {
if (readerListener == null) {
return;
}
synchronized (listeners) {
if (!listeners.contains(readerListener)) {
listeners.add(readerListener);
}
}
}
/**
* Removes a reader listener from this reader.
*
* @param readerListener a reader listener.
*/
public void removeReaderListener(ReaderListener readerListener) {
synchronized (listeners) {
listeners.remove(readerListener);
}
}
}