package org.gcube.resourcemanagement.manager.webapp.context; import java.util.Objects; import org.gcube.informationsystem.resourceregistry.context.ResourceRegistryContextClient; import org.gcube.informationsystem.resourceregistry.context.ResourceRegistryContextClientFactory; import org.gcube.informationsystem.resourceregistry.context.ResourceRegistryContextClientImpl; import org.gcube.resourcemanagement.manager.io.exceptions.CodeException; import org.gcube.resourcemanagement.manager.io.exceptions.RMCode; /** * Base request to an operation exposed by the Resource Registry. * * @author Manuele Simi (ISTI-CNR) * */ public abstract class RequestToResourceRegistry { protected ResourceRegistryContextClient resourceRegistryContextClient; /** * Forces to use a RR instance at the given url. * * @param forceURL */ public RequestToResourceRegistry forceURL(String forceURL) { this.resourceRegistryContextClient = new ResourceRegistryContextClientImpl(forceURL); return this; } /** * Validates the request. * * @return the response from the service. */ abstract public RequestToResourceRegistry validate() throws Exception; public ResponseFromResourceRegistry submit() { try { this.validate(); } catch (Exception e) { ResponseFromResourceRegistry response = ResponseFromResourceRegistry. fromException(new CodeException(RMCode.INVALID_REQUEST)); return response; } if (Objects.isNull(this.resourceRegistryContextClient)) this.resourceRegistryContextClient = ResourceRegistryContextClientFactory.create(); return this.validateResponse(this.send()); } /** * Gives a chance to sub-classes to validate the response. * * @param response * @return */ protected ResponseFromResourceRegistry validateResponse(ResponseFromResourceRegistry response) { // by default, returns the response as it is return response; } /** * Submits the request to the RR. * * @return the response from the service. */ abstract protected ResponseFromResourceRegistry send(); }