package ch.qos.logback.beagle.net;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import ch.qos.logback.beagle.visual.ITableItemStubBuffer;
import ch.qos.logback.classic.spi.ILoggingEvent;
public class EventConsumerThread extends Thread implements Listener {
final BlockingQueue<ILoggingEvent> blockingQueue = new LinkedBlockingQueue<ILoggingEvent>();
final static long MANDATORY_SLEEP = 500;
ITableItemStubBuffer<ILoggingEvent> iTableItemStubBuffer;
boolean disposed = false;
public EventConsumerThread(ITableItemStubBuffer<ILoggingEvent> iTableItemStubBuffer) {
this.iTableItemStubBuffer = iTableItemStubBuffer;
}
public BlockingQueue<ILoggingEvent> getBlockingQueue() {
return blockingQueue;
}
@Override
public void run() {
while (!disposed) {
try {
Thread.sleep(MANDATORY_SLEEP);
List<ILoggingEvent> newEventList = new ArrayList<ILoggingEvent>();
blockingQueue.drainTo(newEventList);
handleNewEvents(newEventList);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void handleNewEvents(List<ILoggingEvent> newEventList) {
if (newEventList.size() == 0)
return;
iTableItemStubBuffer.add(newEventList);
}
public boolean isDisposed() {
return disposed;
}
public void setDisposed(boolean disposed) {
this.disposed = disposed;
}
@Override
public void handleEvent(Event event) {
disposed = true;
}
}