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
8 changes: 8 additions & 0 deletions conf/solr/7.3.1/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,18 @@ RUN cp -r server/solr/configsets/_default server/solr/rorSuggestions \
&& mv solrconfig.xml server/solr/rorSuggestions/conf/ \
&& echo "Configured rorSuggestions"

ADD geonames/schema.xml ./
ADD geonames/solrconfig.xml ./
RUN cp -r server/solr/configsets/_default server/solr/geonames \
&& mv schema.xml server/solr/geonames/conf/ \
&& mv solrconfig.xml server/solr/geonames/conf/ \
&& echo "Configured geonames"

USER solr

RUN ./bin/solr start \
Comment thread
diasf marked this conversation as resolved.
&& ./bin/solr create_core -c collection1 -d server/solr/collection1/conf \
&& ./bin/solr create_core -c rorSuggestions -d server/solr/rorSuggestions/conf \
&& ./bin/solr create_core -c geonames -d server/solr/geonames/conf \
&& echo "Done creating collections"

985 changes: 985 additions & 0 deletions conf/solr/7.3.1/geonames/schema.xml

Large diffs are not rendered by default.

1,238 changes: 1,238 additions & 0 deletions conf/solr/7.3.1/geonames/solrconfig.xml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dev
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export DATAVERSE_SOURCE_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P
(
cd "${DATAVERSE_SOURCE_DIR}"

export BUILD_VERSION="dv-1.0"
export BUILD_VERSION="dv-1.1"
export DATAVERSE_CONFIG_FILES=(
"conf/glassfish/dataverse.properties"
"conf/glassfish/default.config"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,14 @@ public boolean isGeospatial() {
return this.datasetFieldType.isGeospatial();
}

public boolean isGeoName() {
return this.datasetFieldType.isGeoName();
}

public boolean isPeriodo() {
return this.datasetFieldType.isPeriodo();
}

public boolean isVisibleThroughAnonymizedUrl() {
return this.datasetFieldType.isVisibleThroughAnonymizedUrl();
}
Expand Down Expand Up @@ -484,12 +492,11 @@ private String getUnsanitizedDisplayValue() {

private String getFieldDisplayValue(String value, DatasetFieldType fieldType) {

if (fieldType.getFieldType().equals(FieldType.PERIODO)) {
if (fieldType.isPeriodo()) {
return "<a href=\"" + this.fieldValue + "\" target=\"_blank\">" + this.fieldValue +
"</a><br>" + PeriodoDictionary.getByUrl(this.fieldValue).get()
.getDetails("<b>", "</b>", "<br>");
}

String retVal = "";
if (!StringUtils.isBlank(value) && !DatasetField.NA_VALUE.equals(value)) {
String format = fieldType.getDisplayFormat();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import static javax.persistence.CascadeType.PERSIST;
import static javax.persistence.CascadeType.REMOVE;
import static javax.persistence.GenerationType.IDENTITY;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

import java.io.Serializable;
import java.util.ArrayList;
Expand Down Expand Up @@ -42,6 +43,9 @@

import org.apache.commons.lang3.StringUtils;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import edu.harvard.iq.dataverse.common.BundleUtil;
import edu.harvard.iq.dataverse.persistence.JpaEntity;
import edu.harvard.iq.dataverse.persistence.config.JsonMapConverter;
Expand Down Expand Up @@ -332,6 +336,17 @@ public InputRendererType getInputRendererType() {
public String getInputRendererOptions() {
return inputRendererOptions;
}

public JsonObject getInputRendererOptionsAsJson() {
try {
return isNotBlank(this.inputRendererOptions)
? new JsonParser().parse(this.inputRendererOptions).getAsJsonObject()
: new JsonObject();
} catch (final Exception e) {
throw new RuntimeException(
"Unable to parse input renderer options for field " + this.fieldType, e);
}
}

public String getValidation() {
return validation;
Expand Down Expand Up @@ -454,6 +469,14 @@ public boolean isGeospatial() {
public boolean isPeriodo() {
return this.fieldType.isPeriodo();
}

public boolean isGeoBox() {
return this.fieldType.isGeoBox();
}

public boolean isGeoName() {
return this.fieldType.isGeoName();
}

@Override
public int compareTo(DatasetFieldType o) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* The set of possible metatypes of the field. Used for validation and layout.
*/
public enum FieldType {
TEXT, TEXTBOX, DATE, EMAIL, URL, FLOAT, INT, CHECKBOX, NONE, GEOBOX, PERIODO;
TEXT, TEXTBOX, DATE, EMAIL, URL, FLOAT, INT, CHECKBOX, NONE, GEOBOX, PERIODO, GEONAME;

public boolean sanitizeHtml() {
return this.equals(URL) | this.equals(TEXTBOX);
Expand Down Expand Up @@ -34,4 +34,12 @@ public boolean isDate() {
public boolean isPeriodo() {
return this.equals(PERIODO);
}

public boolean isGeoBox() {
return this.equals(GEOBOX);
}

public boolean isGeoName() {
return this.equals(GEONAME);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,6 @@ public enum InputRendererType {
* values defined in renderer options
*/
HIDDEN_VOCABULARY,
PERIODO;
PERIODO,
GEONAME;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3161,4 +3161,11 @@ periodo.location.desc=Area (description)
periodo.watermark=Period identifier (eg. p05gbpkdc7d) or name.
periodo.present=Present times
periodo.from=From
periodo.to=To
periodo.to=To

#geonames
geoname.id=Identifier
geoname.name=Name
geoname.hierarchy=Hierarchy
geoname.altnames=Alternative names
geonames.featurecode=Feature code
7 changes: 7 additions & 0 deletions fairchive-persistence/src/main/resources/Bundle_pl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3113,3 +3113,10 @@ periodo.watermark=Identyfikator okresu (eg. p05gbpkdc7d) lub nazwa.
periodo.present=Czasy obecne
periodo.from=Od
periodo.to=Do

#geonames
geoname.id=Identyfikator
geoname.name=Nazwa
geoname.hierarchy=Hierarchia
geoname.altnames=Nazwy alternatywne
geonames.featurecode=Rodzaj
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
<!--<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>-->

</properties>
</persistence-unit>
<!-- the persistence unit below is no longer necessary; needs to be removed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package edu.harvard.iq.dataverse.api;

import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
import static javax.ws.rs.core.Response.Status.FORBIDDEN;

import java.io.InputStream;

import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

import edu.harvard.iq.dataverse.persistence.user.AuthenticatedUser;
import edu.harvard.iq.dataverse.search.geonames.GeoNameIndexingService;

@Stateless
@Path("geonames")
public class GeoNameApi extends AbstractApiBean {

private GeoNameIndexingService indexingService;

public GeoNameApi() {
}

@Inject
public GeoNameApi(final GeoNameIndexingService indexingService) {
this.indexingService = indexingService;
}

@POST
@Path("/")
@Consumes(TEXT_PLAIN)
@Produces(APPLICATION_JSON)
public Response upload(final InputStream in) throws Exception {
try {
findSuperuserOrDie();
this.indexingService.importNames(in);
return ok("Imported");
} catch (final AbstractApiBean.WrappedResponse wrappedResponse) {
return wrappedResponse.getResponse();
}
}

@DELETE
@Path("/")
@Produces(APPLICATION_JSON)
public Response clear() throws Exception {
try {
findSuperuserOrDie();
this.indexingService.clear();
return ok("Cleared");
} catch (final AbstractApiBean.WrappedResponse wrappedResponse) {
return wrappedResponse.getResponse();
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package edu.harvard.iq.dataverse.dataset.metadata.inputRenderer;

import static edu.harvard.iq.dataverse.persistence.dataset.InputRendererType.GEONAME;

import java.util.List;
import java.util.Optional;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.event.ValueChangeEvent;

import edu.harvard.iq.dataverse.persistence.dataset.DatasetField;
import edu.harvard.iq.dataverse.persistence.dataset.InputRendererType;
import edu.harvard.iq.dataverse.search.geonames.GeoName;
import edu.harvard.iq.dataverse.search.geonames.GeoNameDataFinder;

public class GeoNameRenderer implements InputFieldRenderer {

private Optional<GeoName> selectedGeoName = Optional.empty();
private final GeoNameDataFinder geoNames;
private final CapturingConverter converter = new CapturingConverter();

public GeoNameRenderer(final GeoNameDataFinder geoNames) {
this.geoNames = geoNames;
}

// -------------------- GETTERS --------------------

@Override
public InputRendererType getType() {
return GEONAME;
}

@Override
public boolean renderInTwoColumns() {
return true;
}

@Override
public boolean isHidden() {
return false;
}

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

/**
* Workaround for p:autocomplete in order to use function with 2 arguments in
* 'completeMethod'. Since value is bound to {@link DatasetField} and binded
* only after executing 'completeMethod' the query will not work since it will
* take previously binded value, so we are taking it from {@link FacesContext}
* directly.
*/
public List<GeoName> processSuggestionQuery(final DatasetField datasetField) {
final String query = SuggestionAutocompleteHelper
.processSuggestionQuery("geoname")
.orElseThrow(() -> new IllegalStateException(
"Autocomplete query was not found."));
List<GeoName> result = this.geoNames.find(query, 50);
return result;
}

public boolean displayDetails() {
return this.selectedGeoName.isPresent();
}

public String getDetails() {
return this.selectedGeoName.map(gn -> gn.getDetails("<b>", "</b>", "<br/>"))
.orElse("");
}

public Converter getConverter() {
return this.converter;
}

public void processValueChange(final ValueChangeEvent event) {
if (event.getNewValue() != null) {
this.selectedGeoName = this.geoNames
.findById(event.getNewValue().toString());
}
}

private class CapturingConverter implements Converter {

@Override
public Object getAsObject(final FacesContext context,
final UIComponent component,
final String value) {
return value;
}

@Override
public String getAsString(final FacesContext context,
final UIComponent component,
final Object value) {
selectedGeoName = geoNames.findById(value.toString());
return value.toString();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package edu.harvard.iq.dataverse.dataset.metadata.inputRenderer;

import javax.ejb.Stateless;
import javax.inject.Inject;

import com.google.gson.JsonObject;

import edu.harvard.iq.dataverse.persistence.dataset.DatasetFieldType;
import edu.harvard.iq.dataverse.persistence.dataset.InputRendererType;
import edu.harvard.iq.dataverse.search.geonames.GeoNameDataFinder;

@Stateless
public class GeoNameRendererFactory implements InputFieldRendererFactory<GeoNameRenderer> {

private final GeoNameDataFinder geoNames;

@Inject
public GeoNameRendererFactory(final GeoNameDataFinder geoNames) {
this.geoNames = geoNames;
}

@Override
public InputRendererType isFactoryForType() {
return InputRendererType.GEONAME;
}

@Override
public GeoNameRenderer createRenderer(DatasetFieldType fieldType, JsonObject jsonOptions) {
return new GeoNameRenderer(this.geoNames);
}

}
Loading