package org.dcache.srm.handler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.dcache.srm.AbstractStorageElement; import org.dcache.srm.SRM; import org.dcache.srm.SRMInternalErrorException; import org.dcache.srm.SRMUser; import org.dcache.srm.v2_2.ArrayOfTSupportedTransferProtocol; import org.dcache.srm.v2_2.SrmGetTransferProtocolsRequest; import org.dcache.srm.v2_2.SrmGetTransferProtocolsResponse; import org.dcache.srm.v2_2.TReturnStatus; import org.dcache.srm.v2_2.TStatusCode; import org.dcache.srm.v2_2.TSupportedTransferProtocol; import static com.google.common.base.Preconditions.checkNotNull; public class SrmGetTransferProtocols { private static final Logger LOGGER = LoggerFactory.getLogger(SrmGetTransferProtocols.class); private final SRM srm; private SrmGetTransferProtocolsResponse response; public SrmGetTransferProtocols(SRMUser user, SrmGetTransferProtocolsRequest request, AbstractStorageElement storage, SRM srm, String clientHost) { this.srm = checkNotNull(srm); } public SrmGetTransferProtocolsResponse getResponse() { if (response == null) { try { TSupportedTransferProtocol[] protocols = getSupportedTransferProtocols(); response = new SrmGetTransferProtocolsResponse( new TReturnStatus(TStatusCode.SRM_SUCCESS, null), new ArrayOfTSupportedTransferProtocol(protocols)); } catch (SRMInternalErrorException e) { LOGGER.error(e.getMessage()); response = getFailedResponse(e.getMessage(), TStatusCode.SRM_INTERNAL_ERROR); } } return response; } private TSupportedTransferProtocol[] getSupportedTransferProtocols() throws SRMInternalErrorException { String[] protocols = srm.getProtocols(); TSupportedTransferProtocol[] arrayOfProtocols = new TSupportedTransferProtocol[protocols.length]; for (int i = 0; i < protocols.length; ++i) { arrayOfProtocols[i] = new TSupportedTransferProtocol(protocols[i], null); } return arrayOfProtocols; } public static final SrmGetTransferProtocolsResponse getFailedResponse(String text) { return getFailedResponse(text, TStatusCode.SRM_FAILURE); } public static final SrmGetTransferProtocolsResponse getFailedResponse(String error, TStatusCode statusCode) { SrmGetTransferProtocolsResponse response = new SrmGetTransferProtocolsResponse(); response.setReturnStatus(new TReturnStatus(statusCode, error)); return response; } }