package com.cyngn.chrono.storage;
import com.cyngn.chrono.storage.accessor.TestBatchAccessor;
import com.cyngn.chrono.storage.entity.TestBatch;
import com.cyngn.chrono.storage.entity.UrlPackage;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.mapping.MappingManager;
import com.englishtown.vertx.cassandra.CassandraSession;
import com.englishtown.vertx.cassandra.FutureUtils;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.ListenableFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
/**
* Handle access to the test batches of URLs.
*
* @author truelove@cyngn.com (Jeremy Truelove) 8/15/15
*/
public class TestBatchStorage {
private static final Logger logger = LoggerFactory.getLogger(TestBatchStorage.class);
private final TestBatchAccessor testBatchAccessor;
private final CassandraSession session;
public TestBatchStorage(CassandraSession session) {
MappingManager manager = new MappingManager(session.getSession());
this.session = session;
testBatchAccessor = manager.createAccessor(TestBatchAccessor.class);
}
public void getTestBatch(String batchName, BiConsumer<Boolean,TestBatch> onComplete) {
logger.info("getTestBatch - batchName: {}", batchName);
ListenableFuture<TestBatch> future = testBatchAccessor.getTestBatchAsync(batchName);
FutureUtils.addCallback(future, new FutureCallback<TestBatch>() {
@Override
public void onSuccess(TestBatch result) { onComplete.accept(true, result); }
@Override
public void onFailure(Throwable t) {
logger.error("getTestBatch - batchName: {}", batchName, t);
onComplete.accept(false, null);
}
}, session.getVertx());
}
public void createTestBatch(String name, List<UrlPackage> urlPackages, Consumer<Boolean> onComplete) {
logger.info("createTestBatch - name: {} urlPackages: {}", name, urlPackages);
ListenableFuture<ResultSet> future = testBatchAccessor.createTestBatch(name, urlPackages);
FutureUtils.addCallback(future, new FutureCallback<ResultSet>() {
@Override
public void onSuccess(ResultSet result) {
onComplete.accept(result.wasApplied());
}
@Override
public void onFailure(Throwable t) {
logger.error("createTestBatch - name: {} urlPackages: {} ex: ", name, urlPackages, t);
onComplete.accept(false);
}
}, session.getVertx());
}
}