81 lines
2.4 KiB
Java
81 lines
2.4 KiB
Java
package p.studio;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import p.packer.Packer;
|
|
import p.studio.events.StudioEventBus;
|
|
import p.studio.events.StudioPackerEventAdapter;
|
|
import p.studio.utilities.ThemeService;
|
|
import p.studio.utilities.i18n.I18nService;
|
|
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.concurrent.ThreadFactory;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
public final class AppContainer implements Container {
|
|
private final I18nService i18nService;
|
|
private final ThemeService themeService;
|
|
private final StudioEventBus studioEventBus;
|
|
private final ObjectMapper mapper;
|
|
private final EmbeddedPacker embeddedPacker;
|
|
private final StudioBackgroundTasks backgroundTasks;
|
|
|
|
public AppContainer() {
|
|
this.i18nService = new I18nService();
|
|
this.themeService = new ThemeService();
|
|
this.studioEventBus = new StudioEventBus();
|
|
this.mapper = new ObjectMapper();
|
|
final ExecutorService backgroundExecutor = Executors.newFixedThreadPool(2, new StudioWorkerThreadFactory());
|
|
this.backgroundTasks = new StudioBackgroundTasks(backgroundExecutor);
|
|
final Packer packer = Packer.bootstrap(this.mapper, new StudioPackerEventAdapter(studioEventBus));
|
|
this.embeddedPacker = new EmbeddedPacker(packer.workspaceService(), packer::close);
|
|
}
|
|
|
|
@Override
|
|
public I18nService getI18n() {
|
|
return i18nService;
|
|
}
|
|
|
|
@Override
|
|
public ThemeService getTheme() {
|
|
return themeService;
|
|
}
|
|
|
|
@Override
|
|
public StudioEventBus getEventBus() {
|
|
return studioEventBus;
|
|
}
|
|
|
|
@Override
|
|
public ObjectMapper getMapper() {
|
|
return mapper;
|
|
}
|
|
|
|
@Override
|
|
public EmbeddedPacker getPacker() {
|
|
return embeddedPacker;
|
|
}
|
|
|
|
@Override
|
|
public StudioBackgroundTasks getBackgroundTasks() {
|
|
return backgroundTasks;
|
|
}
|
|
|
|
@Override
|
|
public void shutdownContainer() {
|
|
embeddedPacker.shutdown();
|
|
backgroundTasks.shutdown();
|
|
}
|
|
|
|
private static final class StudioWorkerThreadFactory implements ThreadFactory {
|
|
private final AtomicInteger nextId = new AtomicInteger(1);
|
|
|
|
@Override
|
|
public Thread newThread(Runnable runnable) {
|
|
final Thread thread = new Thread(runnable, "studio-worker-" + nextId.getAndIncrement());
|
|
thread.setDaemon(true);
|
|
return thread;
|
|
}
|
|
}
|
|
}
|