package org.hadatac.data.loader;
import java.io.File;
import java.lang.String;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.csv.CSVRecord;
public class StudyGenerator extends BasicGenerator {
final String kbPrefix = "chear-kb:";
private int counter = 1; //starting index number
public StudyGenerator(File file) {
super(file);
}
@Override
void initMapping() {
mapCol.clear();
mapCol.put("studyID", "CHEAR Project ID");
mapCol.put("studyTitle", "Title");
mapCol.put("studyAims", "Specific Aims");
mapCol.put("studySignificance", "Significance");
mapCol.put("numSubjects", "Number of Participants");
mapCol.put("numSamples", "Number of Sample IDs");
mapCol.put("institution", "Institution");
mapCol.put("PI", "Principal Investigator");
mapCol.put("PIAddress", "PI Address");
mapCol.put("PICity", "PI City");
mapCol.put("PIState", "PI State");
mapCol.put("PIZipCode", "PI Zip Code");
mapCol.put("PIEmail", "Email");
mapCol.put("PIPhone", "PI Phone");
mapCol.put("DCAccessBool", "DC Access?");
}
private String getUri(CSVRecord rec) {
return kbPrefix + "STD-" + rec.get(mapCol.get("studyID"));
}
private String getType() {
return "hasco:Study";
}
private String getTitle(CSVRecord rec) {
return rec.get(mapCol.get("studyTitle"));
}
private String getAims(CSVRecord rec) {
return rec.get(mapCol.get("studyAims")) ;
}
private String getSignificance(CSVRecord rec) {
return rec.get(mapCol.get("studySignificance")) ;
}
private String getInstitutionUri(CSVRecord rec) {
return kbPrefix + "ORG-" + rec.get(mapCol.get("institution")).replaceAll(" ", "-");
}
private String getInstitutionName(CSVRecord rec) {
return rec.get(mapCol.get("institution"));
}
private String getAgentUri(CSVRecord rec) {
return kbPrefix + "PER-" + rec.get(mapCol.get("PI")).replaceAll(" ", "-");
}
private String getAgentFullName(CSVRecord rec) {
return rec.get(mapCol.get("PI"));
}
private String getAgentGivenName(CSVRecord rec) {
return rec.get(mapCol.get("PI")).substring(0, getAgentFullName(rec).indexOf(' '));
}
private String getAgentFamilyName(CSVRecord rec) {
return rec.get(mapCol.get("PI")).substring(getAgentFullName(rec).indexOf(' ')+1);
}
private String getAgentMBox(CSVRecord rec) {
return rec.get(mapCol.get("PIEmail"));
}
@Override
public Map<String, Object> createRow(CSVRecord rec) {
Map<String, Object> row = new HashMap<String, Object>();
row.put("hasURI", getUri(rec));
row.put("a", getType());
row.put("rdfs:label", getTitle(rec));
row.put("skos:definition", getAims(rec));
row.put("rdfs:comment", getSignificance(rec));
row.put("hasco:hasAgent", getAgentUri(rec));
row.put("hasco:hasInstitution", getInstitutionUri(rec));
counter++;
return row;
}
public Map<String, Object> createAgentRow(CSVRecord rec) {
Map<String, Object> row = new HashMap<String, Object>();
row.put("hasURI", getAgentUri(rec));
row.put("a", "prov:Person");
row.put("foaf:name", getAgentFullName(rec));
row.put("rdfs:comment", "PI from " + getInstitutionName(rec));
row.put("foaf:familyName", getAgentFamilyName(rec));
row.put("foaf:givenName", getAgentGivenName(rec));
row.put("foaf:mbox", getAgentMBox(rec));
row.put("foaf:member", getInstitutionUri(rec));
counter++;
return row;
}
public List< Map<String, Object> > createAgentRows() {
rows.clear();
for (CSVRecord record : records) {
rows.add(createAgentRow(record));
}
return rows;
}
public Map<String, Object> createInstitutionRow(CSVRecord rec) {
Map<String, Object> row = new HashMap<String, Object>();
row.put("hasURI", getInstitutionUri(rec));
row.put("a", "prov:Organization");
row.put("foaf:name", getInstitutionName(rec));
row.put("rdfs:comment", getInstitutionName(rec) + " Institution");
counter++;
return row;
}
public List< Map<String, Object> > createInstitutionRows() {
rows.clear();
for (CSVRecord record : records) {
rows.add(createInstitutionRow(record));
}
return rows;
}
}