package com.lordofthejars.nosqlunit.couchbase; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonArray; import com.couchbase.client.java.document.json.JsonObject; import com.lordofthejars.nosqlunit.core.IOUtils; import com.lordofthejars.nosqlunit.couchbase.model.Document; import org.codehaus.jackson.map.ObjectMapper; import java.io.IOException; import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.StreamSupport; public class DataLoader { private Bucket bucket; public DataLoader(Bucket bucket) { super(); this.bucket = bucket; } public void load(final InputStream dataScript) { final Map<String, Document> documentsIterator = getDocuments(dataScript); insertDocuments(documentsIterator); } private void insertDocuments(final Map<String, Document> documentsIterator) { for (final Map.Entry<String, Document> documentEntry : documentsIterator.entrySet()) { final Document document = documentEntry.getValue(); final JsonDocument jsonDocument = JsonDocument.create(documentEntry.getKey(), document.getExpirationSecs(), document.getDocument()); bucket.upsert(jsonDocument, 15, TimeUnit.SECONDS); } } public static Map<String, Document> getDocuments(final InputStream dataScript) { try { final JsonObject jsonObject = JsonObject.fromJson(IOUtils.readFullStream(dataScript)); final JsonArray data = jsonObject.getArray("data"); return StreamSupport.stream(data.spliterator(), false) .map(o -> (JsonObject) o) .collect(Collectors.toMap(o -> o.getString("key"), o -> new Document(o.getObject("document"), o.getInt("expirationSecs")))); } catch (IOException e) { throw new IllegalStateException(e); } } }