package org.gbif.checklistbank.nub.source;
import org.gbif.api.model.registry.Dataset;
import org.gbif.checklistbank.config.ClbConfiguration;
import java.util.UUID;
import org.postgresql.copy.CopyManager;
import org.postgresql.core.BaseConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A nub source which is backed by postgres checklistbank usages of a given datasetKey
*/
public class ClbSource extends NubSource {
private static final Logger LOG = LoggerFactory.getLogger(ClbSource.class);
private final ClbConfiguration clb;
public ClbSource(ClbConfiguration clb, UUID key, String name) {
super(key, name.replaceAll("\\s", " "), false);
this.clb = clb;
}
public ClbSource(ClbConfiguration clb, Dataset dataset) {
this(clb, dataset.getKey(), dataset.getTitle());
}
@Override
void initNeo(NeoUsageWriter writer) throws Exception {
try (BaseConnection c = (BaseConnection) clb.connect()) {
final CopyManager cm = new CopyManager(c);
cm.copyOut("COPY ("
+ "SELECT u.id, u.parent_fk, u.basionym_fk, u.rank,"
+ " coalesce(u.status, CASE WHEN (u.is_synonym) THEN 'SYNONYM'::taxonomic_status ELSE 'ACCEPTED'::taxonomic_status END),"
+ " u.nom_status, n.scientific_name, c.citation"
+ " FROM name_usage u JOIN name n ON u.name_fk=n.id LEFT JOIN citation c ON u.name_published_in_fk=c.id"
+ " WHERE u.dataset_key = '" + key + "')"
+ " TO STDOUT WITH NULL ''", writer);
}
}
}