com.marklogic.client.functionaltest.TestBulkReadWriteWithJacksonParserHandle.java Source code

Java tutorial

Introduction

Here is the source code for com.marklogic.client.functionaltest.TestBulkReadWriteWithJacksonParserHandle.java

Source

/*
 * Copyright 2014-2015 MarkLogic Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.marklogic.client.functionaltest;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.skyscreamer.jsonassert.JSONAssert;
import org.xml.sax.SAXException;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.marklogic.client.DatabaseClient;
import com.marklogic.client.DatabaseClientFactory;
import com.marklogic.client.DatabaseClientFactory.Authentication;
import com.marklogic.client.document.DocumentManager.Metadata;
import com.marklogic.client.document.DocumentPage;
import com.marklogic.client.document.DocumentRecord;
import com.marklogic.client.document.DocumentWriteSet;
import com.marklogic.client.document.JSONDocumentManager;
import com.marklogic.client.document.XMLDocumentManager;
import com.marklogic.client.io.DocumentMetadataHandle;
import com.marklogic.client.io.DocumentMetadataHandle.Capability;
import com.marklogic.client.io.DocumentMetadataHandle.DocumentCollections;
import com.marklogic.client.io.DocumentMetadataHandle.DocumentPermissions;
import com.marklogic.client.io.DocumentMetadataHandle.DocumentProperties;
import com.marklogic.client.io.marker.ContentHandle;
import com.marklogic.client.io.marker.ContentHandleFactory;
import com.marklogic.client.io.Format;
import com.marklogic.client.io.JacksonDatabindHandle;
import com.marklogic.client.io.JacksonHandle;
import com.marklogic.client.io.JacksonParserHandle;
import com.marklogic.client.io.StringHandle;
import com.marklogic.client.query.QueryManager;
import com.marklogic.client.query.RawQueryByExampleDefinition;
import com.marklogic.client.query.QueryManager.QueryView;

/*
 * This test is designed to to test all of bulk reads and write of JSON  with JacksonParserHandle Manager by passing set of uris
 * and also by descriptors.
 */

public class TestBulkReadWriteWithJacksonParserHandle extends BasicJavaClientREST {

    private static final String DIRECTORY = "/";
    private static String dbName = "TestBulkJacksonParserDB";
    private static String[] fNames = { "TestBulkJacksonParserDB-1" };
    private static String restServerName = "REST-Java-Client-API-Server";
    private static int restPort = 8011;
    private DatabaseClient client;

    @BeforeClass
    public static void setUp() throws Exception {
        System.out.println("In setup");
        System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.wire", "debug");
        setupJavaRESTServer(dbName, fNames[0], restServerName, restPort);
        setupAppServicesConstraint(dbName);

    }

    @Before
    public void testSetup() throws Exception {
        // create new connection for each test below
        client = DatabaseClientFactory.newClient("localhost", restPort, "rest-admin", "x", Authentication.DIGEST);
    }

    @After
    public void testCleanUp() throws Exception {
        System.out.println("Running CleanUp script");
        // release client
        client.release();
    }

    public DocumentMetadataHandle setMetadata() {
        // create and initialize a handle on the meta-data
        DocumentMetadataHandle metadataHandle = new DocumentMetadataHandle();
        metadataHandle.getCollections().addAll("my-collection1", "my-collection2");
        metadataHandle.getPermissions().add("app-user", Capability.UPDATE, Capability.READ);
        metadataHandle.getProperties().put("reviewed", true);
        metadataHandle.getProperties().put("myString", "foo");
        metadataHandle.getProperties().put("myInteger", 10);
        metadataHandle.getProperties().put("myDecimal", 34.56678);
        metadataHandle.getProperties().put("myCalendar", Calendar.getInstance().get(Calendar.YEAR));
        metadataHandle.setQuality(23);
        return metadataHandle;
    }

