Skip to content
Snippets Groups Projects
Commit d328bf21 authored by Lene Wasskog's avatar Lene Wasskog
Browse files

fix: Ensure locations are correctly masked for observation time series

parent 44a5821e
No related branches found
No related tags found
No related merge requests found
......@@ -18,22 +18,22 @@
package no.nibio.vips.logic.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import no.nibio.vips.logic.util.GISEntityUtil;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.Date;
import java.util.*;
@Entity
@Table(name = "observation_time_series")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "ObservationTimeSeries.findAll", query = "SELECT ots FROM ObservationTimeSeries ots"),
@NamedQuery(name = "ObservationTimeSeries.findByObservationTimeSeriesId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.observationTimeSeriesId = :id"),
@NamedQuery(name = "ObservationTimeSeries.findByObservationTimeSeriesIds", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.observationTimeSeriesId IN :observationTimeSeriesIds"),
@NamedQuery(name = "ObservationTimeSeries.findByOrganizationId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.userId IN(SELECT v.userId FROM VipsLogicUser v WHERE v.organizationId.organizationId = :organizationId OR v.organizationId.organizationId IN(SELECT o.organizationId FROM Organization o WHERE o.parentOrganizationId.organizationId = :organizationId))"),
@NamedQuery(name = "ObservationTimeSeries.findByUserId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.userId IN(:userId)")
@NamedQuery(name = "ObservationTimeSeries.findAll", query = "SELECT ots FROM ObservationTimeSeries ots"),
@NamedQuery(name = "ObservationTimeSeries.findByObservationTimeSeriesId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.observationTimeSeriesId = :id"),
@NamedQuery(name = "ObservationTimeSeries.findByObservationTimeSeriesIds", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.observationTimeSeriesId IN :observationTimeSeriesIds"),
@NamedQuery(name = "ObservationTimeSeries.findByUserId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.userId IN(:userId)")
})
public class ObservationTimeSeries implements Serializable {
......@@ -53,10 +53,14 @@ public class ObservationTimeSeries implements Serializable {
private VipsLogicUser lastModifiedByUser; // Transient
private Integer locationPointOfInterestId;
private PointOfInterest locationPointOfInterest;
private List<Gis> geoInfoList;
private Boolean locationIsPrivate;
private PolygonService polygonService;
private GISEntityUtil GISEntityUtil;
public ObservationTimeSeries() {
this.GISEntityUtil = new GISEntityUtil();
}
public ObservationTimeSeries(String source) {
......@@ -324,6 +328,17 @@ public class ObservationTimeSeries implements Serializable {
this.locationPointOfInterest = locationPointOfInterest;
}
public void setGeoInfoList(List<Gis> geoInfoList) {
this.geoInfoList = geoInfoList;
}
@Transient
public String getGeoInfo() {
Map<String, Object> properties = new HashMap<>();
properties.put("observationTimeSeriesId", this.getObservationTimeSeriesId());
return this.GISEntityUtil.getGeoJSONFromGis(this.geoInfoList, properties);
}
/**
* @return the locationIsPrivate
*/
......@@ -373,24 +388,25 @@ public class ObservationTimeSeries implements Serializable {
@Override
public String toString() {
return "ObservationTimeSeries{" +
"observationTimeSeriesId=" + observationTimeSeriesId +
", cropOrganism=" + cropOrganism +
", organism=" + organism +
", year=" + year +
", name='" + name + '\'' +
", description='" + description + '\'' +
", created=" + created +
", userId=" + userId +
", user=" + user +
", source=" + source +
", lastModified=" + lastModified +
", lastModifiedBy=" + lastModifiedBy +
", lastModifiedByUser=" + lastModifiedByUser +
", locationPointOfInterestId=" + locationPointOfInterestId +
", locationPointOfInterest=" + locationPointOfInterest +
", locationIsPrivate=" + locationIsPrivate +
", polygonService=" + polygonService +
'}';
"observationTimeSeriesId=" + observationTimeSeriesId +
", cropOrganism=" + cropOrganism +
", organism=" + organism +
", year=" + year +
", name='" + name + '\'' +
", description='" + description + '\'' +
", created=" + created +
", userId=" + userId +
", user=" + user +
", source=" + source +
", lastModified=" + lastModified +
", lastModifiedBy=" + lastModifiedBy +
", lastModifiedByUser=" + lastModifiedByUser +
", locationPointOfInterestId=" + locationPointOfInterestId +
", locationPointOfInterest=" + locationPointOfInterest +
", geoInfoList=" + geoInfoList +
", locationIsPrivate=" + locationIsPrivate +
", polygonService=" + polygonService +
'}';
}
public int compareTo(ObservationTimeSeries other) {
......
......@@ -33,9 +33,9 @@ import java.util.stream.Collectors;
@Path("rest/observationtimeseries")
public class ObservationTimeSeriesService {
private final static Logger LOGGER = LoggerFactory.getLogger(ObservationTimeSeriesService.class);
public static final String APPLICATION_JSON = "application/json;charset=UTF-8";
private final static Logger LOGGER = LoggerFactory.getLogger(ObservationTimeSeriesService.class);
private static final String DELETED = "deleted";
private static final String OBSERVATION_TIME_SERIES_ID = "observationTimeSeriesId";
private static final String ORGANISM_ID = "organismId";
......@@ -62,7 +62,6 @@ public class ObservationTimeSeriesService {
@Produces(APPLICATION_JSON)
@TypeHint(ObservationTimeSeries[].class)
public Response getObservationsTimeSeriesForUser(@QueryParam("observationTimeSeriesIds") String otsIds) {
LOGGER.info("In getObservationsTimeSeriesForUser observationTimeSeriesIds=" + otsIds);
try {
VipsLogicUser user = userBean.getUserFromUUID(httpServletRequest);
if (user != null) {
......@@ -112,9 +111,15 @@ public class ObservationTimeSeriesService {
boolean requesterNotValidUser = requester == null;
boolean requesterRegularUser = requester != null && !requester.isSuperUser() && !requester.isOrganizationAdmin();
boolean requesterNotCreator = requester != null && !ots.getUserId().equals(requester.getUserId());
if (requesterNotValidUser || requesterRegularUser) {
// Hide completely for all users except creator, super and orgadmin
if (ots.getLocationIsPrivate() && (requesterNotValidUser || requesterNotCreator)) {
ots.setGeoInfoList(new ArrayList<>());
}
// Mask for all users except creator, super and orgadmin
if (!(ots.getLocationIsPrivate() && (requesterNotValidUser || requesterNotCreator)) && ots.getPolygonService() != null) {
else if (ots.getPolygonService() != null) {
observationTimeSeriesBean.enrichObservationTimeSeriesWithPointOfInterest(ots);
this.maskLocation(ots.getPolygonService(), ots);
}
}
......@@ -141,16 +146,17 @@ public class ObservationTimeSeriesService {
// We need to loop through the observations and find corresponding featurecollections and replace those
Map<Integer, Feature> indexedPolygons = new HashMap<>();
for (Feature feature : response.getFeatureCollection().getFeatures()) {
indexedPolygons.put((Integer) feature.getProperties().get(OBSERVATION_TIME_SERIES_ID), feature);
indexedPolygons.put((Integer) feature.getProperties().get("id"), feature);
}
GISEntityUtil gisEntityUtil = new GISEntityUtil();
for (Map mapping : response.getMapping()) {
Integer observationTimeSeriesId = Integer.valueOf((String) mapping.get(OBSERVATION_TIME_SERIES_ID));
Integer observationTimeSeriesId = Integer.valueOf((String) mapping.get("id"));
if (observationTimeSeries.getObservationTimeSeriesId().equals(observationTimeSeriesId)) {
Integer borderId = (Integer) mapping.get("borderid");
Gis polygon = gisEntityUtil.getGisFromFeature(indexedPolygons.get(borderId));
List<Gis> gis = new ArrayList<>();
gis.add(polygon);
observationTimeSeries.setGeoInfoList(gis);
observationTimeSeries.setLocationPointOfInterest(null);
observationTimeSeries.setLocationPointOfInterestId(null);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment