/** * 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 javax.ws.rs.DELETE; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; import org.threeten.bp.Instant; import com.opengamma.engine.resource.EngineResourceReference; import com.opengamma.id.UniqueIdentifiable; import com.opengamma.util.rest.AbstractDataResource; /** * RESTful resource for a {@link EngineResourceReference} * * @param <T> the type of resource */ public abstract class DataEngineResourceReferenceResource<T extends UniqueIdentifiable> extends AbstractDataResource { //CSOFF: just constants public static final String PATH_RESOURCE = "resource"; //CSON: just constants private final DataEngineResourceManagerResource<T> _manager; private final long _referenceId; private final EngineResourceReference<? extends T> _resourceReference; private volatile Instant _lastHeartbeat = Instant.now(); protected DataEngineResourceReferenceResource(DataEngineResourceManagerResource<T> manager, long referenceId, EngineResourceReference<? extends T> resourceReference) { _manager = manager; _referenceId = referenceId; _resourceReference = resourceReference; } @DELETE public void release() { _resourceReference.release(); _manager.referenceReleased(_referenceId); } @POST public Response heartbeat(@PathParam("referenceId") long referenceId) { updateHeartbeat(); return responseOk(); } @Path(PATH_RESOURCE) public Object get() { updateHeartbeat(); return getResourceResource(_resourceReference.get()); } protected abstract Object getResourceResource(T resource); /*package*/ Instant getLastHeartbeat() { return _lastHeartbeat; } private void updateHeartbeat() { _lastHeartbeat = Instant.now(); } }