    public void validateMetadata(DocumentMetadataHandle mh) {
        // get meta-data values
        DocumentProperties properties = mh.getProperties();
        DocumentPermissions permissions = mh.getPermissions();
        DocumentCollections collections = mh.getCollections();

        // Properties
        // String expectedProperties =
        // "size:5|reviewed:true|myInteger:10|myDecimal:34.56678|myCalendar:2014|myString:foo|";
        String actualProperties = getDocumentPropertiesString(properties);
        boolean result = actualProperties.contains("size:5|");
        assertTrue("Document properties count", result);

        // Permissions
        String actualPermissions = getDocumentPermissionsString(permissions);
        System.out.println(actualPermissions);

        assertTrue("Document permissions difference in size value", actualPermissions.contains("size:3"));
        //assertTrue(
        //      "Document permissions difference in flexrep-eval permission",
        //      actualPermissions.contains("flexrep-eval:[READ]"));
        assertTrue("Document permissions difference in rest-reader permission",
                actualPermissions.contains("rest-reader:[READ]"));
        assertTrue("Document permissions difference in rest-writer permission",
                actualPermissions.contains("rest-writer:[UPDATE]"));
        assertTrue("Document permissions difference in app-user permissions",
                (actualPermissions.contains("app-user:[UPDATE, READ]")
                        || actualPermissions.contains("app-user:[READ, UPDATE]")));

        // Collections
        String actualCollections = getDocumentCollectionsString(collections);
        System.out.println(collections);

        assertTrue("Document collections difference in size value", actualCollections.contains("size:2"));
        assertTrue("my-collection1 not found", actualCollections.contains("my-collection1"));
        assertTrue("my-collection2 not found", actualCollections.contains("my-collection2"));
    }

    public void validateDefaultMetadata(DocumentMetadataHandle mh) {
        // get meta-data values
        DocumentProperties properties = mh.getProperties();
        DocumentPermissions permissions = mh.getPermissions();
        DocumentCollections collections = mh.getCollections();

        // Properties
        String actualProperties = getDocumentPropertiesString(properties);
        boolean result = actualProperties.contains("size:0|");
        System.out.println(actualProperties + result);
        assertTrue("Document default last modified properties count1?", result);

        // Permissions       
        String actualPermissions = getDocumentPermissionsString(permissions);

        assertTrue("Document permissions difference in size value", actualPermissions.contains("size:2"));
        //assertTrue("Document permissions difference in flexrep-eval permission", actualPermissions.contains("flexrep-eval:[READ]"));
        assertTrue("Document permissions difference in rest-reader permission",
                actualPermissions.contains("rest-reader:[READ]"));
        assertTrue("Document permissions difference in rest-writer permission",
                actualPermissions.contains("rest-writer:[UPDATE]"));

        // Collections 
        String expectedCollections = "size:0|";
        String actualCollections = getDocumentCollectionsString(collections);

        assertEquals("Document collections difference", expectedCollections, actualCollections);
    }

    /* 
     * This test verifies multiple JSON content can be written with no meta-data in bulk write set.
     * Use JacksonParserHandle as content handler.
     * Verified by reading individual documents. 
     */
    @Test
    public void testWriteMultipleJSONDocs() throws Exception {
        String docId[] = { "/a.json", "/b.json", "/c.json" };
        String json1 = new String("{\"animal\":\"dog\", \"says\":\"woof\"}");
        String json2 = new String("{\"animal\":\"cat\", \"says\":\"meow\"}");
        String json3 = new String("{\"animal\":\"rat\", \"says\":\"keek\"}");

        JsonFactory f = new JsonFactory();

        JSONDocumentManager docMgr = client.newJSONDocumentManager();
        docMgr.setMetadataCategories(Metadata.ALL);
        DocumentWriteSet writeset = docMgr.newWriteSet();

        JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();

        jacksonParserHandle1.set(f.createParser(json1));
        jacksonParserHandle2.set(f.createParser(json2));
        jacksonParserHandle3.set(f.createParser(json3));

        writeset.add(docId[0], jacksonParserHandle1);
        writeset.add(docId[1], jacksonParserHandle2);
        writeset.add(docId[2], jacksonParserHandle3);

        docMgr.write(writeset);

        //Using JacksonHandle to read back from database.
        JacksonHandle jacksonhandle = new JacksonHandle();
        docMgr.read(docId[0], jacksonhandle);
        JSONAssert.assertEquals(json1, jacksonhandle.toString(), true);

        docMgr.read(docId[1], jacksonhandle);
        JSONAssert.assertEquals(json2, jacksonhandle.toString(), true);

        docMgr.read(docId[2], jacksonhandle);
        JSONAssert.assertEquals(json3, jacksonhandle.toString(), true);
        // Close handles.
        jacksonParserHandle1.close();
        jacksonParserHandle2.close();
        jacksonParserHandle3.close();
    }

