diff --git a/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java b/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java index 24315611140e1243edc12a0d0376aa0835566a21..04db0628f62c6fae7e840310a594a927eca58672 100644 --- a/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java +++ b/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java @@ -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) { diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java b/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java index 600ba45032fefc4916db8fad82cfaf7528b2a297..e18d4d5333d34da98f695329e3c269f0aa84408c 100644 --- a/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java @@ -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); }