package sk.stuba.fiit.perconik.core.services; import java.util.Set; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import sk.stuba.fiit.perconik.core.listeners.DefaultListeners; import sk.stuba.fiit.perconik.core.resources.DefaultResources; import sk.stuba.fiit.perconik.core.services.listeners.ListenerService; import sk.stuba.fiit.perconik.core.services.resources.ResourceService; import static com.google.common.collect.Lists.newArrayList; /** * Static accessor methods to core services. * * @author Pavol Zbell * @since 1.0 */ public final class Services { static { Internals.setApi(ResourceService.class, new Supplier<ResourceService>() { public ResourceService get() { return DefaultResources.createResourceService(); } }); Internals.setApi(ListenerService.class, new Supplier<ListenerService>() { public ListenerService get() { return DefaultListeners.createListenerService(); } }); } private Services() {} static Set<Service> inStartOrder() { synchronized (Internals.class) { ImmutableSet.Builder<Service> builder = ImmutableSet.builder(); builder.add(Services.getResourceService()); builder.add(Services.getListenerService()); return builder.build(); } } static Set<Service> inStopOrder() { return ImmutableSet.copyOf(Lists.reverse(newArrayList(inStartOrder()))); } /** * Sets the resource service. * @param service the service, not {@code null} */ public static void setResourceService(final ResourceService service) { synchronized (Internals.class) { Internals.setApi(ResourceService.class, service); } } /** * Sets the listener service. * @param service the service, not {@code null} */ public static void setListenerService(final ListenerService service) { synchronized (Internals.class) { Internals.setApi(ListenerService.class, service); } } /** * Unsets the resource service. */ public static void unsetResourceService() { synchronized (Internals.class) { Internals.unsetApi(ResourceService.class); } } /** * Unsets the listener service. */ public static void unsetListenerService() { synchronized (Internals.class) { Internals.unsetApi(ListenerService.class); } } /** * Returns the currently active resource service. */ public static ResourceService getResourceService() { synchronized (Internals.class) { return Internals.getApi(ResourceService.class); } } /** * Returns the currently active listener service. */ public static ListenerService getListenerService() { synchronized (Internals.class) { return Internals.getApi(ListenerService.class); } } }