class StorageClientRest extends DefaultClient implements StorageClient {

    @Override
    public Map<String, Boolean> exists(String strategyId, DataCategory type, String guid, List<String> offerIds)
        throws StorageServerClientException {
        Integer tenantId = ParameterHelper.getTenantParameter();
        ParametersChecker.checkParameter(STRATEGY_ID_MUST_HAVE_A_VALID_VALUE, strategyId);
        ParametersChecker.checkParameter(TYPE_OF_STORAGE_OBJECT_MUST_HAVE_A_VALID_VALUE, type);
        ParametersChecker.checkParameter(GUID_MUST_HAVE_A_VALID_VALUE, guid);

        VitamRequestBuilder request = head()
            .withPath("/" + type.name() + "/" + guid)
            .withHeader(GlobalDataRest.X_TENANT_ID, tenantId)
            .withHeader(GlobalDataRest.X_STRATEGY_ID, strategyId)
            .withJsonAccept();
        for (String offerId : offerIds) {
            request.withHeader(GlobalDataRest.X_OFFER_IDS, offerId);
        }

        try (Response response = make(request)) {
            notContentResponseToBoolean(handleNoContentResponseStatus(response));
            Map<String, Boolean> result = new HashMap<>();
            for (String offerId : offerIds) {
                result.put(offerId,
                    response.getHeaders().containsKey(offerId) && response.getHeaders().get(offerId) != null
                        ? BooleanUtils.toBoolean(response.getHeaderString(offerId))
                        : Boolean.FALSE);
            }
            return result;
        } catch (final VitamClientInternalException e) {
            final String errorMessage =
                VitamCodeHelper.getMessageFromVitamCode(VitamCode.STORAGE_TECHNICAL_INTERNAL_ERROR);
            LOGGER.error(errorMessage, e);
            throw new StorageServerClientException(errorMessage, e);
        }
    }

      StorageClientRest(StorageClientFactory factory);

}