use of org.eol.globi.domain.LocationImpl in project eol-globi-data by jhpoelen.
the class StudyImporterForBlewettTest method importLines.
@Test
public void importLines() throws StudyImporterException, NodeFactoryException {
String predatorPreyMapping = "\"Collection #\",\"Sp#\",\"Standard Length\",\"ID\",\"Far duoraum\",\"Cal sapidus\",\"Unid fish\",\"Anchoa spp\",\"Mug gyrans\",\"Bai chrysoura\",\"Portunus spp\",\"Bivalves\",\"Portunidae\",\"Lag rhomboides\",\"Xanthidae\",\"Palaemonidae\",\"Eucinostomus spp\",\"Mugil spp\",\"Alpheidae\",\"Atherinidae\",\"Syn foetens\",\"Ort chrysoptera\",\"Snails\",\"Euc gula\",\"Cynoscion spp\",\"Cyp. Variegatus\",\"Fun majalis\",\"Poe latipinna\",\"Unid crab\",\"Har jaguana\",\"Arm mierii\",\"Fun grandis\",\"Mic gulosus\",\"Ari felis\",\"Clupeidae\",\"Fundulus spp\",\"Diapterus/Eugerres spp\",\"Isopods\",\"Cyn nebulosus\",\"Opi oglinum\",\"Flo carpio\",\"Luc parva\",\"Uca spp\",\"Majidae\",\"Mug cephalus\",\"Squ empusa\",\"Opi robinsi\",\"Ariidae\",\"Sci ocellatus\",\"Unid shrimp\",\"Uca thayeri\",\"Grapsidae\",\"Lei xanthurus\",\"Elo saurus\",\"Brevoortia spp\"\n" + "\"CHD01101502\",1,549,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + "\"CHD01102504\",1,548,\"E\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + "\"CHD01102504\",2,550,,3,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + "\"CHM000152\",1,580,\"E\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n" + "\"CHM000152\",2,556,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
String dateLocationString = "\"Collection #\",\"Longitude\",\"Latitude\",\"Time\",\"Date\",\"Temperature\",\"Salinity\"\n" + "\"CHD01101502\",-82.1625,26.72,10:55:00,1-Mar-00,22.4,33.8\n" + "\"CHD01102504\",-82.1625,26.72,10:55:00,1-Mar-00,22.4,33.8\n" + "\"CHM000151\",-82.1625,26.72,10:55:00,1-Mar-00,22.4,33.8\n" + "\"CHM000152\",-82.103833,26.651833,12:40:00,1-Mar-00,24.8,30.3\n" + "\"CHM000153\",-82.087333,26.644833,13:40:00,1-Mar-00,25.1,30.1\n" + "\"CHM000154\",-82.083167,26.671167,14:40:00,1-Mar-00,26,30.4\n" + "\"CHM000175\",-82.197833,26.688167,10:00:00,8-Mar-00,22.2,35.05\n" + "\"CHM000176\",-82.191333,26.667333,11:00:00,8-Mar-00,22.7,35.25";
final TestParserFactory preyPredatorFactory = new TestParserFactory(predatorPreyMapping);
final TestParserFactory dateLocationFactory = new TestParserFactory(dateLocationString);
ParserFactory testFactory = new ParserFactory() {
@Override
public LabeledCSVParser createParser(String studyResource, String characterEncoding) throws IOException {
LabeledCSVParser parser = null;
if (studyResource.contains("abundance")) {
parser = preyPredatorFactory.createParser(studyResource, characterEncoding);
} else {
parser = dateLocationFactory.createParser(studyResource, characterEncoding);
}
return parser;
}
};
StudyImporter importer = new StudyImporterTestFactory(testFactory, nodeFactory).instantiateImporter((Class) StudyImporterForBlewett.class);
importStudy(importer);
Study study = getStudySingleton(getGraphDb());
Iterable<Relationship> collectedRels = NodeUtil.getSpecimens(study);
Relationship collectedRel = collectedRels.iterator().next();
Date unixEpochProperty = nodeFactory.getUnixEpochProperty(new SpecimenNode(collectedRel.getEndNode()));
assertThat(unixEpochProperty, is(not(nullValue())));
assertThat(dateToString(unixEpochProperty), is("2000-03-01T10:55:00.000-06:00"));
Node predatorNode = collectedRel.getEndNode();
assertThat((String) predatorNode.getProperty(SpecimenConstant.LIFE_STAGE_LABEL), is("post-juvenile adult stage"));
assertThat((String) predatorNode.getProperty(SpecimenConstant.LIFE_STAGE_ID), is("UBERON:0000113"));
assertThat((Double) predatorNode.getProperty(SpecimenConstant.LENGTH_IN_MM), is(549.0));
Node predatorTaxonNode = predatorNode.getRelationships(NodeUtil.asNeo4j(RelTypes.CLASSIFIED_AS), Direction.OUTGOING).iterator().next().getEndNode();
assertThat((String) predatorTaxonNode.getProperty(PropertyAndValueDictionary.NAME), is("Centropomus undecimalis"));
Iterable<Relationship> ate = predatorNode.getRelationships(NodeUtil.asNeo4j(InteractType.ATE), Direction.OUTGOING);
Node preyNode = ate.iterator().next().getEndNode();
assertThat(preyNode, is(not(nullValue())));
Node taxonNode = preyNode.getRelationships(NodeUtil.asNeo4j(RelTypes.CLASSIFIED_AS), Direction.OUTGOING).iterator().next().getEndNode();
assertThat(taxonNode, is(not(nullValue())));
assertThat((String) taxonNode.getProperty(PropertyAndValueDictionary.NAME), is("Lag rhomboides"));
Iterator<Relationship> i = collectedRels.iterator();
i.next();
collectedRel = i.next();
predatorNode = collectedRel.getEndNode();
assertThat((Double) predatorNode.getProperty(SpecimenConstant.LENGTH_IN_MM), is(548.0));
ate = predatorNode.getRelationships(NodeUtil.asNeo4j(InteractType.ATE), Direction.OUTGOING);
assertThat(ate.iterator().hasNext(), is(false));
Location location = nodeFactory.findLocation(new LocationImpl(26.651833, -82.103833, 0.0, null));
assertThat(location, is(not(nullValue())));
Iterable<Relationship> specimenCaughtHere = NodeUtil.getSpecimenCaughtHere(location);
Iterator<Relationship> iterator = specimenCaughtHere.iterator();
assertThat(iterator.hasNext(), is(true));
iterator.next();
assertThat(iterator.hasNext(), is(true));
iterator.next();
assertThat(iterator.hasNext(), is(true));
iterator.next();
assertThat(iterator.hasNext(), is(false));
}
use of org.eol.globi.domain.LocationImpl in project eol-globi-data by jhpoelen.
the class InteractionListenerImpl method getOrCreateLocation.
private Location getOrCreateLocation(Study study, Map<String, String> link) throws IOException, NodeFactoryException {
LatLng centroid = null;
String[] latitudes = { DECIMAL_LATITUDE, StudyImporterForMetaTable.LATITUDE };
String latitude = getFirstValueForTerms(link, latitudes);
String[] longitudes = { DECIMAL_LONGITUDE, StudyImporterForMetaTable.LONGITUDE };
String longitude = getFirstValueForTerms(link, longitudes);
if (StringUtils.isNotBlank(latitude) && StringUtils.isNotBlank(longitude)) {
try {
centroid = LocationUtil.parseLatLng(latitude, longitude);
} catch (InvalidLocationException e) {
getLogger().warn(study, "found invalid location: [" + e.getMessage() + "]");
}
}
String localityId = link.get(LOCALITY_ID);
String localityName = link.get(LOCALITY_NAME);
if (centroid == null) {
if (StringUtils.isNotBlank(localityId)) {
centroid = getGeoNamesService().findLatLng(localityId);
}
}
LocationImpl location = null;
if (centroid != null) {
location = new LocationImpl(centroid.getLat(), centroid.getLng(), null, null);
if (StringUtils.isNotBlank(localityId)) {
location.setLocalityId(localityId);
}
if (StringUtils.isNotBlank(localityName)) {
location.setLocality(localityName);
}
}
return location == null ? null : nodeFactory.getOrCreateLocation(location);
}
use of org.eol.globi.domain.LocationImpl in project eol-globi-data by jhpoelen.
the class StudyImporterForPlanque method addInteractionForPredator.
private void addInteractionForPredator(LabeledCSVParser parser, Study localStudy, String predatorName) throws NodeFactoryException, StudyImporterException {
Specimen predator = nodeFactory.createSpecimen(localStudy, new TaxonImpl(normalizeName(predatorName), null));
// from http://www.geonames.org/630674/barents-sea.html
Location location = nodeFactory.getOrCreateLocation(new LocationImpl(74.0, 36.0, null, null));
predator.caughtIn(location);
String preyName = parser.getValueByLabel("PREY");
if (StringUtils.isBlank(preyName)) {
getLogger().warn(localStudy, "found empty prey name on line [" + parser.lastLineNumber() + "]");
} else {
Specimen prey = nodeFactory.createSpecimen(localStudy, new TaxonImpl(normalizeName(preyName), null));
prey.caughtIn(location);
predator.ate(prey);
}
}
use of org.eol.globi.domain.LocationImpl in project eol-globi-data by jhpoelen.
the class StudyImporterForRaymond method locationFromLocale.
private Location locationFromLocale(LabeledCSVParser dietParser, Study study) throws NodeFactoryException {
Location loc = null;
LatLng centroid;
String location = dietParser.getValueByLabel("LOCATION");
if (StringUtils.isNotBlank(location)) {
String cleanedLocationString = location.replaceAll("\\.$", "");
getLocations().add(cleanedLocationString);
try {
centroid = getGeoNamesService().findLatLng(cleanedLocationString);
if (centroid == null) {
getLogger().warn(study, "missing lat/lng bounding box [" + dietParser.lastLineNumber() + "] and attempted to using location [" + location + "] failed.");
} else {
loc = nodeFactory.getOrCreateLocation(new LocationImpl(centroid.getLat(), centroid.getLng(), null, null));
}
} catch (IOException e) {
getLogger().warn(study, "failed to lookup point for location [" + location + "] on line [" + dietParser.lastLineNumber() + "]");
}
}
return loc;
}
use of org.eol.globi.domain.LocationImpl in project eol-globi-data by jhpoelen.
the class StudyImporterForRaymond method parseLocation.
private Location parseLocation(LabeledCSVParser dietParser, Study study) throws StudyImporterException {
/**
* left, top ------- right, top
* | |
* | |
* left, bottom -- right, bottom
*/
String westString = dietParser.getValueByLabel(WEST);
String eastString = dietParser.getValueByLabel(EAST);
String northString = dietParser.getValueByLabel(NORTH);
String southString = dietParser.getValueByLabel(SOUTH);
Location loc = null;
if (StringUtils.isBlank(westString) || StringUtils.isBlank(eastString) || StringUtils.isBlank(northString) || StringUtils.isBlank(southString)) {
try {
loc = locationFromLocale(dietParser, study);
} catch (NodeFactoryException ex) {
throw new StudyImporterException("found invalid location on line [" + dietParser.lastLineNumber() + "]", ex);
}
} else {
double left = Double.parseDouble(westString);
double top = Double.parseDouble(northString);
double right = Double.parseDouble(eastString);
double bottom = Double.parseDouble(southString);
LatLng centroid = calculateCentroidOfBBox(left, top, right, bottom);
try {
loc = nodeFactory.getOrCreateLocation(new LocationImpl(centroid.getLat(), centroid.getLng(), null, null));
} catch (NodeFactoryException ex) {
String locationString = StringUtils.join(Arrays.asList(westString, northString, eastString, southString), ",");
LOG.warn("found invalid locations [" + locationString + "] on line [" + (dietParser.lastLineNumber() + 1) + "]: " + ex.getMessage());
}
}
return loc;
}
Aggregations