use of org.eol.globi.domain.InteractType in project eol-globi-data by jhpoelen.
the class ReportGenerator method countInteractionsAndTaxa.
private void countInteractionsAndTaxa(Iterable<Relationship> specimens, Set<Long> ids, Counter interactionCounter, Set<Long> idsNoMatch) {
for (Relationship specimen : specimens) {
Iterable<Relationship> relationships = specimen.getEndNode().getRelationships();
for (Relationship relationship : relationships) {
InteractType[] types = InteractType.values();
for (InteractType type : types) {
if (relationship.isType(NodeUtil.asNeo4j(type)) && !relationship.hasProperty(PropertyAndValueDictionary.INVERTED)) {
interactionCounter.count();
break;
}
}
}
Relationship classifiedAs = specimen.getEndNode().getSingleRelationship(NodeUtil.asNeo4j(RelTypes.CLASSIFIED_AS), Direction.OUTGOING);
if (classifiedAs != null) {
Node taxonNode = classifiedAs.getEndNode();
ids.add(taxonNode.getId());
if (!TaxonUtil.isResolved(new TaxonNode(taxonNode))) {
idsNoMatch.add(taxonNode.getId());
}
}
}
}
use of org.eol.globi.domain.InteractType in project eol-globi-data by jhpoelen.
the class StudyImporterForVertNetTest method parseAssOcc.
protected Map<String, InteractType> parseAssOcc(String str) {
Map<String, InteractType> mapping = new TreeMap<String, InteractType>() {
{
put("ate", InteractType.ATE);
put("eaten by", InteractType.EATEN_BY);
put("parasite of", InteractType.PARASITE_OF);
}
};
String[] occurrences = StringUtils.split(str, ";");
Map<String, InteractType> assoc = new TreeMap<String, InteractType>();
for (String occurrence : occurrences) {
int index = StringUtils.indexOf(occurrence, ")");
if (index > 0) {
String association = StringUtils.substring(StringUtils.trim(StringUtils.substring(occurrence, 0, index)), 1);
String rest = StringUtils.substring(occurrence, index + 1);
InteractType interactType = mapping.get(association);
if (interactType != null) {
String trim = StringUtils.trim(rest);
int nsIndex = StringUtils.indexOf(trim, "http://arctos.database.museum/guid/");
String strip = nsIndex < 0 ? trim : StringUtils.substring(trim, nsIndex, trim.length());
String ns = StringUtils.replace(strip, "institutional catalog number ", "http://arctos.database.museum/guid/");
assoc.put(StringUtils.replace(ns, " ", ":"), interactType);
}
}
}
return assoc;
}
use of org.eol.globi.domain.InteractType in project eol-globi-data by jhpoelen.
the class StudyImporterForBrose method addInteractionForConsumer.
private void addInteractionForConsumer(LabeledCSVParser parser, Study localStudy, String predatorName) throws NodeFactoryException, StudyImporterException {
Location location = null;
String locationString = parser.getValueByLabel("Geographic location");
LatLng latLng = LOC_MAP.get(StringUtils.trim(locationString));
if (latLng == null) {
getLogger().warn(localStudy, "failed to find location for [" + locationString + "]");
} else {
location = nodeFactory.getOrCreateLocation(new LocationImpl(latLng.getLat(), latLng.getLng(), null, null));
String habitat = StringUtils.join(parser.getValueByLabel("General habitat"), " ", parser.getValueByLabel("Specific habitat"));
String habitatId = "BROSE:" + habitat.replaceAll("\\W", "_");
nodeFactory.getOrCreateEnvironments(location, habitatId, habitat);
}
Specimen consumer = nodeFactory.createSpecimen(localStudy, new TaxonImpl(predatorName, null));
consumer.caughtIn(location);
addLifeStage(parser, consumer, "Lifestage consumer");
String name = getName(parser, "Taxonomy resource", "Common name(s) resource");
if (StringUtils.isBlank(name) || StringUtils.length(name) < 2) {
String message = "found (near) empty prey name on line [" + parser.lastLineNumber() + "] + [" + name + "]";
LOG.warn(message);
getLogger().warn(localStudy, message);
} else {
Specimen resource = nodeFactory.createSpecimen(localStudy, new TaxonImpl(name, null));
resource.caughtIn(location);
addLifeStage(parser, resource, "Lifestage - resource");
String interactionType = parser.getValueByLabel("Type of feeding interaction");
Map<String, InteractType> typeMapping = new HashMap<String, InteractType>() {
{
put("predacious", InteractType.PREYS_UPON);
put("predator", InteractType.PREYS_UPON);
put("herbivorous", InteractType.ATE);
put("parasitoid", InteractType.PARASITE_OF);
put("parasitic", InteractType.PARASITE_OF);
put("bacterivorous", InteractType.ATE);
put("omnivore", InteractType.ATE);
put("detritivorous", InteractType.ATE);
put("pathogen", InteractType.PATHOGEN_OF);
}
};
InteractType interactType = typeMapping.get(interactionType);
if (interactType == null) {
throw new StudyImporterException("found unsupported interaction type [" + interactionType + "]");
}
consumer.interactsWith(resource, interactType);
}
}
use of org.eol.globi.domain.InteractType in project eol-globi-data by jhpoelen.
the class StudyImporterForSeltmann method importStudy.
@Override
public void importStudy() throws StudyImporterException {
final String archiveURL = DatasetUtil.getNamedResourceURI(getDataset(), "archive");
if (org.apache.commons.lang.StringUtils.isBlank(archiveURL)) {
throw new StudyImporterException("failed to import [" + getDataset().getNamespace() + "]: no [archiveURL] specified");
}
DB db = DBMaker.newMemoryDirectDB().compressionEnable().transactionDisable().make();
final HTreeMap<String, Map<String, String>> assocMap = db.createHashMap("assocMap").make();
try {
InputStream inputStream = DatasetUtil.getNamedResourceStream(getDataset(), "archive");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ZipEntry entry;
File assocTempFile = null;
File occTempFile = null;
while ((entry = zipInputStream.getNextEntry()) != null) {
if (entry.getName().matches("(^|(.*/))associatedTaxa.tsv$")) {
assocTempFile = FileUtils.saveToTmpFile(zipInputStream, entry);
} else if (entry.getName().matches("(^|(.*/))occurrences.tsv$")) {
occTempFile = FileUtils.saveToTmpFile(zipInputStream, entry);
} else {
IOUtils.copy(zipInputStream, new NullOutputStream());
}
}
IOUtils.closeQuietly(zipInputStream);
if (assocTempFile == null) {
throw new StudyImporterException("failed to find expected [associatedTaxa.tsv] resource");
}
if (occTempFile == null) {
throw new StudyImporterException("failed to find expected [occurrences.tsv] resource");
}
BufferedReader assocReader = FileUtils.getUncompressedBufferedReader(new FileInputStream(assocTempFile), CharsetConstant.UTF8);
LabeledCSVParser parser = CSVTSVUtil.createLabeledCSVParser(assocReader);
parser.changeDelimiter('\t');
while (parser.getLine() != null) {
Map<String, String> prop = new HashMap<String, String>();
addKeyValue(parser, prop, "dwc:coreid");
addKeyValue(parser, prop, "dwc:basisOfRecord");
addKeyValue(parser, prop, FIELD_IDIGBIO_RECORD_ID);
addKeyValue(parser, prop, FIELD_ASSOCIATED_GENUS);
addKeyValue(parser, prop, FIELD_ASSOCIATED_SPECIFIC_EPITHET);
addKeyValue(parser, prop, FIELD_ASSOCIATED_SCIENTIFIC_NAME);
addKeyValue(parser, prop, "dwc:basisOfRecord");
addKeyValue(parser, prop, "aec:associatedRelationshipTerm");
addKeyValue(parser, prop, "aec:associatedRelationshipURI");
addKeyValue(parser, prop, "aec:associatedLocationOnHost");
addKeyValue(parser, prop, "aec:associatedEmergenceVerbatimDate");
String coreId = parser.getValueByLabel("dwc:coreid");
if (StringUtils.isBlank(coreId)) {
LOG.warn("no coreid for line [" + parser.getLastLineNumber() + 1 + "]");
} else {
assocMap.put(coreId, prop);
}
}
LabeledCSVParser occurrence = CSVTSVUtil.createLabeledCSVParser(new FileInputStream(occTempFile));
occurrence.changeDelimiter('\t');
while (occurrence.getLine() != null) {
String references = occurrence.getValueByLabel("dcterms:references");
Study study = nodeFactory.getOrCreateStudy(new StudyImpl("seltmann" + references, CitationUtil.sourceCitationLastAccessed(this.getDataset(), references), null, references));
String recordId = occurrence.getValueByLabel(FIELD_IDIGBIO_RECORD_ID);
Map<String, String> assoc = assocMap.get(recordId);
if (assoc != null) {
String targetName = getTargetNameFromAssocMap(assoc);
String sourceName = occurrence.getValueByLabel("scientificName");
String eventDate = occurrence.getValueByLabel("eventDate");
Date date = null;
if (StringUtils.equals(eventDate, "0000-00-00")) {
getLogger().warn(study, "found suspicious event date [" + eventDate + "]" + getLineMsg(occurrence));
} else if (StringUtils.isBlank(eventDate)) {
getLogger().warn(study, "found suspicious event date [" + eventDate + "]" + getLineMsg(occurrence));
} else {
DateTimeFormatter fmtDateTime1 = DateTimeFormat.forPattern("yyyy-MM-dd").withZoneUTC();
String dateString = eventDate.split("/")[0];
try {
date = fmtDateTime1.parseDateTime(dateString).toDate();
} catch (IllegalArgumentException e) {
getLogger().warn(study, "invalid date [" + dateString + "] " + getLineMsg(occurrence));
}
}
if (StringUtils.isBlank(sourceName)) {
getLogger().warn(study, "found blank source taxon name" + getLineMsg(occurrence));
}
if (StringUtils.isBlank(targetName)) {
getLogger().warn(study, "found blank associated target taxon name" + getLineMsg(occurrence));
}
InteractType interactType = parseInteractType(occurrence, assoc);
if (interactType != null && StringUtils.isNotBlank(sourceName) && StringUtils.isNotBlank(targetName)) {
try {
createInteraction(occurrence, study, assoc, targetName, sourceName, date, interactType);
} catch (NodeFactoryException ex) {
String message = "failed to import interaction because of [" + ex.getMessage() + "]" + getLineMsg(occurrence);
LOG.warn(message);
getLogger().warn(study, message);
}
}
}
}
} catch (IOException | NodeFactoryException e) {
throw new StudyImporterException(e);
}
db.close();
}
use of org.eol.globi.domain.InteractType in project eol-globi-data by jhpoelen.
the class StudyImporterForSIAD method downloadAndImportResource.
private void downloadAndImportResource(String resource, String source) throws StudyImporterException {
try {
LabeledCSVParser labeledCSVParser = parserFactory.createParser(resource, "UTF-8");
labeledCSVParser.changeDelimiter('\t');
while (labeledCSVParser.getLine() != null) {
String name = labeledCSVParser.getValueByLabel("name");
String ref = labeledCSVParser.getValueByLabel("source");
String title = "SIAD-" + ref;
String citation = "ABRS 2009. Australian Faunal Directory. " + name + ". Australian Biological Resources StudyNode, Canberra. " + CitationUtil.createLastAccessedString(ref);
StudyImpl study1 = new StudyImpl(title, source, null, citation);
study1.setExternalId(ref);
Study study = nodeFactory.getOrCreateStudy(study1);
Specimen specimen = nodeFactory.createSpecimen(study, new TaxonImpl(name, null));
String hostName = labeledCSVParser.getValueByLabel("host name");
Specimen hostSpecimen = nodeFactory.createSpecimen(study, new TaxonImpl(hostName, null));
InteractType type = map.get(labeledCSVParser.getValueByLabel("interaction"));
specimen.interactsWith(hostSpecimen, type);
}
} catch (FileNotFoundException e) {
throw new StudyImporterException("failed to open tmp file", e);
} catch (NodeFactoryException e) {
throw new StudyImporterException("failed to map data", e);
} catch (IOException e) {
throw new StudyImporterException("failed to read resource [" + resource + "]", e);
}
}
Aggregations