public T next() { if (partQueue == null) return null; try { java.lang.reflect.Constructor<T> constructor = clazz.getConstructor(OkHttpServices.class, RequestLogger.class, BodyPart.class); return constructor.newInstance(new OkHttpServices(), reqlog, partQueue.next()); } catch (Throwable t) { throw new IllegalStateException("Error instantiating " + clazz.getName(), t); } }
@Override public void writeGraph(RequestLogger reqlog, String uri, AbstractWriteHandle input, GraphPermissions permissions, Transaction transaction) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { RequestParameters params = new RequestParameters(); addGraphUriParam(params, uri); addPermsParams(params, permissions); putResource(reqlog, "graphs", transaction, params, input, null); }
private <W extends AbstractWriteHandle> boolean addParts( MultipartBody.Builder multiPart, RequestLogger reqlog, W[] input) { return addParts(multiPart, reqlog, null, input, null); }
@Override public void mergeGraph(RequestLogger reqlog, String uri, AbstractWriteHandle input, GraphPermissions permissions, Transaction transaction) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { RequestParameters params = new RequestParameters(); addGraphUriParam(params, uri); addPermsParams(params, permissions); postResource(reqlog, "graphs", transaction, params, input, null); }
@Override public void protectDocument(RequestLogger requestLogger, String temporalDocumentURI, Transaction transaction, RequestParameters extraParams, ProtectionLevel level, String duration, Calendar expiryTime, String archivePath) { if (temporalDocumentURI == null) throw new IllegalArgumentException( "Document protection for document identifier without uri"); extraParams = addTemporalProtectionParams(extraParams, temporalDocumentURI, level, duration, expiryTime, archivePath); if (logger.isDebugEnabled()) logger.debug("Protecting {} in transaction {}", temporalDocumentURI, getTransactionId(transaction)); postResource(requestLogger, "documents/protection", transaction, extraParams, null, null, "protect"); } @Override
(uri != null) ? uri : "new", getTransactionId(transaction)); logRequest( reqlog, "writing %s document from %s transaction with %s metadata categories and content", (uri != null) ? uri : "new", (transaction != null) ? transaction.getTransactionId() : "no", stringJoin(categories, ", ", "no")); makeDocumentParams(uri, categories, transaction, extraParams, true); Request.Builder requestBldr = makeDocumentResource(docParams) .addHeader(HEADER_ACCEPT, MIMETYPE_MULTIPART_MIXED); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); if (uri != null) { requestBldr = addVersionHeader(desc, requestBldr, "If-Match"); boolean hasStreamingPart = addParts(multiPart, reqlog, new String[] { metadataMimetype, contentMimetype }, new AbstractWriteHandle[] { metadataHandle, contentHandle }); if (isFirstRequest() && hasStreamingPart) { nextDelay = makeFirstRequest(retry); if (nextDelay != 0) continue; response = sendRequestOnce(requestBldr); status = response.code();
logger.debug("Getting multipart for {} in transaction {}", uri, getTransactionId(transaction)); addPointInTimeQueryParam(extraParams, contentHandle); RequestParameters docParams = makeDocumentParams(uri, categories, transaction, extraParams, true); docParams.add("format", metadataFormat); Request.Builder requestBldr = makeDocumentResource(docParams); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); requestBldr = addVersionHeader(desc, requestBldr, "If-None-Match"); Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null); int status = response.code(); if (status == STATUS_NOT_FOUND) { throw new ResourceNotFoundException( "Could not read non-existent document", extractErrorFields(response)); extractErrorFields(response)); + getReasonPhrase(response), extractErrorFields(response)); logRequest( reqlog, "read %s document from %s transaction with %s metadata categories and content", uri, (transaction != null) ? transaction.getTransactionId() : "no", stringJoin(categories, ", ", "no")); getEntity(body, MimeMultipart.class) : null;
@Override public void deleteValues(RequestLogger reqlog, String type) throws ForbiddenUserException, FailedRequestException { logger.debug("Deleting {}", type); Request.Builder requestBldr = setupRequest(type, null); requestBldr = addTelemetryAgentId(requestBldr); Function<Request.Builder, Response> doDeleteFunction = new Function<Request.Builder, Response>() { public Response apply(Request.Builder funcBuilder) { return sendRequestOnce(funcBuilder.delete().build()); } }; Response response = sendRequestWithRetry(requestBldr, doDeleteFunction, null); int status = response.code(); if (status == STATUS_FORBIDDEN) { throw new ForbiddenUserException("User is not allowed to delete " + type, extractErrorFields(response)); } if (status != STATUS_NO_CONTENT) { throw new FailedRequestException("delete failed: " + getReasonPhrase(response), extractErrorFields(response)); } response.close(); logRequest(reqlog, "deleted %s values", type); }
logger.debug("Getting {} in transaction {}", uri, getTransactionId(transaction)); addPointInTimeQueryParam(extraParams, handle); Request.Builder requestBldr = makeDocumentResource( makeDocumentParams(uri, categories, transaction, extraParams)); if ( mimetype != null ) { requestBldr = requestBldr.header(HEADER_ACCEPT, mimetype); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); requestBldr = addVersionHeader(desc, requestBldr, "If-None-Match"); Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null); throw new ResourceNotFoundException( "Could not read non-existent document", extractErrorFields(response)); extractErrorFields(response)); + getReasonPhrase(response), extractErrorFields(response)); logRequest( reqlog, "read %s document from %s transaction with %s mime type and %s metadata categories", uri, (transaction != null) ? transaction.getTransactionId() : "no", (mimetype != null) ? mimetype : "no",
boolean hasStreamingPart = addParts(multiPart, reqlog, input); Request.Builder requestBldr = makePostWebResource(path, params); requestBldr = setupRequest( requestBldr, multiPart, multipartMixedWithBoundary()); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); response = doPost(requestBldr, multiPart, hasStreamingPart); status = response.code(); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRetryException( "Service unavailable and maximum retry period elapsed: "+ checkStatus(response, status, "apply", "resource", path, ResponseStatus.OK_OR_CREATED_OR_NO_CONTENT); return makeResults(clazz, reqlog, "apply", "resource", response);
boolean hasStreamingPart = addParts(multiPart, reqlog, null, input, requestHeaders); Request.Builder requestBldr = makePostWebResource(path, params); requestBldr = setupRequest(requestBldr, multiPart, outputMimetype); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); response = doPost(requestBldr, multiPart, hasStreamingPart); status = response.code(); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRetryException( "Service unavailable and maximum retry period elapsed: "+ checkStatus(response, status, "apply", "resource", path, ResponseStatus.OK_OR_CREATED_OR_NO_CONTENT); outputBase.receiveContent(makeResult(reqlog, "apply", "resource", response, as)); } else {
int... expectedStatuses) { if (key != null) { logRequest(reqlog, "writing %s value with %s key and %s mime type", type, key, (mimetype != null) ? mimetype : null); } else { logRequest(reqlog, "writing %s values with %s mime type", type, (mimetype != null) ? mimetype : null); MediaType mediaType = makeType(mimetype); boolean isStreaming = (isFirstRequest() || handle == null) ? isStreaming(sentValue) : false; if (isFirstRequest() && !isResendable && isStreaming) { nextDelay = makeFirstRequest(retry); if (nextDelay != 0) continue; if (requestBldr == null) { connectPath = (key != null) ? type + "/" + key : type; Request.Builder resource = setupRequest(connectPath, extraParams); requestBldr = (mimetype == null) ? resource : resource.header(HEADER_CONTENT_TYPE, mimetype); requestBldr = addTelemetryAgentId(requestBldr); sendRequestOnce(requestBldr.put(null).build()) : sendRequestOnce(requestBldr.put(sentValue).build()); } else if ("post".equals(method)) { if (requestBldr == null) { connectPath = type; Request.Builder resource = setupRequest(connectPath, extraParams);
boolean hasStreamingPart = addParts(multiPart, reqlog, input); Request.Builder requestBldr = makePutWebResource(path, params); requestBldr = setupRequest(requestBldr, multiPart, outputMimetype); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); response = doPut(requestBldr, multiPart, hasStreamingPart); status = response.code(); if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry)); checkFirstRequest(); throw new FailedRetryException( "Service unavailable and maximum retry period elapsed: "+ checkStatus(response, status, "write", "resource", path, ResponseStatus.OK_OR_CREATED_OR_NO_CONTENT); outputBase.receiveContent(makeResult(reqlog, "write", "resource", response, as)); } else {
requestBldr = setupRequest("alert/match", params, MIMETYPE_APPLICATION_XML, MIMETYPE_APPLICATION_XML); } else if (queryDef instanceof RawQueryDefinition) { StructureWriteHandle handle = ((RawQueryDefinition) queryDef).getHandle(); requestBldr = setupRequest("alert/match", params, MIMETYPE_APPLICATION_XML, MIMETYPE_APPLICATION_XML); } else if (queryDef instanceof StringQueryDefinition) { logger.debug("Searching with string query [{}]", text); requestBldr = setupRequest("alert/match", params, null, MIMETYPE_APPLICATION_XML); } else { throw new UnsupportedOperationException("Cannot match with " + queryDef.getClass().getName()); requestBldr = addTelemetryAgentId(requestBldr); MediaType mediaType = makeType(requestBldr.build().header(HEADER_CONTENT_TYPE)); response = sendRequestOnce(requestBldr.post(RequestBody.create(mediaType, structure))); response = doPost(null, requestBldr, structure); } else if (queryDef instanceof RawQueryDefinition) { response = doPost(null, requestBldr, baseHandle.sendContent()); } else if (queryDef instanceof StringQueryDefinition) { response = sendRequestOnce(requestBldr.get()); } else { throw new UnsupportedOperationException("Cannot match with " if (isFirstRequest()) setFirstRequest(false); nextDelay = Math.max(retryAfter, calculateDelay(randRetry, retry));
logger.debug("Deleting {} in transaction {}", uri, getTransactionId(transaction)); Request.Builder requestBldr = makeDocumentResource(makeDocumentParams(uri, categories, transaction, extraParams)); requestBldr = addVersionHeader(desc, requestBldr, "If-Match"); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); Response response = sendRequestWithRetry(requestBldr, (transaction == null), doDeleteFunction, null); int status = response.code(); FailedRequest failure = extractErrorFields(response); if (failure.getMessageCode().equals("RESTAPI-CONTENTNOVERSION")) { throw new FailedRequestException( "Precondition required to delete document", failure); } else if (status == STATUS_FORBIDDEN) { FailedRequest failure = extractErrorFields(response); throw new ForbiddenUserException( "User is not allowed to delete documents", failure); FailedRequest failure = extractErrorFields(response); if (failure.getMessageCode().equals("RESTAPI-CONTENTWRONGVERSION")) { throw new FailedRequestException( + getReasonPhrase(response), extractErrorFields(response)); TemporalDescriptor temporalDesc = updateTemporalSystemTime(desc, responseHeaders);
Request.Builder requestBldr = setupRequest(type + "/" + key, null, null, mimetype); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null); int status = response.code(); } else if (status == STATUS_FORBIDDEN) { throw new ForbiddenUserException("User is not allowed to read " + type, extractErrorFields(response)); } else { throw new FailedRequestException(type + " read failed: " + getReasonPhrase(response), extractErrorFields(response)); logRequest(reqlog, "read %s value with %s key and %s mime type", type, key, (mimetype != null) ? mimetype : null); T entity = body.contentLength() != 0 ? getEntity(body, as) : null; if (entity == null || (as != InputStream.class && as != Reader.class)) { response.close();
addPointInTimeQueryParam(params, output); HandleImplementation outputBase = HandleAccessor.checkHandle(output, "read"); Class as = outputBase.receiveAs(); Request.Builder requestBldr = makeGetWebResource(path, params, mimetype); requestBldr = setupRequest(requestBldr, null, mimetype); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null); int status = response.code(); checkStatus(response, status, "read", "resource", path, ResponseStatus.OK_OR_NO_CONTENT); updateDescriptor(outputBase, response.headers()); if (as != null) { outputBase.receiveContent(makeResult(reqlog, "read", "resource", response, as)); } else {
private <U extends OkHttpResultIterator> U getIteratedResourceImpl(Class<U> clazz, RequestLogger reqlog, String path, Transaction transaction, RequestParameters params, String... mimetypes) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { if ( params == null ) params = new RequestParameters(); if (transaction != null) params.add("txid", transaction.getTransactionId()); Request.Builder requestBldr = makeGetWebResource(path, params, null); requestBldr = setupRequest(requestBldr, null, null); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); requestBldr = requestBldr.header(HEADER_ACCEPT, multipartMixedWithBoundary()); Function<Request.Builder, Response> doGetFunction = new Function<Request.Builder, Response>() { public Response apply(Request.Builder funcBuilder) { return doGet(funcBuilder); } }; Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null); int status = response.code(); checkStatus(response, status, "read", "resource", path, ResponseStatus.OK_OR_NO_CONTENT); return makeResults(clazz, reqlog, "read", "resource", response); }
Request.Builder requestBldr = setupRequest(type, extraParams).header(HEADER_ACCEPT, mimetype); requestBldr = addTelemetryAgentId(requestBldr); Response response = sendRequestWithRetry(requestBldr, doGetFunction, null); int status = response.code(); if (status == STATUS_FORBIDDEN) { throw new ForbiddenUserException("User is not allowed to read " + type, extractErrorFields(response)); + getReasonPhrase(response), extractErrorFields(response)); logRequest(reqlog, "read %s values with %s mime type", type, (mimetype != null) ? mimetype : null); T entity = body.contentLength() != 0 ? getEntity(body, as) : null; if (entity == null || (as != InputStream.class && as != Reader.class)) { response.close();
Request.Builder requestBldr = setupRequest("search", params); requestBldr = addTransactionScopedCookies(requestBldr, transaction); requestBldr = addTelemetryAgentId(requestBldr); Response response = sendRequestWithRetry(requestBldr, (transaction == null), doDeleteFunction, null); int status = response.code(); if (status == STATUS_FORBIDDEN) { throw new ForbiddenUserException("User is not allowed to delete", extractErrorFields(response)); + getReasonPhrase(response), extractErrorFields(response)); logRequest( reqlog, "deleted search results in %s transaction", getTransactionId(transaction));