Skip to content

Commit

Permalink
#6300 Add more detail to dataset search results
Browse files Browse the repository at this point in the history
  • Loading branch information
sekmiller committed Dec 5, 2019
1 parent 3245eee commit 96b810d
Show file tree
Hide file tree
Showing 2 changed files with 156 additions and 1 deletion.
58 changes: 58 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java
Original file line number Diff line number Diff line change
Expand Up @@ -1130,6 +1130,62 @@ public List<String> getKeywords() {
return getCompoundChildFieldValues(DatasetFieldConstant.keyword, DatasetFieldConstant.keywordValue);
}

public List<String> getRelatedMaterial() {
List<String> relMaterial = new ArrayList<>();
for (DatasetField dsf : this.getDatasetFields()) {
if (dsf.getDatasetFieldType().getName().equals(DatasetFieldConstant.relatedMaterial)) {
relMaterial.addAll(dsf.getValues());
}
}
return relMaterial;
}

public List<String> getDataSource() {
List<String> dataSources = new ArrayList<>();
for (DatasetField dsf : this.getDatasetFields()) {
if (dsf.getDatasetFieldType().getName().equals(DatasetFieldConstant.dataSources)) {
dataSources.addAll(dsf.getValues());
}
}
return dataSources;
}

public List<String[]> getGeographicCoverage() {
List<String[]> geoCoverages = new ArrayList<>();

for (DatasetField dsf : this.getDatasetFields()) {
if (dsf.getDatasetFieldType().getName().equals(DatasetFieldConstant.geographicCoverage)) {
for (DatasetFieldCompoundValue geoCoverage : dsf.getDatasetFieldCompoundValues()) {
String country = null;
String state = null;
String city = null;
String other = null;
String[] coverageItem = null;
for (DatasetField subField : geoCoverage.getChildDatasetFields()) {
if (subField.getDatasetFieldType().getName().equals(DatasetFieldConstant.country)) {
country = subField.getDisplayValue();
}
if (subField.getDatasetFieldType().getName().equals(DatasetFieldConstant.state)) {
state = subField.getDisplayValue();
}
if (subField.getDatasetFieldType().getName().equals(DatasetFieldConstant.city)) {
city = subField.getDisplayValue();
}
if (subField.getDatasetFieldType().getName().equals(DatasetFieldConstant.otherGeographicCoverage)) {
other = subField.getDisplayValue();
}

coverageItem = new String[]{country, state, city, other};
}
geoCoverages.add(coverageItem);
}

}
}
return geoCoverages;
}


public List<DatasetRelPublication> getRelatedPublications() {
List<DatasetRelPublication> relatedPublications = new ArrayList<>();
for (DatasetField dsf : this.getDatasetFields()) {
Expand All @@ -1141,6 +1197,8 @@ public List<DatasetRelPublication> getRelatedPublications() {
String citation = subField.getDisplayValue();
relatedPublication.setText(citation);
}


if (subField.getDatasetFieldType().getName().equals(DatasetFieldConstant.publicationURL)) {
// We have to avoid using subField.getDisplayValue() here - because the DisplayFormatType
// for this url metadata field is likely set up so that the display value is automatically
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import edu.harvard.iq.dataverse.DataFile;
import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.DatasetRelPublication;
import edu.harvard.iq.dataverse.DatasetVersion;
import edu.harvard.iq.dataverse.DvObject;
import edu.harvard.iq.dataverse.api.Util;
import edu.harvard.iq.dataverse.dataset.DatasetThumbnail;
Expand Down Expand Up @@ -437,7 +439,7 @@ public JsonObjectBuilder getJsonForMyData() {
.add("parentName", this.getParent().get("name"));
}
}

return myDataJson;
} //getJsonForMydata

Expand All @@ -457,6 +459,8 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool
String filePersistentId = null;
String preferredUrl = null;
String apiUrl = null;
String publisherName = null;


if (this.type.equals(SearchConstants.DATAVERSES)) {
displayName = this.name;
Expand All @@ -466,6 +470,8 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool
displayName = this.title;
identifierLabel = "global_id";
preferredUrl = getPersistentUrl();
publisherName = this.parent.get("name");
// if
/**
* @todo Should we show the name of the parent dataverse?
*/
Expand Down Expand Up @@ -534,6 +540,7 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool
.add("file_persistent_id", this.filePersistentId)
.add("dataset_name", datasetName)
.add("dataset_id", datasetId)
.add("publisher", publisherName)
.add("dataset_persistent_id", datasetPersistentId)
.add("dataset_citation", datasetCitation)
.add("deaccession_reason", this.deaccessionReason)
Expand All @@ -552,6 +559,96 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool
}
}

