Skip to content

Commit

Permalink
Fixes to BrAPI services
Browse files Browse the repository at this point in the history
  • Loading branch information
BESOMBES Gabriel committed Dec 8, 2023
1 parent b2c8ef0 commit 0a052e5
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,8 @@ public Response getObservationUnits(
ontologyDAO,
moveEventDAO,
geospatialDAO,
germplasmDAO);
germplasmDAO,
sparql);
} catch (Exception e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@


import com.mongodb.client.model.geojson.Geometry;
import org.apache.commons.lang3.StringUtils;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.io.geojson.GeoJsonReader;
import org.opensilex.core.organisation.dal.OrganizationDAO;
Expand All @@ -16,7 +17,9 @@
import org.opensilex.core.organisation.dal.facility.FacilityDAO;
import org.opensilex.core.organisation.dal.facility.FacilityModel;
import org.opensilex.core.organisation.dal.site.SiteAddressModel;
import org.opensilex.core.organisation.dal.site.SiteModel;
import org.opensilex.security.account.dal.AccountModel;
import org.opensilex.server.exceptions.BadRequestException;
import org.opensilex.server.rest.validation.model.OpenSilexLocale;

import java.util.*;
Expand Down Expand Up @@ -176,7 +179,8 @@ public BrAPIv1LocationDTO extractFromModel(FacilityModel model, FacilityDAO faci
} catch (Exception e) {
throw new RuntimeException(e);
}
if (parentModel.getSites().size() == 1) {
List<SiteAddressModel> sitesAddresses = parentModel.getSites().stream().map(SiteModel::getAddress).collect(Collectors.toList());
if (sitesAddresses.stream().anyMatch(Objects::nonNull) && sitesAddresses.size() == 1) {
return parentModel;
} else {
return null;
Expand All @@ -185,7 +189,19 @@ public BrAPIv1LocationDTO extractFromModel(FacilityModel model, FacilityDAO faci
if (parentsWithOneAddress.size()==1) { // If exactly one organisation on this level with exactly one site
OrganizationModel institute = organizationDAO.get(parentsWithOneAddress.get(0).getUri(), currentAccount);
SiteAddressModel parentAddress = institute.getSites().get(0).getAddress();
this.setInstituteAddress(parentAddress.toString());
this.setInstituteAddress(
StringUtils.join(
parentAddress.getStreetAddress(),
"\n",
parentAddress.getLocality(),
"\n",
parentAddress.getRegion(),
"\n",
parentAddress.getPostalCode(),
"\n",
parentAddress.getCountryName()
)
);
this.setInstituteName(institute.getName());
String countryName = parentAddress.getCountryName();
this.setCountryName(countryName);
Expand All @@ -207,7 +223,11 @@ public BrAPIv1LocationDTO extractFromModel(FacilityModel model, FacilityDAO faci
if (model.getAddress() != null && !model.getAddress().toString().isEmpty()){
String countryName = model.getAddress().getCountryName();
this.setCountryName(countryName);
this.setCountryCode(new OpenSilexLocale(countryName).getISO3Country());
try {
this.setCountryCode(new OpenSilexLocale(countryName).getISO3Country());
} catch (BadRequestException e) {
this.setCountryCode(null);
}
}

return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package org.opensilex.brapi.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.io.geojson.GeoJsonReader;
import org.opensilex.brapi.responses.BrAPIv1AccessionWarning;
Expand All @@ -24,11 +25,13 @@
import org.opensilex.core.germplasm.dal.GermplasmModel;
import org.opensilex.core.ontology.Oeso;
import org.opensilex.core.organisation.dal.facility.FacilityDAO;
import org.opensilex.core.organisation.dal.facility.FacilityModel;
import org.opensilex.core.scientificObject.dal.ScientificObjectModel;
import org.opensilex.security.account.dal.AccountModel;
import org.opensilex.sparql.model.SPARQLModelRelation;
import org.opensilex.sparql.model.SPARQLResourceModel;
import org.opensilex.sparql.ontology.dal.OntologyDAO;
import org.opensilex.sparql.service.SPARQLService;
import org.opensilex.utils.ListWithPagination;

import java.net.URI;
Expand Down Expand Up @@ -315,7 +318,8 @@ public static BrAPIv1ObservationUnitDTO fromModel(
OntologyDAO ontologyDAO,
MoveEventDAO moveEventDAO,
GeospatialDAO geospatialDAO,
GermplasmDAO germplasmDAO
GermplasmDAO germplasmDAO,
SPARQLService sparql
) throws Exception {
BrAPIv1ObservationUnitDTO observationUnit = new BrAPIv1ObservationUnitDTO();

Expand Down Expand Up @@ -378,6 +382,7 @@ public static BrAPIv1ObservationUnitDTO fromModel(
observationUnit.setPositionCoordinateYType(PositionType.LATITUDE);

GeospatialModel objectGeometryModel = geospatialDAO.getGeometryByURI(model.getUri(), experimentModel.getUri());
//if the Object has a geometry take its centroid coordinates as long/lat
if (objectGeometryModel != null && objectGeometryModel.getGeometry() != null && !objectGeometryModel.getGeometry().toString().isEmpty()) {
org.locationtech.jts.geom.Geometry objectJtsGeometry = new GeoJsonReader().read(objectGeometryModel.getGeometry().toJson());

Expand All @@ -387,35 +392,48 @@ public static BrAPIv1ObservationUnitDTO fromModel(
observationUnit.setPositionCoordinateX(Double.toString(centroid.getX()));
observationUnit.setPositionCoordinateY(Double.toString(centroid.getY()));
}
} else if (moveEventDAO.countMoves(model.getUri()) == 1){
} else if (moveEventDAO.countMoves(model.getUri()) >= 1){
MoveModel moveModel = moveEventDAO.getLastMoveEvent(model.getUri());
PositionModel movePosition = moveEventDAO.getPosition(model.getUri(), moveModel.getUri());

if (!movePosition.getCoordinates().toString().isEmpty()){
org.locationtech.jts.geom.Geometry moveJtsGeometry = new GeoJsonReader().read(movePosition.getCoordinates().toJson());

if (!moveJtsGeometry.isEmpty()){

if (Objects.nonNull(movePosition)){
//if the Object has a move with a geometry take its centroid coordinates as long/lat
if (Objects.nonNull(movePosition.getCoordinates())) {
Geometry moveJtsGeometry = new GeoJsonReader().read(movePosition.getCoordinates().toJson());
Point centroid = moveJtsGeometry.getCentroid();
observationUnit.setPositionCoordinateX(Double.toString(centroid.getX()));
observationUnit.setPositionCoordinateY(Double.toString(centroid.getY()));
} else if (Objects.nonNull(movePosition.getX()) || Objects.nonNull(movePosition.getY())) {
//if the Object has a move with a position take its X/Y coordinates as grid coordinates
if (Objects.nonNull(movePosition.getX())) {
observationUnit.setPositionCoordinateX(movePosition.getX());
}
if (Objects.nonNull(movePosition.getY())) {
observationUnit.setPositionCoordinateY(movePosition.getY());
}
observationUnit.setPositionCoordinateXType(PositionType.GRID_ROW);
observationUnit.setPositionCoordinateYType(PositionType.GRID_COL);
}
} else if (!movePosition.getX().isEmpty() | movePosition.getY().isEmpty()) {
if (!movePosition.getX().isEmpty()) {
observationUnit.setPositionCoordinateX(movePosition.getX());
}
if (!movePosition.getY().isEmpty()) {
observationUnit.setPositionCoordinateY(movePosition.getY());
} else if (Objects.nonNull(moveModel.getTo())) {
//if the Object has a move with a destination facility take the centroid of that facility's geometry
FacilityModel destinationFacility = moveModel.getTo();
GeospatialModel destinationFacilityGeometryModel = geospatialDAO.getGeometryByURI(
destinationFacility.getUri(),
sparql.getDefaultGraphURI(FacilityModel.class)
);
Geometry facilityJtsGeometry = new GeoJsonReader().read(destinationFacilityGeometryModel.getGeometry().toJson());
if (Objects.nonNull(facilityJtsGeometry)) {
Point centroid = facilityJtsGeometry.getCentroid();
observationUnit.setPositionCoordinateX(Double.toString(centroid.getX()));
observationUnit.setPositionCoordinateY(Double.toString(centroid.getY()));
}
observationUnit.setPositionCoordinateXType(PositionType.GRID_ROW);
observationUnit.setPositionCoordinateYType(PositionType.GRID_COL);
}
}

observationUnit.setStudyName(experimentModel.getName());
observationUnit.setStudyDbId(experimentModel.getUri().toString());

if (model.getFactorLevels().size()>0){
if (Objects.nonNull(model.getFactorLevels()) && model.getFactorLevels().size()>0){
List<BrAPIv1ObservationUnitTreatmentDTO> unitTreatments = new ArrayList<>();
List<FactorModel> experimentFactors = experimentModel.getFactors();
List<URI> objectFactorLevels = model.getFactorLevels().stream().map(SPARQLResourceModel::getUri).collect(Collectors.toList());
Expand Down

0 comments on commit 0a052e5

Please sign in to comment.