Creating OJAI Documents

You create and manipulate OJAI documents as Document objects.

Creating a Document by Setting Fields and Values in a New Document Object

Create a new OJAI document by calling the newDocument() method of the MapRDB class, specifying the ID with the setId() method, specifying keys and their values with the set() or setArray() method, and returning the results in a Document object.

For example, suppose that you wanted to create this OJAI document:

{
	"_id" : "movie0000001",
	"title" : "OJAI -- The Documentary",
	"studio" : "MapR Technologies, Inc.",
	"release_date" : "2015-09-29",
	"trailers" : {
		"teaser" : "https://10.10.21.90/trailers/teaser",
		"theatrical" : "https://10.10.21.90/trailers/theatrical"
	},
	"characters" : [
		"Heroic Developer", 
           "Evil Release Manager", 
           "Mad Development Manager"
	],
	"box_office_gross" : 1000000000L
}

You could write a method that looks like this:

  public Document buildDocument() {
    return MapRDB.newDocument()
        .setId("movie0000001")
        .set("title", "OJAI -- The Documentary")
        .set("studio", "MapR Technologies, Inc.")
        .set("release_date", Values.parseDate("2015-09-29"))
        .set("trailers.teaser", "https://10.10.21.90/trailers/teaser")
        .set("trailers.theatrical", "https://10.10.21.90/trailers/theatrical")
        .setArray("characters", ImmutableList.of("Heroic Developer", "Evil Release Manager", "Mad Development Manager"))
        .set("box_office_gross", 1000000000L);
  }

For the full list of methods in the Document interface, see Document.

Creating a Document from a JavaBean

Create a new OJAI document by calling the newDocument(Object bean) method of the MapRDB class and returning the results in a Document object.

For example, suppose that you were using the following JavaBean class:

package com.example;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
"a",
"b",
"array"
})
public class ExampleJson {
    
    @JsonProperty("a")
    private Double a;
    @JsonProperty("b")
    private String b;
    @JsonProperty("array")
    private List<Object> array = new ArrayList<Double>();
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    
    /**
     *
     * @return
     * The a
     */
    @JsonProperty("a")
    public Double getA() {
        return a;
    }
    
    /**
     *
     * @param a
     * The a
     */
    @JsonProperty("a")
    public void setA(Double a) {
        this.a = a;
    }
    
    /**
     *
     * @return
     * The b
     */
    @JsonProperty("b")
    public String getB() {
        return b;
    }
    
    /**
     *
     * @param b
     * The b
     */
    @JsonProperty("b")
    public void setB(String b) {
        this.b = b;
    }
    
    /**
     *
     * @return
     * The array
     */
    @JsonProperty("array")
    public List<Object> getArray() {
        return array;
    }
    
    /**
     *
     * @param array
     * The array
     */
    @JsonProperty("array")
    public void setArray(List<Object> array) {
        this.array = array;
    }
    
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }
    
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }
    
}

You could create a new bean like this:

ExampleJson bean = new ExampleJson();

bean.setA(1);
bean.setB("aString");

List arrList = new ArrayList();
arrList.add(1);
arrList.add(2);
arrList.add("arrStr");

Map arrMap = new HashMap();
arrMap.put("c","arrMapStr");
arrList.add(arrMap);
bean.setArray(arrList);

After creating a new bean, you can create a document from it like this:

Document pojoDoc = MapRDB.newDocument(bean);

The document will have the following structure:

{  
   "a":1,
   "b":"aString",
   "array":[  
      1,
      2,
      "arrStr",
      {  
         "c":"arrMapStr"
      }
   ]
}

You can also create a JavaBean from an OJAI document. For example, suppose that you modified the document that you created in the example above.

pojoDoc.set("d","10");

You now want to convert the document back into a bean that uses the ExampleJson class shown above. You could do so like this:

ExampleJson bean = pojoDoc.toJavaBean(ExampleJson.class);

Creating a Document from a String

Create a new OJAI document by calling the newDocument(String string) method of the MapRDB class and returning the results in a Document object.

Document pojoDoc = MapRDB.newDocument("{\"a\":1,\"b\":\"aString\",
\"array\":[1,2,\"arrStr\",{\"c\":\"arrMapStr\"}]}");

This code creates the following OJAI document:

{  
   "a":1,
   "b":"aString",
   "array":[  
      1,
      2,
      "arrStr",
      {  
         "c":"arrMapStr"
      }
   ]
}