Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions dataverse-persistence/src/main/resources/Bundle_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3137,11 +3137,9 @@ add.dataset.dialog.button.create=Add a dataset to the selected dataverse
add.dataset.dialog.login.redirect.header=Add dataset
add.dataset.dialog.login.redirect.info=You need to <a href="{0}">Sign In/Sign Up</a> to add a dataset.

geobox.invalid.empty=This field cannot be empty when other geobox field is filled.
geobox.invalid.longitude=The longitude must be a number between -180 and 180.
geobox.invalid.longitude.span=The longitude cannot span more than 180 degrees.
geobox.invalid.latitude=The latitude must be a number between -90 and 90.
geobox.invalid.latitude.relation=The north latitude must be greater or equal to the south latitude.
geobox.polygon.invalid.geo.point=Each line should have only two numbers
geobox.polygon.invalid.coordiantes.length=Coordinates should have 4 different points
geobox.polygon.invalid.coordiantes.rectangle=Coordinates should create axis-aligned rectangle
Expand Down
2 changes: 0 additions & 2 deletions dataverse-persistence/src/main/resources/Bundle_pl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3087,11 +3087,9 @@ add.dataset.dialog.button.create=Dodaj zbi\u00F3r danych do wybranej kolekcji
add.dataset.dialog.login.redirect.header=Dodaj zbi\u00F3r danych
add.dataset.dialog.login.redirect.info=Aby doda\u0107 zbi\u00F3r danych, musisz si\u0119 <a href="{0}">zalogowa\u0107/zarejestrowa\u0107</a>.

geobox.invalid.empty=To pole nie mo\u017Ce by\u0107 puste, je\u015Bli inne pole geograficznego prostok\u0105ta ograniczaj\u0105cego zosta\u0142o wype\u0142nione.
geobox.invalid.longitude=D\u0142ugo\u015B\u0107 geograficzna musi zawiera\u0107 si\u0119 mi\u0119dzy -180 a 180.
geobox.invalid.longitude.span=Zakres d\u0142ugo\u015Bci geograficznej nie mo\u017Ce przekracza\u0107 180 stopni.
geobox.invalid.latitude=Szeroko\u015B\u0107 geograficzna musi zawiera\u0107 si\u0119 mi\u0119dzy -90 a 90.
geobox.invalid.latitude.relation=Szeroko\u015B\u0107 p\u00F3\u0142nocna musi by\u0107 nie mniejsza od po\u0142udniowej.
geobox.polygon.invalid.geo.point=W ka\u017Cdej linii powinny by\u0107 dwie liczby.
geobox.polygon.invalid.coordiantes.length=Dane geograficzne powinny zawiera\u0107 4 punkty
geobox.polygon.invalid.coordiantes.rectangle=Dane geografincze powinny stworzy\u0107 prostok\u0105t wyr\u00F3wnany wzgl\u0119dem osi
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.harvard.iq.dataverse.search.advanced.field;

