package com.microsoft.live.test.util;
import java.util.concurrent.BlockingQueue;
import com.microsoft.live.LiveConnectClient;
public abstract class AsyncRunnable<OperationType, ListenerType> implements Runnable {
private final boolean calledWithUserState;
private final BlockingQueue<OperationType> queue;
private final Object userState;
protected final LiveConnectClient connectClient;
protected final ListenerType listener;
protected final String path;
public AsyncRunnable(BlockingQueue<OperationType> queue,
LiveConnectClient connectClient,
String path,
ListenerType listener) {
this.queue = queue;
this.connectClient = connectClient;
this.listener = listener;
this.path = path;
this.userState = null;
this.calledWithUserState = false;
}
public AsyncRunnable(BlockingQueue<OperationType> queue,
LiveConnectClient connectClient,
String path,
ListenerType listener,
Object userState) {
this.queue = queue;
this.connectClient = connectClient;
this.listener = listener;
this.path = path;
this.userState = userState;
this.calledWithUserState = true;
}
@Override
public void run() {
if (calledWithUserState) {
queue.add(calledWithUserState(userState));
} else {
queue.add(calledWithoutUserState());
}
}
protected abstract OperationType calledWithoutUserState();
protected abstract OperationType calledWithUserState(Object userState);
}