package org.gbif.checklistbank.index;
import org.gbif.api.model.checklistbank.NameUsage;
import org.gbif.api.model.checklistbank.ParsedName;
import org.gbif.checklistbank.model.UsageForeignKeys;
import org.gbif.checklistbank.service.DatasetImportService;
import org.gbif.checklistbank.service.ImporterCallback;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.Future;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.Futures;
/**
* Implementation that does nothing. Only useful for testing other parts of the system.
*/
public class NameUsageIndexServicePassThru implements DatasetImportService {
private final List<Integer> empty = ImmutableList.<Integer>builder().build();
@Override
public Future<List<Integer>> sync(UUID datasetKey, ImporterCallback dao, Iterable<Integer> usageNeoIds) {
for (int id : usageNeoIds) {
checkUsage(dao.readUsage(id));
Preconditions.checkNotNull(dao.readName(id), "Missing parsed name for " + id);
}
return Futures.immediateFuture(empty);
}
private void checkUsage(NameUsage u) {
Preconditions.checkNotNull(u.getKey(), "Missing usage key for " + u.getScientificName());
Preconditions.checkNotNull(u.getScientificName(), "Missing name for " + u.getKey());
}
@Override
public Future<List<NameUsage>> sync(UUID datasetKey, ImporterCallback dao, List<NameUsage> usages, List<ParsedName> names) {
for (NameUsage u : usages) {
checkUsage(u);
}
return Futures.immediateFuture(usages);
}
@Override
public Future<List<Integer>> updateForeignKeys(UUID datasetKey, List<UsageForeignKeys> fks) {
for (UsageForeignKeys fk : fks) {
Preconditions.checkNotNull(fk.getUsageKey());
}
return Futures.immediateFuture(empty);
}
@Override
public void insertNubRelations(UUID datasetKey, Map<Integer, Integer> relations) {
for (Integer i : relations.keySet()) {
Preconditions.checkNotNull(i);
}
}
@Override
public int deleteDataset(UUID datasetKey) {
return 0;
}
@Override
public Future<List<Integer>> deleteUsages(UUID datasetKey, List<Integer> usageKeys) {
for (Integer i : usageKeys) {
Preconditions.checkNotNull(i);
}
return Futures.immediateFuture(usageKeys);
}
@Override
public boolean isRunning() {
return false;
}
@Override
public void close() throws Exception {
// nothing to do
}
}