if (this.entity == null) {

} else {
if (this.entity.isInstanceofDataset()) {
System.out.print("Instance of Dataset: " + this.entity.getStorageIdentifier());
nullSafeJsonBuilder.add("storageIdentifier", this.entity.getStorageIdentifier());
Dataset ds = (Dataset) this.entity;
DatasetVersion dv;
if (this.isDraftState()) {
dv = ds.getLatestVersion();
} else {
dv = ds.getReleasedVersion();
}

if (!dv.getKeywords().isEmpty()) {
JsonArrayBuilder keyWords = Json.createArrayBuilder();
for (String keyword : dv.getKeywords()) {
keyWords.add(keyword);
}
nullSafeJsonBuilder.add("keywords", keyWords);
}
JsonArrayBuilder subjects = Json.createArrayBuilder();
for (String subject : dv.getDatasetSubjects()) {
subjects.add(subject);
}
nullSafeJsonBuilder.add("subjects", subjects);
nullSafeJsonBuilder.add("versionId", dv.getId());
nullSafeJsonBuilder.add("versionState", dv.getVersionState().toString());
nullSafeJsonBuilder.add("createdAt", ds.getCreateDate());
nullSafeJsonBuilder.add("updatedAt", ds.getModificationTime());

if (!dv.getDatasetContacts().isEmpty()) {
JsonArrayBuilder contacts = Json.createArrayBuilder();
NullSafeJsonBuilder nullSafeJsonBuilderInner = jsonObjectBuilder();
for (String contact[] : dv.getDatasetContacts()) {
nullSafeJsonBuilderInner.add("name", contact[0]);
nullSafeJsonBuilderInner.add("affiliation", contact[1]);
contacts.add(nullSafeJsonBuilderInner);
}
nullSafeJsonBuilder.add("contacts", contacts);
}
if(!dv.getRelatedPublications().isEmpty()){
JsonArrayBuilder relPub = Json.createArrayBuilder();
NullSafeJsonBuilder inner = jsonObjectBuilder();
for (DatasetRelPublication dsRelPub : dv.getRelatedPublications()) {
inner.add("title", dsRelPub.getTitle());
inner.add("citation", dsRelPub.getText());
inner.add("url", dsRelPub.getUrl());
relPub.add(inner);
}
nullSafeJsonBuilder.add("publications", relPub);
}

if (!dv.getDatasetProducers().isEmpty()) {
JsonArrayBuilder producers = Json.createArrayBuilder();
for (String[] producer : dv.getDatasetProducers()) {
producers.add(producer[0]);
}
nullSafeJsonBuilder.add("producers", producers);
}
if (!dv.getRelatedMaterial().isEmpty()) {
JsonArrayBuilder relatedMaterials = Json.createArrayBuilder();
for (String relatedMaterial : dv.getRelatedMaterial()) {
relatedMaterials.add(relatedMaterial);
}
nullSafeJsonBuilder.add("relatedMaterial", relatedMaterials);
}

if (!dv.getGeographicCoverage().isEmpty()) {
JsonArrayBuilder geoCov = Json.createArrayBuilder();
NullSafeJsonBuilder inner = jsonObjectBuilder();
for (String ind[] : dv.getGeographicCoverage()) {
inner.add("country", ind[0]);
inner.add("state", ind[1]);
inner.add("city", ind[2]);
inner.add("other", ind[3]);
geoCov.add(inner);
}
nullSafeJsonBuilder.add("geographicCoverage", geoCov);
}
if (!dv.getDataSource().isEmpty()) {
JsonArrayBuilder dataSources = Json.createArrayBuilder();
for (String dsource : dv.getDataSource()) {
dataSources.add(dsource);
}
nullSafeJsonBuilder.add("dataSources", dataSources);
}
}
}

if (showApiUrls) {
/**
* @todo We should probably have a metadata_url or api_url concept
Expand Down

0 comments on commit 96b810d

Please sign in to comment.