package com.marklogic.client.helper; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.marklogic.client.DatabaseClient; import com.marklogic.client.document.GenericDocumentManager; import com.marklogic.client.document.XMLDocumentManager; import com.marklogic.client.io.DocumentMetadataHandle; import com.marklogic.client.io.DocumentMetadataHandle.DocumentCollections; import com.marklogic.client.io.SearchHandle; import com.marklogic.client.query.MatchDocumentSummary; import com.marklogic.client.query.QueryManager; import com.marklogic.client.query.StringQueryDefinition; /** * The intent of this class is to provide some syntactic sugar on common operations using the ML Java API, which is a * wrapper around the ML REST API. */ public class ClientHelper extends LoggingObject { private DatabaseClient client; public ClientHelper(DatabaseClient client) { this.client = client; } public DatabaseClient getClient() { return this.client; } public DocumentMetadataHandle getMetadata(String uri) { return client.newDocumentManager().readMetadata(uri, new DocumentMetadataHandle()); } public List<String> getCollections(String uri) { DocumentCollections colls = getMetadata(uri).getCollections(); return Arrays.asList(colls.toArray(new String[] {})); } public long getCollectionSize(String collectionName) { QueryManager queryMgr = getClient().newQueryManager(); StringQueryDefinition def = queryMgr.newStringDefinition(); def.setCollections(collectionName); SearchHandle sh = queryMgr.search(def, new SearchHandle()); return sh.getTotalResults(); } public List<String> getUrisInCollection(String collectionName) { return getUrisInCollection(collectionName, 10); } public List<String> getUrisInCollection(String collectionName, int pageLength) { QueryManager mgr = getClient().newQueryManager(); mgr.setPageLength(pageLength); StringQueryDefinition def = mgr.newStringDefinition(); def.setCollections(collectionName); SearchHandle h = mgr.search(def, new SearchHandle()); List<String> uris = new ArrayList<String>(); for (MatchDocumentSummary s : h.getMatchResults()) { uris.add(s.getUri()); } return uris; } public String eval(String expr) { return getClient().newServerEval().xquery(expr).evalAs(String.class); } public void release() { getClient().release(); } }