private String getTransactionId(Transaction transaction) { if ( transaction == null ) return null; return transaction.getTransactionId(); }
@Override public String getTransactionId() { return realTransaction.getTransactionId(); } @Override
@Override public void delete(DeleteQueryDefinition querydef, Transaction transaction) { String tid = transaction == null ? null : transaction.getTransactionId(); services.deleteSearch(requestLogger, querydef, tid); }
@Override public DocumentDescriptor exists(String uri, Transaction transaction) throws ForbiddenUserException, FailedRequestException { return services.head(requestLogger, uri, (transaction == null) ? null : transaction.getTransactionId()); }
@Override public void writeDefaultMetadata(String uri, Transaction transaction) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { if (uri == null) throw new IllegalArgumentException("Resetting document metadata with null identifier"); if (logger.isInfoEnabled()) logger.info("Resetting metadata for {}",uri); services.deleteDocument(requestLogger, new DocumentDescriptorImpl(uri, true), (transaction == null) ? null : transaction.getTransactionId(), processedMetadata); }
@Override public void delete(DocumentDescriptor desc, Transaction transaction) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { if (desc == null) throw new IllegalArgumentException("Deleting document with null identifier"); if (logger.isInfoEnabled()) logger.info("Deleting {}",desc.getUri()); services.deleteDocument(requestLogger, desc, (transaction == null) ? null : transaction.getTransactionId(), null); }
@Override public void commit() { host.releaseTransactionInfo(transactionInfo); boolean alive = transactionInfo.alive.getAndSet(false); if ( alive == true ) { realTransaction.commit(); logger.trace("committed transaction {}", realTransaction.getTransactionId()); } } @Override
@Override public void rollback() { host.releaseTransactionInfo(transactionInfo); boolean alive = transactionInfo.alive.getAndSet(false); if ( alive == true ) { realTransaction.rollback(); logger.trace("rolled back transaction {}", realTransaction.getTransactionId()); } } };
@Override public void patch(DocumentDescriptor desc, DocumentPatchHandle patch, Transaction transaction) throws ForbiddenUserException, FailedRequestException { if (logger.isInfoEnabled()) logger.info("Patching document"); DocumentPatchHandleImpl builtPatch = (patch instanceof DocumentPatchHandleImpl) ? (DocumentPatchHandleImpl) patch : null; services.patchDocument( requestLogger, desc, (transaction == null) ? null : transaction.getTransactionId(), (builtPatch != null) ? builtPatch.getMetadata() : processedMetadata, (builtPatch != null) ? builtPatch.isOnContent() : true, patch ); }
private RequestParameters prepareParams(RequestParameters params, Transaction transaction) { if (params == null && transaction == null) return null; if (transaction == null) return params.copy("rs"); RequestParameters requestParams = (params != null) ? params.copy("rs") : new RequestParameters(); requestParams.add("txid", transaction.getTransactionId()); return requestParams; } }
@SuppressWarnings("rawtypes") public DocumentDescriptor create(DocumentUriTemplate template, DocumentMetadataWriteHandle metadataHandle, W contentHandle, ServerTransform transform, Transaction transaction, RequestParameters extraParams) throws ForbiddenUserException, FailedRequestException { if (logger.isInfoEnabled()) logger.info("Creating content"); if (metadataHandle != null) { HandleImplementation metadataBase = HandleAccessor.checkHandle(metadataHandle, "metadata"); Format metadataFormat = metadataBase.getFormat(); if (metadataFormat == null || (metadataFormat != Format.JSON && metadataFormat != Format.XML)) { if (logger.isWarnEnabled()) logger.warn("Unsupported metadata format {}, using XML",metadataFormat.name()); metadataBase.setFormat(Format.XML); } } checkContentFormat(contentHandle); return services.postDocument( requestLogger, template, (transaction == null) ? null : transaction.getTransactionId(), (metadataHandle != null) ? processedMetadata : null, mergeTransformParameters( (transform != null) ? transform : getWriteTransform(), extraParams ), metadataHandle, contentHandle ); }
@SuppressWarnings("unchecked") @Override public <T extends QueryOptionsListReadHandle> T optionsList(T optionsHandle, Transaction transaction) { @SuppressWarnings("rawtypes") HandleImplementation optionsBase = HandleAccessor.checkHandle(optionsHandle, "optionslist"); Format optionsFormat = optionsBase.getFormat(); switch(optionsFormat) { case UNKNOWN: optionsFormat = Format.XML; break; case JSON: case XML: break; default: throw new UnsupportedOperationException("Only XML and JSON options list results are possible."); } String mimetype = optionsFormat.getDefaultMimetype(); String tid = transaction == null ? null : transaction.getTransactionId(); optionsBase.receiveContent(services.optionsList(optionsBase.receiveAs(), mimetype, tid)); return optionsHandle; }
@SuppressWarnings("unchecked") @Override public <T extends QueryOptionsListReadHandle> T optionsList(T optionsHandle, Transaction transaction) { @SuppressWarnings("rawtypes") HandleImplementation optionsBase = HandleAccessor.checkHandle(optionsHandle, "optionslist"); Format optionsFormat = optionsBase.getFormat(); switch(optionsFormat) { case UNKNOWN: optionsFormat = Format.XML; break; case JSON: case XML: break; default: throw new UnsupportedOperationException("Only XML and JSON options list results are possible."); } String mimetype = optionsFormat.getDefaultMimetype(); String tid = transaction == null ? null : transaction.getTransactionId(); optionsBase.receiveContent(services.optionsList(optionsBase.receiveAs(), mimetype, transaction)); return optionsHandle; }
@SuppressWarnings("unchecked") @Override public <T extends ValuesListReadHandle> T valuesList(ValuesListDefinition valdef, T valuesHandle, Transaction transaction) { @SuppressWarnings("rawtypes") HandleImplementation valuesBase = HandleAccessor.checkHandle(valuesHandle, "valueslist"); Format valuesFormat = valuesBase.getFormat(); switch(valuesFormat) { case UNKNOWN: valuesFormat = Format.XML; break; case JSON: case XML: break; default: throw new UnsupportedOperationException("Only XML and JSON values list results are possible."); } String mimetype = valuesFormat.getDefaultMimetype(); String tid = transaction == null ? null : transaction.getTransactionId(); valuesBase.receiveContent(services.valuesList(valuesBase.receiveAs(), valdef, mimetype, tid)); return valuesHandle; }
@SuppressWarnings("unchecked") @Override public <T extends ValuesListReadHandle> T valuesList(ValuesListDefinition valdef, T valuesHandle, Transaction transaction) { @SuppressWarnings("rawtypes") HandleImplementation valuesBase = HandleAccessor.checkHandle(valuesHandle, "valueslist"); Format valuesFormat = valuesBase.getFormat(); switch(valuesFormat) { case UNKNOWN: valuesFormat = Format.XML; break; case JSON: case XML: break; default: throw new UnsupportedOperationException("Only XML and JSON values list results are possible."); } String mimetype = valuesFormat.getDefaultMimetype(); String tid = transaction == null ? null : transaction.getTransactionId(); valuesBase.receiveContent(services.valuesList(valuesBase.receiveAs(), valdef, mimetype, transaction)); return valuesHandle; }
@Override public DocumentDescriptor head(RequestLogger reqlog, String uri, Transaction transaction) throws ForbiddenUserException, FailedRequestException { Response response = headImpl(reqlog, uri, transaction, makeDocumentResource(makeDocumentParams(uri, null, transaction, null))); // 404 if (response == null) return null; Headers responseHeaders = response.headers(); response.close(); logRequest(reqlog, "checked %s document from %s transaction", uri, (transaction != null) ? transaction.getTransactionId() : "no"); DocumentDescriptorImpl desc = new DocumentDescriptorImpl(uri, false); updateVersion(desc, responseHeaders); updateDescriptor(desc, responseHeaders); return desc; }
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); }
void addParams() { String directory = queryDef.getDirectory(); if (directory != null) { params.add("directory", directory); } params.add("collection", queryDef.getCollections()); String optionsName = queryDef.getOptionsName(); if (optionsName != null && optionsName.length() > 0) { params.add("options", optionsName); } ServerTransform transform = queryDef.getResponseTransform(); if (transform != null) { if (responseTransform != null) { if ( ! transform.getName().equals(responseTransform.getName()) ) { throw new IllegalStateException("QueryDefinition transform and DocumentManager transform have different names (" + transform.getName() + ", " + responseTransform.getName() + ")"); } logger.warn("QueryDefinition and DocumentManager both specify a ServerTransform--using params from QueryDefinition"); } transform.merge(params); } else if (responseTransform != null) { responseTransform.merge(params); } if (transaction != null) { params.add("txid", transaction.getTransactionId()); } }
@Override @SuppressWarnings("unchecked") public <T extends SearchReadHandle> T search(QueryDefinition querydef, T searchHandle, long start, Transaction transaction) { @SuppressWarnings("rawtypes") HandleImplementation searchBase = HandleAccessor.checkHandle(searchHandle, "search"); if (searchHandle instanceof SearchHandle) { SearchHandle responseHandle = (SearchHandle) searchHandle; responseHandle.setHandleRegistry(getHandleRegistry()); responseHandle.setQueryCriteria(querydef); } Format searchFormat = searchBase.getFormat(); switch(searchFormat) { case UNKNOWN: searchFormat = Format.XML; break; case JSON: case XML: break; default: throw new UnsupportedOperationException("Only XML and JSON search results are possible."); } String mimetype = searchFormat.getDefaultMimetype(); String tid = transaction == null ? null : transaction.getTransactionId(); searchBase.receiveContent(services.search(requestLogger, searchBase.receiveAs(), querydef, mimetype, start, pageLen, view, tid)); return searchHandle; }
private DocumentPage search(QueryDefinition querydef, long start, long serverTimestamp, SearchReadHandle searchHandle, Transaction transaction) { if (searchHandle != null) { HandleImplementation searchBase = HandleAccessor.checkHandle( searchHandle, "search"); if (searchHandle instanceof SearchHandle) { SearchHandle responseHandle = (SearchHandle) searchHandle; responseHandle.setHandleRegistry(getHandleRegistry()); responseHandle.setQueryCriteria(querydef); } if (nonDocumentFormat != null && nonDocumentFormat != searchBase.getFormat()) { throw new UnsupportedOperationException( "The format supported by your handle:[" + searchBase.getFormat() + "] does not match the non-document format:[" + nonDocumentFormat + "]"); } } String tid = transaction == null ? null : transaction.getTransactionId(); // the default for bulk is no metadata, which differs from the normal // default of ALL Set<Metadata> metadata = isProcessedMetadataModified ? processedMetadata : null; return services.getBulkDocuments(requestLogger, serverTimestamp, querydef, start, getPageLength(), transaction, searchHandle, searchView, metadata, nonDocumentFormat, getReadTransform(), null); }