package org.dcache.srm.handler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URI; import org.dcache.srm.AbstractStorageElement; import org.dcache.srm.SRM; import org.dcache.srm.SRMAuthorizationException; import org.dcache.srm.SRMDuplicationException; import org.dcache.srm.SRMException; import org.dcache.srm.SRMInternalErrorException; import org.dcache.srm.SRMInvalidPathException; import org.dcache.srm.SRMUser; import org.dcache.srm.v2_2.SrmMkdirRequest; import org.dcache.srm.v2_2.SrmMkdirResponse; import org.dcache.srm.v2_2.TReturnStatus; import org.dcache.srm.v2_2.TStatusCode; import static com.google.common.base.Preconditions.checkNotNull; public class SrmMkdir { private static final Logger LOGGER = LoggerFactory.getLogger(SrmMkdir.class.getName()); private final AbstractStorageElement storage; private final SrmMkdirRequest request; private final SRMUser user; SrmMkdirResponse response; public SrmMkdir(SRMUser user, SrmMkdirRequest request, AbstractStorageElement storage, SRM srm, String clientHost) { this.request = checkNotNull(request); this.user = checkNotNull(user); this.storage = checkNotNull(storage); } public SrmMkdirResponse getResponse() { if (response == null) { response = srmMkdir(); } return response; } private SrmMkdirResponse srmMkdir() { TReturnStatus returnStatus; try { storage.createDirectory(user, URI.create(request.getSURL().toString())); returnStatus = new TReturnStatus(TStatusCode.SRM_SUCCESS, null); } catch (SRMInternalErrorException e) { LOGGER.error(e.getMessage()); returnStatus = new TReturnStatus(TStatusCode.SRM_INTERNAL_ERROR, e.getMessage()); } catch (SRMDuplicationException e) { returnStatus = new TReturnStatus(TStatusCode.SRM_DUPLICATION_ERROR, e.getMessage()); } catch (SRMAuthorizationException e) { returnStatus = new TReturnStatus(TStatusCode.SRM_AUTHORIZATION_FAILURE, e.getMessage()); } catch (SRMInvalidPathException e) { returnStatus = new TReturnStatus(TStatusCode.SRM_INVALID_PATH, e.getMessage()); } catch (SRMException e) { returnStatus = new TReturnStatus(TStatusCode.SRM_FAILURE, e.getMessage()); } return new SrmMkdirResponse(returnStatus); } public static final SrmMkdirResponse getFailedResponse(String error) { return getFailedResponse(error, TStatusCode.SRM_FAILURE); } public static final SrmMkdirResponse getFailedResponse(String error, TStatusCode statusCode) { SrmMkdirResponse response = new SrmMkdirResponse(); response.setReturnStatus(new TReturnStatus(statusCode, error)); return response; } }