@Override public String readDocument(String uri) throws BagriException { DocumentAccessor doc = xRepo.getDocumentManagement().getDocument(uri, null); if (doc == null) { return null; } return doc.getContent(); }
if (doc != null) { Map<String, Object> docInfo = new HashMap<>(11); docInfo.put("key", doc.getDocumentKey()); docInfo.put("version", doc.getVersion()); docInfo.put("uri", doc.getUri()); docInfo.put("size", doc.getSizeInBytes()); docInfo.put("encoding", doc.getEncoding()); docInfo.put("created at", new Date(doc.getCreateadAt())); docInfo.put("created by", doc.getCreatedBy()); docInfo.put("start tx", doc.getTxStart()); docInfo.put("elements", doc.getSizeInElements()); docInfo.put("fragments", doc.getSizeInFragments()); docInfo.put("collections", doc.getCollections()); docInfo.put("content type", doc.getContentType()); result = JMXUtils.mapToComposite("document", "Document Info", docInfo);
@POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "postDocument: creates a new Document or new version if Document with provided uri already exists") public Response postDocument(final DocumentParams params) { DocumentManagement docMgr = getDocManager(); try { logger.trace("postDocument; got params: {}", params); DocumentAccessor doc = docMgr.storeDocument(params.uri, params.content, params.props); logger.trace("postDocument; got document: {}", doc); DocumentBean dr = new DocumentBean(doc.getUri(), doc.getCreateadAt(), doc.getCreatedBy(), doc.getContentType(), doc.getEncoding(), doc.getSizeInBytes()); return Response.created(UriBuilder.fromPath("/docs/" + dr.uri).build()).entity(dr).build(); } catch (Exception ex) { logger.error("postDocument.error", ex); throw new WebApplicationException(ex, Status.INTERNAL_SERVER_ERROR); //return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build(); } }
@Test public void createSecurityTest() throws Exception { long txId = getTxManagement().beginTransaction(); String uri = getFileName("security1500.xml"); DocumentAccessor doc = createDocumentTest(sampleRoot + uri); assertNotNull(doc); uris.add(doc.getUri()); assertEquals(txId, doc.getTxStart()); assertEquals(0L, doc.getTxFinish()); assertEquals(uri, doc.getUri()); getTxManagement().commitTransaction(txId); }
@Test public void selectSecurityTest() throws Exception { long txId = getTxManagement().beginTransaction(); String fileName = sampleRoot + getFileName("security1500.xml"); String xml = readTextFile(fileName); DocumentAccessor doc = createDocumentTest(fileName); assertNotNull(doc); uris.add(doc.getUri()); assertEquals(txId, doc.getTxStart()); assertEquals(0L, doc.getTxFinish()); getTxManagement().commitTransaction(txId); Properties props = getDocumentProperties(); props.setProperty(pn_document_headers, String.valueOf(DocumentAccessor.HDR_CONTENT)); doc = getDocManagement().getDocument(doc.getUri(), props); assertNotNull(doc); assertNotNull(doc.getContent()); String content = doc.getContent(); assertEquals(xml.length(), content.length()); }
private String storeDocument(String uri, String xml) { try { Properties props = new Properties(); props.setProperty(pn_document_data_format, "XML"); DocumentAccessor doc = xRepo.getDocumentManagement().storeDocument(uri, xml, props); //logger.trace("storeDocument.exit; result: {}", result); return doc.getUri(); } catch (BagriException ex) { return null; } }
DocumentAccessor doc = createDocumentTest(sampleRoot + getFileName("security1500.xml")); assertNotNull(doc); uris.add(doc.getUri()); assertEquals(txId, doc.getTxStart()); assertEquals(0L, doc.getTxFinish()); getTxManagement().commitTransaction(txId); int version = doc.getVersion(); String uri = doc.getUri(); uris.add(doc.getUri()); assertEquals(txId, doc.getTxStart()); assertEquals(0L, doc.getTxFinish()); assertEquals(++version, doc.getVersion()); assertEquals(uri, doc.getUri()); getTxManagement().commitTransaction(txId); doc = updateDocumentTest(uri, sampleRoot + getFileName("security5621.xml")); assertNotNull(doc); uris.add(doc.getUri()); assertEquals(txId, doc.getTxStart()); assertEquals(0L, doc.getTxFinish()); assertEquals(++version, doc.getVersion()); assertEquals(uri, doc.getUri()); getTxManagement().commitTransaction(txId);
@Test public void removeSecurityTest() throws Exception { long txId = getTxManagement().beginTransaction(); DocumentAccessor doc = createDocumentTest(sampleRoot + getFileName("security1500.xml")); assertNotNull(doc); uris.add(doc.getUri()); assertEquals(txId, doc.getTxStart()); assertEquals(0L, doc.getTxFinish()); getTxManagement().commitTransaction(txId); long docKey = doc.getDocumentKey(); long txId2 = getTxManagement().beginTransaction(); removeDocumentTest(doc.getUri()); doc = getDocManagement().getDocument(doc.getUri(), getDocumentProperties()); // now it is null.. think about it - is it correct or not? //assertNotNull(doc); //assertEquals(txId, doc.getTxStart()); //assertEquals(txId2, doc.getTxFinish()); //assertEquals(docId, doc.getDocumentId()); //assertEquals(docKey, doc.getDocumentKey()); //assertTrue(doc.getVersion() == ++version); //assertEquals(doc.getUri(), uri); getTxManagement().commitTransaction(txId2); //uris.add(doc.getUri()); //doc = getDocManagement().getDocument(docKey); //assertNull(doc); }
private int storeDocument(String uri, String content) throws BagriException { Properties props = new Properties(); props.setProperty(pn_document_data_format, "XML"); DocumentAccessor xDoc = xRepo.getDocumentManagement().storeDocument(uri, content, props); return xDoc.getVersion(); }
@GET @Path("/{name}") @Produces(MediaType.APPLICATION_JSON) @ApiOperation(value = "getCollectionDocuments: return Document uris belonging to the specified Collection") public Collection<String> getCollectionDocuments(@PathParam("name") String name) { DocumentManagement docMgr = getDocManager(); Properties props = new Properties(); props.setProperty(pn_document_headers, String.valueOf(DocumentAccessor.HDR_URI)); try (ResultCursor<DocumentAccessor> docs = docMgr.getDocuments("collections.contains(" + name + "), txFinish = 0", props)) { List<String> result = new ArrayList<>(); //itr.size()); for (DocumentAccessor doc: docs) { result.add(doc.getUri()); } return result; } catch (Exception ex) { logger.error("getCollectionDocuments.error", ex); throw new WebApplicationException(ex, Status.INTERNAL_SERVER_ERROR); } }
public String getDocument(String uri) throws BagriException { // get it as Map? DocumentAccessor doc = xRepo.getDocumentManagement().getDocument(uri, null); return doc.getContent(); }
private java.util.Collection<String> getUris(String pattern, String properties) throws Exception { Properties props = propsFromString(properties); if (props == null) { props = new Properties(); } props.setProperty(pn_document_headers, String.valueOf(DocumentAccessor.HDR_URI)); Iterable<DocumentAccessor> uris = (Iterable<DocumentAccessor>) docManager.getDocuments(pattern, props); List<String> result = new ArrayList<>(); //uris.size() for (DocumentAccessor doc: uris) { result.add(doc.getUri()); } //uris.close(); logger.debug("getUris; returning {} uris", result); return result; }
@GET @Path("/{uri}") @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) @ApiOperation(value = "getDocumentContent: return content of the specified Document") public Response getDocumentContent(@PathParam("uri") String uri, @Context HttpHeaders hh) { DocumentManagement docMgr = getDocManager(); try { Properties props = new Properties(); if (MediaType.APPLICATION_JSON_TYPE.equals(hh.getAcceptableMediaTypes().get(0))) { props.setProperty(pn_document_data_format, df_json); } else if (MediaType.APPLICATION_XML_TYPE.equals(hh.getAcceptableMediaTypes().get(0))) { props.setProperty(pn_document_data_format, df_xml); } DocumentAccessor doc = docMgr.getDocument(uri, props); String content = doc.getContent(); return Response.ok(content).build(); } catch (Exception ex) { logger.error("getDocumentContent.error", ex); throw new WebApplicationException(ex, Status.INTERNAL_SERVER_ERROR); //return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build(); } }
names.add(uri.getUri());
public void afterInsert(Document doc, SchemaRepository repo) { logger.info("afterInsert.enter; doc: {}; repo: {}", doc, repo); try { Properties props = new Properties(); props.setProperty(pn_document_data_format, "XML"); DocumentAccessor da = repo.getDocumentManagement().getDocument(doc.getUri(), props); Security sec = da.getContent(); logger.info("afterInsert.exit; got security: {}/{}/{}", sec.getName(), sec.getSymbol(), sec.getId()); } catch (BagriException ex) { logger.info("afterInsert.error; got exception: {}", ex.getMessage()); } }
@ManagedOperation(description="Register Document") @ManagedOperationParameters({ @ManagedOperationParameter(name = "docFile", description = "A full path to XML file to register"), @ManagedOperationParameter(name = "properties", description = "A list of properties in key=value form separated by semicolon")}) public String registerDocument(String docFile, String properties) { String uri = Paths.get(docFile).getFileName().toString(); try { String xml = FileUtils.readTextFile(docFile); DocumentAccessor doc = docManager.storeDocument(uri, xml, propsFromString(properties)); return doc.getUri(); } catch (IOException | BagriException ex) { logger.error("registerDocument.error: {}", ex.getMessage(), ex); throw new RuntimeException(ex.getMessage()); } }
@Override public Item getItem(XPathContext context) throws XPathException { if (json == null) { Properties props = new Properties(); props.setProperty(pn_document_data_format, "JSON"); props.setProperty(pn_document_headers, String.valueOf(DocumentAccessor.HDR_CONTENT)); try { DocumentAccessor doc = docMgr.getDocument(docKey, props); if (doc == null) { throw new XPathException("Lost document for key: " + docKey); } json = doc.getContent(); } catch (BagriException ex) { throw new XPathException(ex); } } //MapItem options = new HashTrieMap(context); Map<String, Sequence> options = new HashMap<>(); options.put("liberal", BooleanValue.FALSE); options.put("duplicates", new StringValue("use-first")); options.put("escape", BooleanValue.FALSE); return ParseJsonFn.parse(json, options, context); }
public void storeSecurityTest() throws Exception { long txId = 0; try { txId = getTxManagement().beginTransaction(); } catch (BagriException ex) { if (ex.getErrorCode() != BagriException.ecTransNoNested) { throw ex; } } uris.add(createDocumentTest(sampleRoot + getFileName("security1500.xml")).getUri()); uris.add(createDocumentTest(sampleRoot + getFileName("security5621.xml")).getUri()); uris.add(createDocumentTest(sampleRoot + getFileName("security9012.xml")).getUri()); uris.add(createDocumentTest(sampleRoot + getFileName("security29674.xml")).getUri()); if (txId > 0) { getTxManagement().commitTransaction(txId); } }
@ManagedOperation(description="Return Document Content") @ManagedOperationParameters({ @ManagedOperationParameter(name = "uri", description = "Document identifier"), @ManagedOperationParameter(name = "properties", description = "A list of properties in key=value form separated by semicolon")}) public String getDocumentContent(String uri, String properties) { try { String result = null; DocumentAccessor doc = docManager.getDocument(uri, propsFromString(properties)); if (doc != null) { result = doc.getContent(); } logger.debug("getDocumentContent; got accessor {} for uri: {}, props: {}; returning: {}", doc, uri, properties, result); return result; } catch (IOException | BagriException ex) { logger.error("getDocumentContent.error: {}", ex.getMessage(), ex); throw new RuntimeException(ex.getMessage()); } catch (Throwable ex) { logger.error("getDocumentContent.error: {}", ex.getMessage(), ex); throw new RuntimeException(ex.getMessage()); } }
@Override public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException { String pattern = arguments[0].head().getStringValue(); Properties props = null; if (arguments.length > 1) { props = sequence2Properties(arguments[1]); } else { props = new Properties(); } props.setProperty(pn_document_headers, String.valueOf(DocumentAccessor.HDR_URI)); try (ResultCursor<DocumentAccessor> uris = xdm.getDocuments(pattern, props)) { List<AtomicValue> result = new ArrayList<>(); //uris.size()); for (DocumentAccessor da: uris) { result.add(new StringValue(da.getUri())); } return new AtomicArray(result); } catch (Exception ex) { throw new XPathException(ex); } } };