import edu.harvard.iq.dataverse.common.DatasetFieldConstant;
import edu.harvard.iq.dataverse.persistence.dataset.DatasetFieldType;
import edu.harvard.iq.dataverse.persistence.dataset.ValidatableField;
import edu.harvard.iq.dataverse.search.advanced.SearchFieldType;
Expand Down Expand Up @@ -45,6 +46,7 @@ public QueryPart getQueryPart() {
}
List<SearchField> children = parent.getChildren();
String coords = children.stream()
.filter(field -> DatasetFieldConstant.geographicCoordinates.equals(field.getName()))
.map(ValidatableField::getSingleValue)
.filter(StringUtils::isNotBlank)
.collect(Collectors.joining("|"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -934,9 +934,7 @@ private String addOrUpdateDataset(IndexableDataset indexableDataset) {
}
}
if (dsfType.getFieldType() == FieldType.GEOBOX) {
if (geoboxIndexUtil.isIndexable(dsf)) {
solrInputDocument.addField(solrFieldSearchable, geoboxIndexUtil.geoboxFieldToSolr(dsf));

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could geoboxIndexUtil.geoboxFieldToSolr also be removed?

There's also GeoboxValueValidator, which doesn't seem to be used anymore as well.

} else if (geoboxIndexUtil.isIndexablePolygon(dsf)) {
if (geoboxIndexUtil.isIndexablePolygon(dsf)) {
solrInputDocument.addField(solrFieldSearchable, geoboxIndexUtil.geoboxPolygonFieldToSolr(dsf));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import edu.harvard.iq.dataverse.common.DatasetFieldConstant;
import edu.harvard.iq.dataverse.persistence.dataset.DatasetField;
import edu.harvard.iq.dataverse.search.response.GeoPoint;
import edu.harvard.iq.dataverse.validation.field.validators.geobox.GeoboxComponentValidator;
import edu.harvard.iq.dataverse.validation.field.validators.geobox.GeoboxFields;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -13,40 +12,20 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.ArrayList;
import java.util.stream.Collectors;

import static edu.harvard.iq.dataverse.common.DatasetFieldConstant.geographicCoordinates;

public class GeoboxIndexUtil {
private static final Logger logger = LoggerFactory.getLogger(GeoboxIndexUtil.class);
private static final Set<String> COORD_FIELDS = Initializer.initializeCoordFields();

private RectangleToSolrConverter converter = new RectangleToSolrConverter();
private PolygonToSolrConverter polygonToSolrConverter = new PolygonToSolrConverter();
private GeoboxComponentValidator componentValidator = new GeoboxComponentValidator();

// -------------------- LOGIC --------------------

public List<String> geoboxFieldToSolr(DatasetField field) {
Map<String, String> values = new HashMap<>();
for (DatasetField subfield : field.getDatasetFieldsChildren()) {
String label = (String) subfield.getDatasetFieldType().getMetadata("geoboxCoord");
values.put(label, subfield.getValue());
}
Rectangle rectangle = new Rectangle(
values.get(GeoboxFields.X1.fieldType()),
values.get(GeoboxFields.Y1.fieldType()),
values.get(GeoboxFields.X2.fieldType()),
values.get(GeoboxFields.Y2.fieldType()));
return rectangle.cutIfNeeded().stream()
.map(converter::toSolrPolygon)
.collect(Collectors.toList());
}

public List<String> geoboxPolygonFieldToSolr(DatasetField field) {
Optional<DatasetField> polygonGeo = field.getDatasetFieldsChildren().stream()
.filter(f -> DatasetFieldConstant.geographicCoordinates.equals(f.getTypeName())).findFirst();
Expand All @@ -67,31 +46,9 @@ public List<String> geoboxPolygonFieldToSolr(DatasetField field) {
return new ArrayList<>(Collections.singletonList(polygonToSolrConverter.toSolrPolygon(geoPoints)));
}

public boolean isIndexable(DatasetField field) {
if (field == null) {
return false;
}
Set<String> availableCoords = field.getDatasetFieldsChildren().stream()
.map(f -> (String) f.getDatasetFieldType().getMetadata("geoboxCoord"))
.filter(Objects::nonNull)
.collect(Collectors.toSet());
return availableCoords.containsAll(COORD_FIELDS)
&& componentValidator.validate(field, Collections.emptyMap(), Collections.emptyMap()).isOk();
}

public boolean isIndexablePolygon(DatasetField field) {
return field.getDatasetFieldsChildren()
.stream()
.anyMatch(f -> geographicCoordinates.equals(f.getTypeName()));
}

// -------------------- INNER CLASSES --------------------

private static class Initializer {
public static Set<String> initializeCoordFields() {
return Arrays.stream(GeoboxFields.values())
.map(GeoboxFields::fieldType)
.collect(Collectors.toSet());
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,7 @@ public FieldValidationResult validate(ValidatableField field, Map<String, Object
if (field.hasNonUniqueValue()) {
return FieldValidationResult.invalid(field, BundleUtil.getStringFromBundle("validation.nonunique"));
}
List<? extends ValidatableField> allGeoboxFields = field.getParent()
.map(ValidatableField::getChildren)
.getOrElse(Collections.emptyList());

return allGeoboxFields.stream().allMatch(f -> StringUtils.isBlank(f.getSingleValue()))
|| StringUtils.isNotBlank(field.getSingleValue())
? FieldValidationResult.ok()
: FieldValidationResult.invalid(field, BundleUtil.getStringFromBundle("geobox.invalid.empty"));
return FieldValidationResult.ok();
}
}

This file was deleted.

This file was deleted.

14 changes: 3 additions & 11 deletions dataverse-webapp/src/main/resources/geospatial_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,10 @@ datasetfieldtype.city.withParent.title=Geographic Coverage - City
datasetfieldtype.otherGeographicCoverage.title=Other
datasetfieldtype.otherGeographicCoverage.withParent.title=Geographic Coverage - Other
datasetfieldtype.geographicUnit.title=Geographic Unit
datasetfieldtype.geographicBoundingBox.title=Geographic Bounding Box
datasetfieldtype.westLongitude.title=West Longitude
datasetfieldtype.westLongitude.withParent.title=Geographic Bounding Box - West Longitude
datasetfieldtype.eastLongitude.title=East Longitude
datasetfieldtype.eastLongitude.withParent.title=Geographic Bounding Box - East Longitude
datasetfieldtype.northLongitude.title=North Latitude
datasetfieldtype.northLongitude.withParent.title=Geographic Bounding Box - North Latitude
datasetfieldtype.southLongitude.title=South Latitude
datasetfieldtype.southLongitude.withParent.title=Geographic Bounding Box - South Latitude
datasetfieldtype.geographicBoundingBox.title=Geographic Location
datasetfieldtype.geographicCoverage.description=Information on the geographic coverage of the data. Includes the total geographic scope of the data.
datasetfieldtype.geographicCoordinates.title=Geographic Coordinates
datasetfieldtype.geographicCoordinates.withParent.title=Geographic Area - Geographic Coordinates
datasetfieldtype.geographicCoordinates.title=Coordinates(EPSG:4326/WGS84)
datasetfieldtype.geographicCoordinates.withParent.title=Geographic Location - Coordinates(EPSG:4326/WGS84)
datasetfieldtype.geographicCoordinates.description=Geographic coordinates to mark dataset location
datasetfieldtype.country.description=The country or nation that the Dataset is about.
datasetfieldtype.state.description=The state or province that the Dataset is about. Use GeoNames for correct spelling and avoid abbreviations.
Expand Down
14 changes: 3 additions & 11 deletions dataverse-webapp/src/main/resources/geospatial_pl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,10 @@ datasetfieldtype.city.withParent.title=Zasi\u0119g geograficzny - Miasto
datasetfieldtype.otherGeographicCoverage.title=Inne
datasetfieldtype.otherGeographicCoverage.withParent.title=Zasi\u0119g geograficzny - Inne
datasetfieldtype.geographicUnit.title=Jednostka geograficzna
datasetfieldtype.geographicBoundingBox.title=Geograficzny prostok\u0105t ograniczaj\u0105cy
datasetfieldtype.westLongitude.title=D\u0142ugo\u015B\u0107 geograficzna zachodnia
datasetfieldtype.westLongitude.withParent.title=Geograficzny prostok\u0105t ograniczaj\u0105cy - D\u0142ugo\u015B\u0107 geograficzna zachodnia
datasetfieldtype.eastLongitude.title=D\u0142ugo\u015B\u0107 geograficzna wschodnia
datasetfieldtype.eastLongitude.withParent.title=Geograficzny prostok\u0105t ograniczaj\u0105cy - D\u0142ugo\u015B\u0107 geograficzna wschodnia
datasetfieldtype.northLongitude.title=Szeroko\u015B\u0107 geograficzna p\u00F3\u0142nocna
datasetfieldtype.northLongitude.withParent.title=Geograficzny prostok\u0105t ograniczaj\u0105cy - Szeroko\u015B\u0107 geograficzna p\u00F3\u0142nocna
datasetfieldtype.southLongitude.title=Szeroko\u015B\u0107 geograficzna po\u0142udniowa
datasetfieldtype.southLongitude.withParent.title=Geograficzny prostok\u0105t ograniczaj\u0105cy - Szeroko\u015B\u0107 geograficzna po\u0142udniowa
datasetfieldtype.geographicBoundingBox.title=Lokalizacja geograficzna
datasetfieldtype.geographicCoverage.description=Informacje dotycz\u0105ce geograficznego zasi\u0119gu danych, w tym ca\u0142ego obszaru geograficznego, do kt\u00F3rego dane te si\u0119 odnosz\u0105.
datasetfieldtype.geographicCoordinates.title=Wsp\u00f3\u0142rz\u0119dne geograficzne
datasetfieldtype.geographicCoordinates.withParent.title=Obszar geograficzny - Wsp\u00f3\u0142rz\u0119dne geograficzne
datasetfieldtype.geographicCoordinates.title=Wsp\u00f3\u0142rz\u0119dne(EPSG:4326/WGS84)
datasetfieldtype.geographicCoordinates.withParent.title=Lokalizacja geograficzna - Wsp\u00f3\u0142rz\u0119dne(EPSG:4326/WGS84)
datasetfieldtype.geographicCoordinates.description=Wsp\u00f3\u0142rz\u0119dne geograficzne do oznaczenia lokalizacji zbioru danych
datasetfieldtype.country.description=Kraj lub pa\u0144stwo, kt\u00F3rego dotyczny zbi\u00F3r danych.
datasetfieldtype.state.description=Stan lub okr\u0119g administracyjny, kt\u00F3rego dotyczy zbi\u00F3r danych. Skorzystaj z bazy GeoNames, by sprawdzi\u0107 poprawn\u0105 pisowni\u0119 i unikaj skr\u00F3t\u00F3w.
Expand Down
7 changes: 5 additions & 2 deletions dataverse-webapp/src/main/webapp/resources/js/dvjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ function initDvJS() {
[-85, -180], // Southwest corner (near Antarctica)
[85, 180] // Northeast corner (near the Arctic)
];
const INIT_MAP_OPTS = {
const READ_ONLY_INIT_MAP_OPTS = {
center: [52.1145028, 19.4235611],
zoom: 4,
minZoom: 2,
}
const INIT_MAP_OPTS = {
...READ_ONLY_INIT_MAP_OPTS,
editable: true,
bounds: bounds,
maxBounds: bounds, // Restrict view to these bounds
Expand Down Expand Up @@ -49,7 +52,7 @@ function initDvJS() {

// Draw map with geobox rectangle (must be called only when the target div is visible!)
function initializeMapInMetadataView(key, data) {
data.leafMap = L.map(key);
data.leafMap = L.map(key, READ_ONLY_INIT_MAP_OPTS);
let leafMap = data.leafMap;
leafMap.invalidateSize();

Expand Down
Loading