    /* 
     * This test verifies multiple JSON content can be written using newFactory method.
     * Use JacksonParserHandle as content handler.
     * Verified by reading individual documents. 
     */
    @Test
    public void testWriteMultipleJSONDocsFromFactory() throws Exception {
        String docId[] = { "/a.json", "/b.json", "/c.json" };
        String json1 = new String("{\"animal\":\"dog\", \"says\":\"woof\"}");
        String json2 = new String("{\"animal\":\"cat\", \"says\":\"meow\"}");
        String json3 = new String("{\"animal\":\"rat\", \"says\":\"keek\"}");

        JsonFactory f = new JsonFactory();

        JSONDocumentManager docMgr = client.newJSONDocumentManager();
        docMgr.setMetadataCategories(Metadata.ALL);
        DocumentWriteSet writeset = docMgr.newWriteSet();

        //Create a content Factory from JacksonDatabindHandle that will handle writes.  
        ContentHandleFactory ch = JacksonParserHandle.newFactory();

        //Instantiate a handle.
        JacksonParserHandle jacksonParserHandle1 = (JacksonParserHandle) ch.newHandle(JsonParser.class);
        JacksonParserHandle jacksonParserHandle2 = (JacksonParserHandle) ch.newHandle(JsonParser.class);
        JacksonParserHandle jacksonParserHandle3 = (JacksonParserHandle) ch.newHandle(JsonParser.class);

        jacksonParserHandle1.set(f.createParser(json1));
        jacksonParserHandle2.set(f.createParser(json2));
        jacksonParserHandle3.set(f.createParser(json3));

        writeset.add(docId[0], jacksonParserHandle1);
        writeset.add(docId[1], jacksonParserHandle2);
        writeset.add(docId[2], jacksonParserHandle3);

        docMgr.write(writeset);

        //Using JacksonHandle to read back from database.
        JacksonHandle jacksonhandle = new JacksonHandle();
        docMgr.read(docId[0], jacksonhandle);
        JSONAssert.assertEquals(json1, jacksonhandle.toString(), true);

        docMgr.read(docId[1], jacksonhandle);
        JSONAssert.assertEquals(json2, jacksonhandle.toString(), true);

        docMgr.read(docId[2], jacksonhandle);
        JSONAssert.assertEquals(json3, jacksonhandle.toString(), true);
        // Close handles.
        jacksonParserHandle1.close();
        jacksonParserHandle2.close();
        jacksonParserHandle3.close();
    }

    /*
     * 
     * Use JacksonParserHandle to load JSON strings using bulk write set. Test Bulk
     * Read to see you can read the document specific meta-data.
     */

