package inject; import com.google.inject.Provider; import common.contexts.ProjectContext; import io.sphere.sdk.client.SphereClient; import io.sphere.sdk.projects.Project; import io.sphere.sdk.projects.queries.ProjectGet; import play.Logger; import javax.inject.Inject; import javax.inject.Singleton; import java.util.List; import java.util.Locale; import java.util.concurrent.ExecutionException; import static java.util.stream.Collectors.toList; @Singleton class ProjectContextProvider implements Provider<ProjectContext> { private final SphereClient client; @Inject private ProjectContextProvider(final SphereClient client) { this.client = client; } @Override public ProjectContext get() { try { final Project project = client.execute(ProjectGet.of()).toCompletableFuture().get(); Logger.debug("Provide ProjectContext:" + " Languages" + project.getLanguages() + "," + " Countries" + project.getCountries()); final List<Locale> languages = project.getLanguages().stream().map(Locale::forLanguageTag).collect(toList()); return ProjectContext.of(languages, project.getCountries()); } catch (ExecutionException | InterruptedException e) { throw new SunriseInitializationException("Could not fetch project information", e); } } }