use of org.eol.globi.util.RelationshipListener in project eol-globi-data by jhpoelen.
the class DatasetImporterForLifeWatchGreeceTest method readAssociations.
@Test
public void readAssociations() throws StudyImporterException {
List<StudyNode> studies = NodeUtil.findAllStudies(getGraphDb());
assertThat(studies.size(), is(0));
ParserFactoryLocal parserFactory = new ParserFactoryLocal();
DatasetImporterForLifeWatchGreece importer = new DatasetImporterForLifeWatchGreece(parserFactory, nodeFactory);
importer.setDataset(new DatasetLocal(inStream -> inStream));
importStudy(importer);
studies = NodeUtil.findAllStudies(getGraphDb());
assertThat(studies.size(), is(146));
Set<String> taxa = new HashSet<String>();
final AtomicInteger totalPredatorPreyRelationships = new AtomicInteger(0);
for (StudyNode study : studies) {
assertThat(study.getCitation(), is(notNullValue()));
assertThat(study.getTitle(), containsString("greece"));
RelationshipListener handler = relationship -> {
addTaxonNameForSpecimenNode(taxa, relationship.getEndNode());
Specimen predatorSpecimen = new SpecimenNode(relationship.getEndNode());
Iterable<Relationship> prey = NodeUtil.getStomachContents(predatorSpecimen);
for (Relationship ateRel : prey) {
totalPredatorPreyRelationships.incrementAndGet();
addTaxonNameForSpecimenNode(taxa, ateRel.getEndNode());
}
};
NodeUtil.handleCollectedRelationships(new NodeTypeDirection(study.getUnderlyingNode()), handler);
}
assertThat(taxa.contains("Aves"), is(true));
assertThat(totalPredatorPreyRelationships.get(), is(793));
}
use of org.eol.globi.util.RelationshipListener in project eol-globi-data by jhpoelen.
the class CmdGenerateReport method countInteractionsAndTaxa.
private void countInteractionsAndTaxa(Set<Long> ids, Counter interactionCounter, Set<Long> idsNoMatch, Node studyNode) {
RelationshipListener handler = specimen -> {
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());
}
}
};
NodeUtil.handleCollectedRelationshipsNoTx(new NodeTypeDirection(studyNode), handler);
}
use of org.eol.globi.util.RelationshipListener in project eol-globi-data by jhpoelen.
the class InteractionImporterTest method importBlankCitation.
@Test
public void importBlankCitation() throws StudyImporterException {
final InteractionListener listener = new InteractionImporter(nodeFactory, (GeoNamesService) null, null);
final TreeMap<String, String> link = new TreeMap<String, String>();
link.put(SOURCE_OCCURRENCE_ID, "123");
link.put(SOURCE_CATALOG_NUMBER, "catalogNumber123");
link.put(SOURCE_COLLECTION_CODE, "collectionCode123");
link.put(SOURCE_COLLECTION_ID, "collectionId123");
link.put(SOURCE_INSTITUTION_CODE, "institutionCode123");
link.put(TARGET_OCCURRENCE_ID, "456");
link.put(TARGET_CATALOG_NUMBER, "targetCatalogNumber123");
link.put(TARGET_COLLECTION_CODE, "targetCollectionCode123");
link.put(TARGET_COLLECTION_ID, "targetCollectionId123");
link.put(TARGET_INSTITUTION_CODE, "targetInstitutionCode123");
link.put(SOURCE_TAXON_NAME, "donald");
link.put(SOURCE_TAXON_ID, "duck");
link.put(SOURCE_BODY_PART_ID, "bla:123");
link.put(SOURCE_BODY_PART_NAME, "snout");
link.put(SOURCE_LIFE_STAGE_ID, "some:stage");
link.put(SOURCE_LIFE_STAGE_NAME, "stage");
link.put(TARGET_TAXON_NAME, "mini");
link.put(TARGET_TAXON_ID, "mouse");
link.put(TARGET_BODY_PART_ID, "bla:345");
link.put(TARGET_BODY_PART_NAME, "tail");
link.put(DatasetImporterForMetaTable.EVENT_DATE, "20160404T21:31:40Z");
link.put(DatasetImporterForMetaTable.LATITUDE, "12.1");
link.put(DatasetImporterForMetaTable.LONGITUDE, "13.2");
link.put(DatasetImporterForTSV.INTERACTION_TYPE_ID, "http://purl.obolibrary.org/obo/RO_0002470");
link.put(REFERENCE_ID, "123");
link.put(DATASET_CITATION, "some source ref");
link.put(REFERENCE_CITATION, "");
link.put(REFERENCE_DOI, "doi:1234");
listener.on(link);
final AtomicBoolean foundPair = new AtomicBoolean(false);
RelationshipListener relationshipListener = relationship -> {
final SpecimenNode predator = new SpecimenNode(relationship.getEndNode());
for (Relationship stomachRel : NodeUtil.getStomachContents(predator)) {
final SpecimenNode prey = new SpecimenNode(stomachRel.getEndNode());
final TaxonNode preyTaxon = getOrigTaxon(prey);
final TaxonNode predTaxon = getOrigTaxon(predator);
assertThat(preyTaxon.getName(), is("mini"));
assertThat(preyTaxon.getExternalId(), is("mouse"));
assertThat(predTaxon.getName(), is("donald"));
assertThat(predTaxon.getExternalId(), is("duck"));
assertLocation(predator.getSampleLocation());
assertLocation(prey.getSampleLocation());
assertThat(predator.getExternalId(), is("123"));
assertThat(prey.getExternalId(), is("456"));
assertThat(predator.getLifeStage().getId(), is("some:stage"));
assertThat(predator.getLifeStage().getName(), is("stage"));
assertThat(predator.getProperty(OCCURRENCE_ID), is("123"));
assertThat(predator.getProperty(CATALOG_NUMBER), is("catalogNumber123"));
assertThat(predator.getProperty(COLLECTION_CODE), is("collectionCode123"));
assertThat(predator.getProperty(COLLECTION_ID), is("collectionId123"));
assertThat(predator.getProperty(INSTITUTION_CODE), is("institutionCode123"));
assertThat(prey.getProperty(OCCURRENCE_ID), is("456"));
assertThat(prey.getProperty(CATALOG_NUMBER), is("targetCatalogNumber123"));
assertThat(prey.getProperty(COLLECTION_CODE), is("targetCollectionCode123"));
assertThat(prey.getProperty(COLLECTION_ID), is("targetCollectionId123"));
assertThat(prey.getProperty(INSTITUTION_CODE), is("targetInstitutionCode123"));
foundPair.set(true);
assertThat(relationship.getProperty(SpecimenConstant.EVENT_DATE), is(notNullValue()));
List<SpecimenNode> specimens = Arrays.asList(predator, prey);
for (SpecimenNode specimen : specimens) {
assertThat(specimen.getBodyPart().getId(), is(notNullValue()));
assertThat(specimen.getBodyPart().getName(), is(notNullValue()));
}
}
};
handleRelations(relationshipListener, RelTypes.COLLECTED);
assertThat(foundPair.get(), is(true));
}
use of org.eol.globi.util.RelationshipListener in project eol-globi-data by jhpoelen.
the class InteractionImporterTest method importWithTaxonHierarchy.
@Test
public void importWithTaxonHierarchy() throws StudyImporterException {
final InteractionListener listener = getAssertingInteractionImporter();
final TreeMap<String, String> link = new TreeMap<>();
link.put(SOURCE_TAXON_NAME, "Donald duck");
link.put(SOURCE_TAXON_RANK, "species");
link.put(SOURCE_TAXON_PATH, "Aves | Donald | Donald duck");
link.put(SOURCE_TAXON_PATH_IDS, "AvesId | DonaldId | DonaldId duckId");
link.put(SOURCE_TAXON_PATH_NAMES, "class | genus | species");
link.put(SOURCE_TAXON_SPECIFIC_EPITHET, "duck");
link.put(DatasetImporterForTSV.INTERACTION_TYPE_ID, InteractType.ATE.getIRI());
link.put(TARGET_TAXON_NAME, "mini");
link.put(TARGET_TAXON_RANK, "species");
link.put(TARGET_TAXON_PATH_IDS, "miniId");
link.put(DATASET_CITATION, "some source ref");
link.put(REFERENCE_ID, "123");
link.put(REFERENCE_CITATION, "");
listener.on(link);
AtomicInteger foundSpecimen = new AtomicInteger(0);
RelationshipListener someListener = relationship -> {
final SpecimenNode someSpecimen = new SpecimenNode(relationship.getEndNode());
assertTrue(someSpecimen.getUnderlyingNode().hasRelationship(Direction.INCOMING, NodeUtil.asNeo4j(RelTypes.COLLECTED)));
assertTrue(someSpecimen.getUnderlyingNode().hasRelationship(NodeUtil.asNeo4j(RelTypes.ORIGINALLY_DESCRIBED_AS)));
Node taxonNode = someSpecimen.getUnderlyingNode().getSingleRelationship(NodeUtil.asNeo4j(RelTypes.ORIGINALLY_DESCRIBED_AS), Direction.OUTGOING).getEndNode();
TaxonNode taxon = new TaxonNode(taxonNode);
if (someSpecimen.getUnderlyingNode().hasRelationship(Direction.OUTGOING, NodeUtil.asNeo4j(InteractType.ATE))) {
assertThat(taxon.getPath(), is("Aves | Donald | Donald duck"));
assertThat(taxon.getPathNames(), is("class | genus | species"));
assertThat(taxon.getRank(), is("species"));
assertThat(taxon.getPathIds(), is("AvesId | DonaldId | DonaldId duckId"));
foundSpecimen.incrementAndGet();
}
};
handleRelations(someListener, RelTypes.COLLECTED);
assertThat(foundSpecimen.get(), is(1));
}
use of org.eol.globi.util.RelationshipListener in project eol-globi-data by jhpoelen.
the class DatasetImporterForWrastTest method createAndPopulateStudyFromLavacaBay.
@Test
public void createAndPopulateStudyFromLavacaBay() throws StudyImporterException {
String csvString = "\"Month\",\"Day\",\"Year\",\"Region\",\"Season\",\"Habitat\",\"Site\",\"Family\",\"Predator Species\",\"TL (mm)\",\"Prey Item Species\",\"Prey item\",\"Number\",\"Condition Index\",\"Volume\",\"Percent Content\",\"Prey Item Trophic Level\",\"Notes\",\"Call #\"\n";
csvString += "7,24,2001,\"Lower\",\"Fall\",\"Marsh\",1,\"Sciaenidae\",\"Sciaenops ocellatus\",420,\"Acrididae spp. \",\"Acrididae \",1,\"III\",0.4,3.2520325203,2.5,,1\n";
csvString += "7,25,2001,\"Lower\",\"Spring\",\"Non-Veg \",1,\"Ariidae\",\"Arius felis\",176,\"Aegathoa oculata \",\"Aegathoa oculata\",4,\"I\",0.01,3.3333333333,2.1,,2\n";
csvString += "7,26,2001,\"Upper\",\"Spring\",\"Reef\",2,\"Depth\",\"Missing depth\",176,\"Aegathoa oculata \",\"Aegathoa oculata\",4,\"I\",0.01,3.3333333333,2.1,,2\n";
Map<String, String> contentMap = new TreeMap<>();
String locationString = "\"Location\",\"Latitude\",\"Longitude\",,\"Region\",\"Habitat\",\"Site\"\n" + "\"LM1\",28.595267,-96.477033,,\"Lower\",\"Marsh edge\",1\n" + "\"LSG1\",28.596233,-96.476483,,\"Lower\",\"Marsh edge\",1\n" + "\"LM2\",28.593150,-96.474633,,\"Lower\",\"Marsh edge\",2\n" + "\"LSG2\",28.594833,-96.473967,,\"Lower\",\"Marsh edge\",2\n" + "\"LNV1A\",28.608417,-96.475517,,\"Lower\",\"Non-Veg \",1\n" + "\"LNV1B\",28.607217,-96.474500,,\"Lower\",\"Non-Veg \",1\n" + "\"LNV2A\",28.592400,-96.483033,,\"Lower\",\"Non-Veg \",2\n" + "\"LNV2B\",28.590883,-96.484133,,\"Lower\",\"Non-Veg \",2\n" + "\"UR2B\",28.656483,-96.597217,,\"Upper\",\"Reef\",2";
String envString = "\"Date\",\"Season\",\"Upper/Lower\",\"Habitat\",\"Site\",\"Air Temp (ºC)\",\"Wind Chill (ºC)\",\"Relative Humidity (%)\",\"Heat Index (ºC)\",\"Dew Point (ºC)\",\"Max Wind intensity (mph)\",\"Ave Wind intensity (mph)\",\"Wind Direction\",\"Cloud Cover (%)\",\"Rain?\",\"Depth (m)\",\"Temp (ºC) Surface\",\"Temp (ºC) Bottom\",\"Mean Temp Surface/Bottom\",\"pH Surface\",\"pH Bottom\",\"Mean pH Surface/Bottom\",\"DO (mg/L) Surface\",\"DO (mg/L) Bottom\",\"Mean DO Surface/Bottom\",\"Sal (o/oo) Surface\",\"Sal (o/oo) Bottom\",\"Mean Sal Surface/Bottom\",\"Secchi (m)\"\n" + "7/24/2006,\"Summer\",\"L\",\"R\",1,\"81.3 (F)\",\"81.5 (F)\",71.8,\"86.2 (F)\",\"70.6 (F)\",8.5,8.1,\"SE\",75,\"Yes\",1.9,30.79,30.34,30.565,8.11,8.13,8.12,5.16,4.8,4.98,22.8,23.07,22.935,0.4\n" + "7/24/2006,\"Summer\",\"L\",\"R\",2,\"81.3 (F)\",\"81.5 (F)\",71.8,\"86.2 (F)\",\"70.6 (F)\",8.5,8.1,\"SE\",75,\"Yes\",2.1,31.07,30.14,30.605,8.11,8.1,8.105,5.14,4.64,4.89,23.37,23.84,23.605,0.48\n" + "10/26/2006,\"Fall\",\"L\",\"M\",1,26.8,26.5,78,30,22.4,17.9,15,\"S \",95,\"No\",0.8,25.57,,25.57,8.29,,8.29,8.32,,8.32,21.26,,21.26,\"Bottom\"\n" + "10/26/2006,\"Fall\",\"L\",\"M\",2,26.8,26.5,78,30,22.4,17.9,15,\"S \",95,\"No\",0.4,25.84,,25.84,8.32,,8.32,8.21,,8.21,21.47,,21.47,\"Bottom\"\n" + "10/26/2006,\"Fall\",\"L\",\"SG\",1,26.8,26.5,78,30,22.4,17.9,15,\"S \",95,\"No\",0.8,25.57,,25.57,8.29,,8.29,8.32,,8.32,21.26,,21.26,\"Bottom\"\n" + "4/27/2007,\"Spring\",\"L\",\"R\",1,22.4,22.3,75,23.1,18.1,10.4,9.1,\"NW\",98,\"No\",1.6,23.43,23.39,23.41,,,,7.31,7.09,7.2,14.64,14.64,14.64,0.32\n" + "4/27/2007,\"Spring\",\"L\",\"R\",2,22.4,22.3,75,23.1,18.1,10.4,9.1,\"NW\",98,\"No\",2,23.77,23.77,23.77,,,,7.01,6.82,6.915,15.04,15.04,15.04,0.38\n" + "4/27/2007,\"Spring\",\"L\",\"NV\",1,22.4,22.3,75,23.1,18.1,10.4,9.1,\"NW\",98,\"No\",2,23.85,23.85,23.85,,,,6.96,6.81,6.885,14.65,14.65,14.65,0.48\n" + "4/27/2007,\"Spring\",\"L\",\"NV\",2,22.4,22.3,75,23.1,18.1,10.4,9.1,\"NW\",98,\"No\",1.8,23.78,23.78,23.78,,,,6.87,6.65,6.76,15.11,15.18,15.145,0.45";
contentMap.put(DatasetImporterForWrast.LAVACA_BAY_LOCATIONS.toString(), locationString);
contentMap.put(DatasetImporterForWrast.LAVACA_BAY_DATA_SOURCE.toString(), csvString);
contentMap.put(DatasetImporterForWrast.LAVACA_BAY_ENVIRONMENTAL.toString(), envString);
DatasetImporterForWrast importer = new DatasetImporterForWrast(new TestParserFactory(contentMap), nodeFactory);
importStudy(importer);
assertThat(getSpecimenCount(getStudySingleton(getGraphDb())), is(5));
assertNotNull(taxonIndex.findTaxonByName("Sciaenops ocellatus"));
assertNotNull(taxonIndex.findTaxonByName("Arius felis"));
assertNotNull(taxonIndex.findTaxonByName("Aegathoa oculata"));
assertNotNull(nodeFactory.findSeason("spring"));
assertNotNull(nodeFactory.findSeason("fall"));
AtomicReference<StudyNode> foundStudyRef = new AtomicReference<>();
NodeUtil.findStudies(getGraphDb(), new NodeListener() {
@Override
public void on(Node node) {
foundStudyRef.set(new StudyNode(node));
}
});
StudyNode foundStudy = foundStudyRef.get();
assertNotNull(foundStudy);
assertThat(foundStudy.getTitle(), is("Wrast 2008"));
RelationshipListener handler = relationship -> {
Date unixEpochProperty = null;
try {
unixEpochProperty = nodeFactory.getUnixEpochProperty(new SpecimenNode(relationship.getEndNode()));
} catch (NodeFactoryException e) {
fail(e.getMessage());
}
SimpleDateFormat simpleDateFormat = DatasetImporterForWrast.getSimpleDateFormat();
Date endDate = null;
try {
endDate = simpleDateFormat.parse("7/27/2001");
} catch (ParseException e) {
fail(e.getMessage());
}
Date startDate = null;
try {
startDate = simpleDateFormat.parse("7/23/2001");
} catch (ParseException e) {
fail(e.getMessage());
}
assertThat(unixEpochProperty.before(endDate), is(true));
assertThat(unixEpochProperty.after(startDate), is(true));
Specimen specimen = new SpecimenNode(relationship.getEndNode());
for (Relationship ignored : NodeUtil.getStomachContents(specimen)) {
TaxonNode taxon = new TaxonNode(relationship.getEndNode().getSingleRelationship(NodeUtil.asNeo4j(RelTypes.CLASSIFIED_AS), Direction.OUTGOING).getEndNode());
String scientificName = taxon.getName();
if ("Sciaenops ocellatus".equals(scientificName)) {
Location location = specimen.getSampleLocation();
assertThat(location, is(not(nullValue())));
assertThat(location.getLatitude(), is((28.595267 + 28.596233) / 2.0));
assertThat(location.getLongitude(), is((-96.477033 - 96.476483) / 2.0));
assertThat(location.getAltitude(), is(-0.8));
Iterable<Relationship> stomachContents = NodeUtil.getStomachContents(specimen);
int count = 0;
for (Relationship containsRel : stomachContents) {
Node endNode = containsRel.getEndNode().getSingleRelationship(NodeUtil.asNeo4j(RelTypes.CLASSIFIED_AS), Direction.OUTGOING).getEndNode();
Object name = endNode.getProperty("name");
String name1 = (String) name;
assertThat(name1.replaceAll("\\W", ""), is("Acrididae"));
count++;
}
assertEquals(1, count);
Season season = specimen.getSeason();
assertEquals("fall", season.getTitle());
assertEquals(420.0d, specimen.getLengthInMm(), 0.01);
} else if ("Arius felis".equals(scientificName)) {
Location location = specimen.getSampleLocation();
assertThat(location, is(not(nullValue())));
assertThat(location.getLatitude(), is((28.608417 + 28.607217) / 2.0));
assertThat(location.getLongitude(), is((-96.475517 - 96.474500) / 2.0));
assertThat(location.getAltitude(), is(-2.0d));
Iterable<Relationship> stomachContents = NodeUtil.getStomachContents(specimen);
int count = 0;
for (Relationship containsRel : stomachContents) {
Object name = containsRel.getEndNode().getSingleRelationship(NodeUtil.asNeo4j(RelTypes.CLASSIFIED_AS), Direction.OUTGOING).getEndNode().getProperty("name");
assertEquals("Aegathoa oculata", name);
count++;
}
assertEquals(2, count);
Season season = specimen.getSeason();
assertEquals("spring", season.getTitle());
assertEquals(176.0d, specimen.getLengthInMm(), 0.01);
} else if ("Missing depth".equals(scientificName)) {
Location location = specimen.getSampleLocation();
assertThat(location, is(not(nullValue())));
assertThat(location.getAltitude(), is(nullValue()));
} else {
fail("unexpected scientificName of predator [" + scientificName + "]");
}
}
};
NodeUtil.handleCollectedRelationships(new NodeTypeDirection(getStudySingleton(getGraphDb()).getUnderlyingNode()), handler);
}
Aggregations