    @Test
    public void testWriteMultipleJSONDocsWithDefaultMetadata() throws Exception {
        String docId[] = { "/a.json", "/b.json", "/c.json" };
        String json1 = new String("{\"animal\":\"dog\", \"says\":\"woof\"}");
        String json2 = new String("{\"animal\":\"cat\", \"says\":\"meow\"}");
        String json3 = new String("{\"animal\":\"rat\", \"says\":\"keek\"}");

        JsonFactory f = new JsonFactory();

        JSONDocumentManager docMgr = client.newJSONDocumentManager();
        docMgr.setMetadataCategories(Metadata.ALL);

        DocumentWriteSet writeset = docMgr.newWriteSet();
        // put meta-data
        DocumentMetadataHandle mh = setMetadata();
        DocumentMetadataHandle mhRead = new DocumentMetadataHandle();

        JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();

        jacksonParserHandle1.set(f.createParser(json1));
        jacksonParserHandle2.set(f.createParser(json2));
        jacksonParserHandle3.set(f.createParser(json3));

        writeset.addDefault(mh);
        writeset.add(docId[0], jacksonParserHandle1);
        writeset.add(docId[1], jacksonParserHandle2);
        writeset.add(docId[2], jacksonParserHandle3);

        docMgr.write(writeset);

        DocumentPage page = docMgr.read(docId);

        while (page.hasNext()) {
            DocumentRecord rec = page.next();
            docMgr.readMetadata(rec.getUri(), mhRead);
            System.out.println(rec.getUri());
            validateMetadata(mhRead);
        }
        validateMetadata(mhRead);
        // Close handles.
        jacksonParserHandle1.close();
        jacksonParserHandle2.close();
        jacksonParserHandle3.close();
    }

    /*
     * 
     * Use JacksonParserHandle to load JSON strings using bulk write set. Test Bulk
     * Read to see you can read all the documents
     */
    @Test
    public void testWriteMultipleJSONDocsWithDefaultMetadata2() throws Exception {
        // Synthesize input content
        String doc1 = new String("{\"animal\": \"cat\", \"says\": \"meow\"}");
        String doc2 = new String("{\"animal\": \"dog\", \"says\": \"bark\"}");
        String doc3 = new String("{\"animal\": \"eagle\", \"says\": \"squeak\"}");
        String doc4 = new String("{\"animal\": \"lion\", \"says\": \"roar\"}");
        String doc5 = new String("{\"animal\": \"man\", \"says\": \"hello\"}");

        // Synthesize input meta-data
        DocumentMetadataHandle defaultMetadata1 = new DocumentMetadataHandle().withQuality(1);
        DocumentMetadataHandle defaultMetadata2 = new DocumentMetadataHandle().withQuality(2);
        DocumentMetadataHandle docSpecificMetadata = new DocumentMetadataHandle()
                .withCollections("mySpecificCollection");

        // Create and build up the batch
        JSONDocumentManager jdm = client.newJSONDocumentManager();
        jdm.setMetadataCategories(Metadata.ALL);

        DocumentWriteSet batch = jdm.newWriteSet();

        JsonFactory f = new JsonFactory();

        JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle4 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle5 = new JacksonParserHandle();

        jacksonParserHandle1.set(f.createParser(doc1));
        jacksonParserHandle2.set(f.createParser(doc2));
        jacksonParserHandle3.set(f.createParser(doc3));
        jacksonParserHandle4.set(f.createParser(doc4));
        jacksonParserHandle5.set(f.createParser(doc5));

        // use system default meta-data
        batch.add("doc1.json", jacksonParserHandle1);

        // using batch default meta-data
        batch.addDefault(defaultMetadata1);
        batch.add("doc2.json", jacksonParserHandle2); // batch default meta-data
        batch.add("doc3.json", docSpecificMetadata, jacksonParserHandle3);
        batch.add("doc4.json", jacksonParserHandle4); // batch default meta-data

        // replace batch default meta-data with new meta-data
        batch.addDefault(defaultMetadata2);
        batch.add("doc5.json", jacksonParserHandle5); // batch default

        // Execute the write operation
        jdm.write(batch);
        DocumentPage page;
        DocumentRecord rec;
        // Check the results
        // Doc1 should have the system default quality of 0
        page = jdm.read("doc1.json");
        DocumentMetadataHandle mh = new DocumentMetadataHandle();
        rec = page.next();
        jdm.readMetadata(rec.getUri(), mh);
        validateDefaultMetadata(mh);
        assertEquals("default quality", 0, mh.getQuality());

        // Doc2 should use the first batch default meta-data, with quality 1
        page = jdm.read("doc2.json");
        rec = page.next();
        jdm.readMetadata(rec.getUri(), mh);
        System.out.print(mh.getCollections().isEmpty());
        assertEquals("default quality", 1, mh.getQuality());
        assertTrue("default collections reset", mh.getCollections().isEmpty());

        // Doc3 should have the system default document quality (0) because
        // quality
        // was not included in the document-specific meta-data. It should be in
        // the
        // collection "mySpecificCollection", from the document-specific
        // meta-data.

        page = jdm.read("doc3.json");
        rec = page.next();
        jdm.readMetadata(rec.getUri(), mh);
        assertEquals("default quality", 0, mh.getQuality());
        assertEquals("default collection must change", "[mySpecificCollection]", mh.getCollections().toString());

        DocumentMetadataHandle doc3Metadata = jdm.readMetadata("doc3.json", new DocumentMetadataHandle());
        System.out.println("doc3 quality: Expected=0, Actual=" + doc3Metadata.getPermissions());
        System.out.print("doc3 collections: Expected: myCollection, Actual=");
        for (String collection : doc3Metadata.getCollections()) {
            System.out.print(collection + " ");
        }
        System.out.println();

        // Doc 4 should also use the 1st batch default meta-data, with quality 1
        page = jdm.read("doc4.json");
        rec = page.next();
        jdm.readMetadata(rec.getUri(), mh);
        assertEquals("default quality", 1, mh.getQuality());
        assertTrue("default collections reset", mh.getCollections().isEmpty());
        // Doc5 should use the 2nd batch default meta-data, with quality 2
        page = jdm.read("doc5.json");
        rec = page.next();
        jdm.readMetadata(rec.getUri(), mh);
        assertEquals("default quality", 2, mh.getQuality());
        // Close handles.
        jacksonParserHandle1.close();
        jacksonParserHandle2.close();
        jacksonParserHandle3.close();
        jacksonParserHandle4.close();
        jacksonParserHandle5.close();
    }

