package org.dcache.srm.handler; import com.google.common.base.Function; import org.dcache.srm.v2_2.TMetaDataSpace; import org.dcache.srm.v2_2.TReturnStatus; import org.dcache.srm.v2_2.TSURLLifetimeReturnStatus; import org.dcache.srm.v2_2.TSURLReturnStatus; import org.dcache.srm.v2_2.TStatusCode; public class ReturnStatuses { private ReturnStatuses() { } private static <T> TReturnStatus getSummaryReturnStatusForSurls(T[] objects, Function<T, TStatusCode> getStatusCode) { boolean hasFailure = false; boolean hasSuccess = false; for (T object : objects) { if (getStatusCode.apply(object) == TStatusCode.SRM_SUCCESS) { hasSuccess = true; } else { hasFailure = true; } } return ReturnStatuses.getSummaryReturnStatus(hasFailure, hasSuccess); } public static TReturnStatus getSummaryReturnStatus(TSURLReturnStatus[] returnStatuses) { return getSummaryReturnStatusForSurls(returnStatuses, returnStatus -> returnStatus.getStatus().getStatusCode()); } static TReturnStatus getSummaryReturnStatus(TMetaDataSpace[] metadataSpaces) { boolean hasFailure = false; boolean hasSuccess = false; for (TMetaDataSpace metaDataSpace : metadataSpaces) { if (metaDataSpace.getStatus().getStatusCode() == TStatusCode.SRM_SUCCESS || metaDataSpace.getStatus().getStatusCode() == TStatusCode.SRM_SPACE_LIFETIME_EXPIRED || metaDataSpace.getStatus().getStatusCode() == TStatusCode.SRM_EXCEED_ALLOCATION) { hasSuccess = true; } else { hasFailure = true; } } if (!hasFailure) { return new TReturnStatus(TStatusCode.SRM_SUCCESS, null); } else if (!hasSuccess) { return new TReturnStatus(TStatusCode.SRM_FAILURE, "The operation failed for all spaces"); } else { return new TReturnStatus(TStatusCode.SRM_PARTIAL_SUCCESS, "The operation failed for some spaces"); } } public static TReturnStatus getSummaryReturnStatus(boolean hasFailure, boolean hasSuccess) { if (!hasFailure) { return new TReturnStatus(TStatusCode.SRM_SUCCESS, null); } else if (!hasSuccess) { return new TReturnStatus(TStatusCode.SRM_FAILURE, "The operation failed for all SURLs"); } else { return new TReturnStatus(TStatusCode.SRM_PARTIAL_SUCCESS, "The operation failed for some SURLs"); } } static TReturnStatus getSummaryReturnStatus(TSURLLifetimeReturnStatus[] surlStatus) { return getSummaryReturnStatusForSurls(surlStatus, returnStatus -> returnStatus.getStatus().getStatusCode()); } }