package restx.admin; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import restx.AppSettings; import restx.FSRouter; import restx.ResourcesRoute; import restx.RestxRouter; import restx.factory.Module; import restx.factory.Provides; import javax.inject.Named; import java.io.File; /** * Date: 28/11/13 * Time: 22:58 */ @Module public class SourcesModule { private static final RestxRouter NO_SOURCES = RestxRouter.builder().name("NO-SOURCES").build(); @Provides @Named("Sources") public AdminPage getSourcesAdminPage() { return new AdminPage("/@/ui/sources/", "Sources"); } @Provides public ResourcesRoute sourceUI() { return new ResourcesRoute("SourcesUIRoute", "/@/ui/sources", "restx/sources", ImmutableMap.of("", "index.html")); } @Provides public RestxRouter mountSources(AppSettings appSettings) { if (!"dev".equals(appSettings.mode())) { return NO_SOURCES; } return sourcesRouter(appSettings).or(NO_SOURCES); } public Optional<RestxRouter> sourcesRouter(AppSettings appSettings) { if (new File(appSettings.mainSources()).exists()) { return Optional.of(FSRouter.mount(appSettings.mainSources()).allowDirectoryListing().on("/@/sources/main/")); } else { return Optional.absent(); } } @Provides public RestxRouter mountResources(AppSettings appSettings) { if (!"dev".equals(appSettings.mode())) { return NO_SOURCES; } return resourcesRouter(appSettings).or(NO_SOURCES); } public Optional<RestxRouter> resourcesRouter(AppSettings appSettings) { if (new File(appSettings.mainResources()).exists()) { return Optional.of(FSRouter.mount(appSettings.mainResources()).allowDirectoryListing().on("/@/sources/resources/")); } else { return Optional.absent(); } } }