    /*
     * Purpose : To read JSON files from file system and write into DB. 
     * Use JacksonParserHandle to load JSON files using bulk write set.
     * Test Bulk Read to see you can read the document specific meta-data.
     */

    @Test
    public void testWriteMultiJSONFilesDefaultMetadata() throws Exception {
        String docId[] = { "/original.json", "/updated.json", "/constraint1.json" };
        String jsonFilename1 = "json-original.json";
        String jsonFilename2 = "json-updated.json";
        String jsonFilename3 = "constraint1.json";

        File jsonFile1 = new File("src/test/java/com/marklogic/client/functionaltest/data/" + jsonFilename1);
        File jsonFile2 = new File("src/test/java/com/marklogic/client/functionaltest/data/" + jsonFilename2);
        File jsonFile3 = new File("src/test/java/com/marklogic/client/functionaltest/data/" + jsonFilename3);

        JSONDocumentManager docMgr = client.newJSONDocumentManager();
        docMgr.setMetadataCategories(Metadata.ALL);
        DocumentWriteSet writeset = docMgr.newWriteSet();
        // put meta-data
        DocumentMetadataHandle mh = setMetadata();
        DocumentMetadataHandle mhRead = new DocumentMetadataHandle();

        JsonFactory f = new JsonFactory();

        JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();

        jacksonParserHandle1.set(f.createParser(jsonFile1));
        jacksonParserHandle2.set(f.createParser(jsonFile2));
        jacksonParserHandle3.set(f.createParser(jsonFile3));

        writeset.addDefault(mh);
        writeset.add(docId[0], jacksonParserHandle1);
        writeset.add(docId[1], jacksonParserHandle2);
        writeset.add(docId[2], jacksonParserHandle3);

        docMgr.write(writeset);

        DocumentPage page = docMgr.read(docId);

        while (page.hasNext()) {
            DocumentRecord rec = page.next();
            docMgr.readMetadata(rec.getUri(), mhRead);
            System.out.println(rec.getUri());
            validateMetadata(mhRead);
        }
        validateMetadata(mhRead);
        mhRead = null;
        // Close handles.
        jacksonParserHandle1.close();
        jacksonParserHandle2.close();
        jacksonParserHandle3.close();
    }

