/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.controller.data;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor.DiscardPolicy;
import java.util.concurrent.TimeUnit;
import org.dlect.controller.MainController;
import org.dlect.controller.data.DatabaseHandler.DatabaseHandlerEventID;
import org.dlect.events.Event;
import org.dlect.events.EventListener;
/**
*
* @author lee
*/
public class DatabaseSavingHandler implements EventListener {
private final Runnable SAVING_RUNNABLE = new Runnable() {
@Override
public void run() {
if (mc.getDatabaseHandler().getDatabase() != null) {
mc.getDatabaseHandler().saveDatabase();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
// Ignore error
}
}
}
};
private final MainController mc;
private final ArrayBlockingQueue<Runnable> executorQueue = new ArrayBlockingQueue<>(1);
private final ThreadPoolExecutor savingService = new ThreadPoolExecutor(1, 1,
5, TimeUnit.SECONDS,
executorQueue,
new DiscardPolicy());
public DatabaseSavingHandler(MainController mc) {
this.mc = mc;
}
@Override
public void processEvent(Event e) {
if (!e.getEventID().equals(DatabaseHandlerEventID.DATABASE_SAVED)
&& mc.getDatabaseHandler().getDatabase() != null) {
savingService.submit(SAVING_RUNNABLE);
}
}
public static void registerOn(MainController mc) {
DatabaseSavingHandler sdu = new DatabaseSavingHandler(mc);
mc.addListener(sdu);
}
}