package org.netmelody.cieye.server.configuration; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.netmelody.cieye.core.observation.KnownOffendersDirectory; import org.netmelody.cieye.server.CiEyeServerInformationFetcher; import org.netmelody.cieye.server.ObservationAgencyFetcher; import org.netmelody.cieye.server.LandscapeFetcher; import org.netmelody.cieye.server.PictureFetcher; public final class ServerConfiguration { private final SettingsInitialiser settings = new SettingsInitialiser(); private final ServerInformation information = new ServerInformation(settings.settingsLocation()); private final RecordedKnownOffenders detective = new RecordedKnownOffenders(settings.picturesFile()); private final RecordedObservationTargets targets = new RecordedObservationTargets(settings.viewsFile()); private final ServiceLoadingRecordedForeignAgencies foreignAgencies = new ServiceLoadingRecordedForeignAgencies(settings.pluginDirectory()); private final Album album = new Album(settings.picturesDirectory()); private static final class Refresher implements Runnable { private final Refreshable refreshable; public Refresher(Refreshable refreshable) { this.refreshable = refreshable; } @Override public void run() { refreshable.refresh(); } } public ServerConfiguration() { final ScheduledExecutorService executor = Executors.newScheduledThreadPool(3); executor.scheduleWithFixedDelay(new Refresher(detective), 1L, 10L, TimeUnit.SECONDS); executor.scheduleWithFixedDelay(new Refresher(targets), 1L, 10L, TimeUnit.SECONDS); executor.scheduleWithFixedDelay(new Refresher(foreignAgencies), 1L, 10L, TimeUnit.SECONDS); } public KnownOffendersDirectory detective() { return this.detective; } public LandscapeFetcher observationTargetDirectory() { return targets; } public CiEyeServerInformationFetcher information() { return information; } public PictureFetcher album() { return album; } public ObservationAgencyFetcher foreignAgents() { return foreignAgencies; } }