/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.view.rest; import java.net.URI; import java.util.concurrent.ScheduledExecutorService; import com.opengamma.engine.resource.EngineResourceManager; import com.opengamma.engine.resource.EngineResourceReference; import com.opengamma.id.UniqueId; import com.opengamma.id.UniqueIdentifiable; import com.opengamma.util.rest.FudgeRestClient; import com.sun.jersey.api.client.ClientResponse; /** * Remote implementation of {@link EngineResourceManager}. * * @param <T> the type of resource */ public abstract class RemoteEngineResourceManager<T extends UniqueIdentifiable> implements EngineResourceManager<T> { private final URI _baseUri; private final ScheduledExecutorService _scheduler; private final FudgeRestClient _client; public RemoteEngineResourceManager(URI baseUri, ScheduledExecutorService scheduler) { this(baseUri, scheduler, FudgeRestClient.create()); } public RemoteEngineResourceManager(URI baseUri, ScheduledExecutorService scheduler, FudgeRestClient client) { _baseUri = baseUri; _scheduler = scheduler; _client = client; } protected FudgeRestClient getClient() { return _client; } @Override public EngineResourceReference<T> createReference(UniqueId cycleId) { ClientResponse response = getClient().accessFudge(_baseUri).post(ClientResponse.class); URI baseUri = response.getLocation(); return getRemoteReference(baseUri, _scheduler); } protected abstract EngineResourceReference<T> getRemoteReference(URI baseUri, ScheduledExecutorService scheduler); }