package net.mms_projects.copy_it;
import java.util.Date;
import java.util.concurrent.Executor;
import net.mms_projects.copy_it.api.endpoints.ClipboardContentEndpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SyncingThread extends Thread implements PollingServiceInterface {
public static String SERVICE_NAME = "polling";
private boolean enabled;
private int delay = 5;
private String currentContent;
private ClipboardContentEndpoint endpoint;
private SyncListener listener;
private final Logger log = LoggerFactory.getLogger(this.getClass());
private Executor executor;
public SyncingThread(SyncListener listener,
ClipboardContentEndpoint endpoint) {
this.listener = listener;
this.endpoint = endpoint;
this.setDaemon(true);
this.start();
}
public void setEndpoint(ClipboardContentEndpoint endpoint) {
this.endpoint = endpoint;
}
@Override
public void run() {
while (!isInterrupted()) {
try {
Thread.sleep(this.delay * 1000);
if (!this.enabled) {
return;
}
this.executor.execute(new RefreshClipboard(this.endpoint));
} catch (InterruptedException e) {
this.interrupt();
}
}
}
private class RefreshClipboard implements Runnable {
private ClipboardContentEndpoint endpoint;
public RefreshClipboard(ClipboardContentEndpoint endpoint) {
this.endpoint = endpoint;
}
@Override
public void run() {
String newData = "";
try {
newData = this.endpoint.get();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if ((SyncingThread.this.currentContent != null)
&& (SyncingThread.this.currentContent.equals(newData))) {
return;
}
SyncingThread.this.currentContent = newData;
if (newData.length() == 0) {
return;
}
listener.onRemoteContentChange(newData, new Date());
}
}
@Override
public String getServiceName() {
return SERVICE_NAME;
}
@Override
public void setExecutor(Executor executor) {
this.executor = executor;
}
@Override
public Executor getExecutor() {
return this.executor;
}
@Override
public void activatePolling() {
this.enabled = true;
log.debug("The service has been enabled");
}
@Override
public void deactivatePolling() {
this.enabled = false;
log.debug("The service has been disabled");
}
@Override
public boolean isPollingActivated() {
return this.enabled;
}
}