package com.niklim.clicktrace;
import javax.swing.ToolTipManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.niklim.clicktrace.capture.CaptureModule;
import com.niklim.clicktrace.capture.mouse.MouseCapture;
import com.niklim.clicktrace.controller.ControllerModule;
import com.niklim.clicktrace.controller.MainController;
import com.niklim.clicktrace.controller.hook.GlobalKeyboardListener;
import com.niklim.clicktrace.props.AppProperties;
import com.niklim.clicktrace.service.FileManager;
/**
* Application bootstrap.
*/
public class App {
private static final Logger log = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
redirectUnhandledExceptions();
log.info("app started");
// order of instantiation is important!
Injector injector = createInjector();
injector.getInstance(AppProperties.class);
injector.getInstance(MouseCapture.class);
injector.getInstance(GlobalKeyboardListener.class);
FileManager fileManager = injector.getInstance(FileManager.class);
fileManager.init();
MainController controller = injector.getInstance(MainController.class);
ToolTipManager.sharedInstance().setInitialDelay(1000);
// TimeMeter.init();
log.info("app ready to work");
controller.init();
}
private static void redirectUnhandledExceptions() {
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
log.error("Uncaught exception", e);
}
});
}
public static Injector createInjector() {
return Guice.createInjector(new ControllerModule(), new CaptureModule());
}
}