    /*
     * Purpose: Bulk Search with JacksonParserHandle
     * Use JacksonParserHandle to retrieve JSON bulk search result set. Test Bulk
     * Search with JacksonParserHandle
     */
    @Test
    public void testBulkSearchQBEWithJSONResponseFormat()
            throws IOException, ParserConfigurationException, SAXException, TransformerException {
        int count;
        String docId[] = { "/a.json", "/b.json", "/c.json" };
        String json1 = new String("{\"animal\":\"dog\", \"says\":\"woof\"}");
        String json2 = new String("{\"animal\":\"cat\", \"says\":\"meow\"}");
        String json3 = new String("{\"animal\":\"rat\", \"says\":\"keek\"}");

        JsonFactory f = new JsonFactory();

        JSONDocumentManager docMgr1 = client.newJSONDocumentManager();
        docMgr1.setMetadataCategories(Metadata.ALL);
        DocumentWriteSet writeset = docMgr1.newWriteSet();

        JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
        JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();

        jacksonParserHandle1.set(f.createParser(json1));
        jacksonParserHandle2.set(f.createParser(json2));
        jacksonParserHandle3.set(f.createParser(json3));

        writeset.add(docId[0], jacksonParserHandle1);
        writeset.add(docId[1], jacksonParserHandle2);
        writeset.add(docId[2], jacksonParserHandle3);
        // Write to database.
        docMgr1.write(writeset);

        //Creating a xml document manager for bulk search
        XMLDocumentManager docMgr = client.newXMLDocumentManager();
        //using QBE for query definition and set the search criteria

        QueryManager queryMgr = client.newQueryManager();
        String queryAsString = "{\"$query\": { \"says\": {\"$word\":\"woof\",\"$exact\": false}}}";
        RawQueryByExampleDefinition qd = queryMgr
                .newRawQueryByExampleDefinition(new StringHandle(queryAsString).withFormat(Format.JSON));

        // set  document manager level settings for search response
        docMgr.setPageLength(25);
        docMgr.setSearchView(QueryView.RESULTS);
        docMgr.setNonDocumentFormat(Format.JSON);

        // Search for documents where content has bar and get first result record, get search handle on it,Use DOMHandle to read results
        JacksonParserHandle sh = new JacksonParserHandle();
        DocumentPage page;

        long pageNo = 1;
        do {
            count = 0;
            page = docMgr.search(qd, pageNo, sh);
            if (pageNo > 1) {
                assertFalse("Is this first Page", page.isFirstPage());
                assertTrue("Is page has previous page ?", page.hasPreviousPage());
            }
            while (page.hasNext()) {
                DocumentRecord rec = page.next();
                rec.getFormat();
                validateRecord(rec, Format.JSON);
                System.out.println(rec.getContent(new StringHandle()).get().toString());
                count++;
            }

            // Add additional asserts once JacksonParserHandle is ready to handle bulk Search set.

            //assertTrue("Page start in results and on page",sh.get().get("start").asLong() == page.getStart());
            assertEquals("document count", page.size(), count);
            //         assertEquals("Page Number #",pageNo,page.getPageNumber());
            pageNo = pageNo + page.getPageSize();
        } while (!page.isLastPage() && page.hasContent());

        assertEquals("page count is  ", 1, page.getTotalPages());
        assertFalse("Page has previous page ?", page.hasPreviousPage());
        assertEquals("page size", 25, page.getPageSize());
        assertEquals("document count", 1, page.getTotalSize());
        // Close handles.
        jacksonParserHandle1.close();
        jacksonParserHandle2.close();
        jacksonParserHandle3.close();
    }

    @AfterClass
    public static void tearDown() throws Exception {
        System.out.println("In tear down");
        tearDownJavaRESTServer(dbName, fNames, restServerName);
    }

    public void validateRecord(DocumentRecord record, Format type) {

        assertNotNull("DocumentRecord should never be null", record);
        assertNotNull("Document uri should never be null", record.getUri());
        assertTrue("Document uri should start with " + DIRECTORY, record.getUri().startsWith(DIRECTORY));
        assertEquals("All records are expected to be in same format", type, record.getFormat());

    }
}