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.SRMException; import org.dcache.srm.SRMInternalErrorException; import org.dcache.srm.SRMInvalidRequestException; import org.dcache.srm.SRMUser; import org.dcache.srm.v2_2.ArrayOfTMetaDataSpace; import org.dcache.srm.v2_2.SrmGetSpaceMetaDataRequest; import org.dcache.srm.v2_2.SrmGetSpaceMetaDataResponse; import org.dcache.srm.v2_2.TMetaDataSpace; import org.dcache.srm.v2_2.TReturnStatus; import org.dcache.srm.v2_2.TStatusCode; import static com.google.common.base.Preconditions.checkNotNull; import static org.dcache.srm.handler.ReturnStatuses.*; public class SrmGetSpaceMetaData { private static final Logger LOGGER = LoggerFactory.getLogger(SrmGetSpaceMetaData.class); private final AbstractStorageElement storage; private final SrmGetSpaceMetaDataRequest request; private final SRMUser user; private SrmGetSpaceMetaDataResponse response; public SrmGetSpaceMetaData(SRMUser user, SrmGetSpaceMetaDataRequest request, AbstractStorageElement storage, SRM srm, String clientHost) { this.request = checkNotNull(request); this.user = checkNotNull(user); this.storage = checkNotNull(storage); } public SrmGetSpaceMetaDataResponse getResponse() { if (response == null) { try { response = srmGetSpaceMetaData(); } catch (SRMInvalidRequestException e) { response = getFailedResponse(e.getMessage(), TStatusCode.SRM_INVALID_REQUEST); } catch (SRMInternalErrorException e) { LOGGER.error(e.toString()); response = getFailedResponse(e.getMessage(), TStatusCode.SRM_INTERNAL_ERROR); } catch (SRMException e) { response = getFailedResponse(e.getMessage(), TStatusCode.SRM_FAILURE); } } return response; } private SrmGetSpaceMetaDataResponse srmGetSpaceMetaData() throws SRMException { String[] spaceTokens = request.getArrayOfSpaceTokens().getStringArray(); if (spaceTokens == null || spaceTokens.length == 0) { throw new SRMInvalidRequestException("arrayOfSpaceToken is empty"); } TMetaDataSpace[] array = storage.srmGetSpaceMetaData(user, spaceTokens); return new SrmGetSpaceMetaDataResponse( getSummaryReturnStatus(array), new ArrayOfTMetaDataSpace(array)); } public static final SrmGetSpaceMetaDataResponse getFailedResponse(String text) { return getFailedResponse(text, TStatusCode.SRM_FAILURE); } public static final SrmGetSpaceMetaDataResponse getFailedResponse(String text, TStatusCode statusCode) { SrmGetSpaceMetaDataResponse response = new SrmGetSpaceMetaDataResponse(); response.setReturnStatus(new TReturnStatus(statusCode, text)); return response; } }