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
105 changes: 101 additions & 4 deletions src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,8 @@

import edu.harvard.iq.dataverse.util.StringUtil;
import edu.harvard.iq.dataverse.util.SystemConfig;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import java.io.*;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
Expand All @@ -82,6 +80,8 @@

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.file.UploadedFile;

import javax.json.*;
import javax.validation.ConstraintViolation;
import org.apache.commons.httpclient.HttpClient;
//import org.primefaces.context.RequestContext;
Expand Down Expand Up @@ -5597,4 +5597,101 @@ public boolean isFileAccessRequest() {
public void setFileAccessRequest(boolean fileAccessRequest) {
this.fileAccessRequest = fileAccessRequest;
}

public Map<String, CVM> getCVMConf(){
Map <String, CVM> cvmMap = new HashMap<>();
String cvmSetting = settingsService.getValueForKey(SettingsServiceBean.Key.CVMConf);
if (cvmSetting == null || cvmSetting.isEmpty())
return cvmMap;

JsonReader jsonReader = Json.createReader(new StringReader(settingsService.getValueForKey(SettingsServiceBean.Key.CVMConf)));
JsonArray cvmConfJsonArray = jsonReader.readArray();
jsonReader.close();
if (cvmConfJsonArray != null) {
for (JsonObject jo : cvmConfJsonArray.getValuesAs(JsonObject.class)) {
JsonArray v = jo.getJsonArray("vocabs");
List<String> vs = new ArrayList<>();
for (JsonString elm: v.getValuesAs(JsonString.class)){
vs.add(elm.getString());
}
JsonArray k = jo.getJsonArray("vocab-codes");
List<String> ks = new ArrayList<>();
for (JsonString elm: k.getValuesAs(JsonString.class)){
ks.add(elm.getString());
}
String cvmLang = BundleUtil.getDefaultLocale().getLanguage();//default
if (jo.containsKey("language"))
cvmLang = jo.getString("language"); // in case of "language":"", "&lang=" will be send to the middleware
boolean cvmReadonly = false;
if (jo.containsKey("readonly") && jo.getString("readonly").toLowerCase().equals("true"))
cvmReadonly = true;
String cvmProtocol = "skosmos";//default
if (jo.containsKey("protocol"))
cvmProtocol = jo.getString("protocol");
String mapId = "uri" ;//default
if (jo.containsKey("map-id"))
mapId = jo.getString("map-id");
String mapQuery = "prefLabel" ;//default
if (jo.containsKey("map-query"))
mapQuery = jo.getString("map-query");
CVM CVm = new CVM(jo.getString("cvm-url"), cvmLang, cvmProtocol, cvmReadonly, vs, ks
, jo.getString("js-url"), mapId, mapQuery);
cvmMap.put(jo.getString("vocab-name"), CVm);

}
}
return cvmMap;
}
public class CVM {
String cvmUrl;
String language;
String protocol;
String jsUrl;
String mapId;
String mapQuery;
boolean readonly;
List<String> vocabs;
List<String> keys;
public CVM(String cvmUrl, String language, String protocol, boolean readonly, List<String> vocabs, List<String> keys
, String jsUrl, String mapId, String mapQuery){
this.cvmUrl = cvmUrl;
this.language = language;
this.protocol = protocol;
this.readonly = readonly;
this.vocabs = vocabs;
this.keys = keys;
this.jsUrl = jsUrl;
this.mapId = mapId;
this.mapQuery = mapQuery;
}

public String getCvmUrl() {
return cvmUrl;
}
public String getLanguage() {
return language;
}
public String getProtocol() { return protocol; }
public boolean isReadonly() {
return readonly;
}
public List<String> getVocabs() {
return vocabs;
}
public List<String> getKeys() {
return keys;
}

public String getJsUrl() {
return jsUrl;
}

public String getMapId() {
return mapId;
}

public String getMapQuery() {
return mapQuery;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,8 @@ public enum Key {
/** Optionally override http://guides.dataverse.org . */
GuidesBaseUrl,

CVMConf,

/**
* A link to an installation of https://github.com/IQSS/miniverse or
* some other metrics app.
Expand Down
98 changes: 86 additions & 12 deletions src/main/webapp/datasetFieldForEditFragment.xhtml
Original file line number Diff line number Diff line change
@@ -1,32 +1,106 @@
<ui:composition
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
xmlns:pt="http://java.sun.com/jsf/passthrough"
xmlns:jsf="http://xmlns.jcp.org/jsf">
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
xmlns:pt="http://java.sun.com/jsf/passthrough"
xmlns:jsf="http://xmlns.jcp.org/jsf">

<ui:remove>
<!-- input text start UPDATE: UI:REMOVE applied due to duplicate ID errors, left code as reference incase test scripts complain -->
<span id="pre-input-#{dsf.datasetFieldType.name}" class="pre-input-tag"/></ui:remove>

<!-- input text start UPDATE: UI:REMOVE applied due to duplicate ID errors, left code as reference incase test scripts complain -->
<span id="pre-input-#{dsf.datasetFieldType.name}" class="pre-input-tag"/></ui:remove>
<c:set var="displayCV" value="#{cvMgr.size() > 0 and (dsfv.datasetField.datasetFieldType.name ==cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[0]
or dsfv.datasetField.datasetFieldType.name==cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[1]
or dsfv.datasetField.datasetFieldType.name==cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[2])}"/>
<p:inputText value="#{dsfv.valueForEdit}" id="inputText" pt:aria-required="#{dsf.required}"
styleClass="form-control #{dsfv.datasetField.datasetFieldType.name == 'title' and DatasetPage.editMode == 'CREATE' ? 'datasetfield-title' : ''}"
rendered="#{!dsfv.datasetField.datasetFieldType.controlledVocabulary
rendered="#{!dsfv.datasetField.datasetFieldType.controlledVocabulary and !displayCV
and (dsfv.datasetField.datasetFieldType.fieldType == 'TEXT'
or dsfv.datasetField.datasetFieldType.fieldType == 'INT'
or dsfv.datasetField.datasetFieldType.fieldType == 'FLOAT'
or dsfv.datasetField.datasetFieldType.fieldType == 'URL'
or dsfv.datasetField.datasetFieldType.fieldType == 'DATE'
or dsfv.datasetField.datasetFieldType.fieldType == 'EMAIL')}"/>
<p:watermark for="inputText" value="#{dsfv.datasetField.datasetFieldType.localeWatermark}"></p:watermark>
<ui:fragment rendered="#{displayCV and dsfv.datasetField.datasetFieldType.name==cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[0]}">
<div id="akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[0]}">
<p:autoComplete id="cv_vocabs_#{valCount.index+1}_k" value="#{dsfv.valueForEdit}"
completeMethod="#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getVocabs()}"
style="width:95%;"
readonly="#{facesContext.renderResponse and cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getVocabs().size() == 1
and cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).isReadonly()}"/>

</div>
</ui:fragment>
<ui:fragment rendered="#{displayCV and dsfv.datasetField.datasetFieldType.name==cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[1]}">
<div id="akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[1]}">
<p:inputText value="#{dsfv.valueForEdit}" id="cv_term_#{valCount.index+1}" tabindex="#{block.index+1}"
styleClass="form-control #{dsfv.datasetField.datasetFieldType.name == 'title' and DatasetPage.editMode == 'CREATE' ? 'datasetfield-title' : ''}"/>
</div>
</ui:fragment>
<ui:fragment rendered="#{displayCV and dsfv.datasetField.datasetFieldType.name==cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[2] }">
<div id="akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[2]}">
<p:inputText value="#{dsfv.valueForEdit}" id="cv_url_#{valCount.index+1}" tabindex="#{block.index+1}"
styleClass="form-control #{dsfv.datasetField.datasetFieldType.name == 'title' and DatasetPage.editMode == 'CREATE' ? 'datasetfield-title' : ''}"/>
</div>
<script src="#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getJsUrl()}">
</script>
<script>
$(document).ready(function() {
var jsonResult = {};
var cvmUrl = "#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getCvmUrl()}";
var cvmLang = "#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getLanguage()}";
var cvmProtocol = "#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getProtocol()}";
var cvmReqUrl = cvmUrl + "?protocol=" + cvmProtocol + "&amp;lang=" + cvmLang;
var vocabsize = "#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getVocabs().size()}";
var readonly = "#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).isReadonly()}";
if (vocabsize == 1 &amp;&amp; readonly)
$("#akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[0]}").find("input[name*='cv_vocabs_'").css('background-color' , '#EEEEEE');

var selectedVocab = "";
var vocabFieldValue = $("#akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[0]}").find("input[name*='cv_vocabs_'").val();
if (vocabFieldValue =='' &amp;&amp; vocabsize == 1) {
selectedVocab = "#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getVocabs()[0]}";
$("#akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[0]}").find("input[name*='cv_vocabs_'").val(selectedVocab);
}
$("#akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[0]}").find("input[name*='cv_vocabs_'").on("focusout", function(){
selectedVocab = $(this).val();
});

var mapquery = "#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getMapQuery()}";
var mapid = "#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getMapId()}";
var mapping = { query: mapquery, id: mapid };
$("#akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[1]}").find("input[name*='cv_term_']").autocomplete(
{
source: function( request, response ) {
cv = { 'cvmReqUrl' : cvmReqUrl, 'selectedVocab': selectedVocab, 'term': request.term };
autointerface(cvmProtocol, request, response, cv, mapping);
},
minLength: 2,
select: function(event, ui) {
$.each(ui, function(i, v) {
$("#akmi_#{valCount.index+1}_#{cvMgr.get(dsfv.datasetField.datasetFieldType.parentDatasetFieldType.name).getKeys()[2]}").find("input[name*='cv_url_']").val(v.id);
}
)}
}
);
});
</script>
<style type="text/css">
ul.ui-autocomplete {
list-style: none;
list-style-type: none;
padding: 0px;
margin: 0px;
}
</style>
</ui:fragment>
<p:inputTextarea value="#{dsfv.valueForEdit}" id="description" pt:aria-required="#{dsf.required}"
rows="5" cols="60" styleClass="form-control"
rendered="#{dsfv.datasetField.datasetFieldType.fieldType == 'TEXTBOX'}"/>
<p:watermark for="description" value="#{dsfv.datasetField.datasetFieldType.localeWatermark}"></p:watermark>

<div class="ui-message ui-message-error ui-widget ui-corner-all" aria-live="polite" jsf:rendered="#{dsfvIndex eq 0 and !empty dsfv.datasetField.validationMessage}">
<span class="ui-message-error-detail">#{dsfv.datasetField.validationMessage}</span>
</div>
Expand Down
3 changes: 3 additions & 0 deletions src/main/webapp/dataverse_template.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@
<o:resourceInclude path="/CustomizationFilesServlet?customFileType=style" />
</style>
</ui:fragment>
<ui:fragment rendered="#{DatasetPage.getCVMConf().size() > 0}">
<script src="#{resource['js/jquery-ui.js']}"></script>
</ui:fragment>
</h:head>
<h:body styleClass="#{widgetWrapper.widgetView ? 'widget-view' : ''}">
<f:loadBundle basename="propertyFiles.Bundle" var="bundle"/>
Expand Down
2 changes: 2 additions & 0 deletions src/main/webapp/metadataFragment.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@
</div>
<!-- Edit Mode -->
<ui:fragment rendered="${(!empty editMode)}">
<c:set var="cvmConf" value="#{DatasetPage.getCVMConf()}"/>
<p:fragment id="editMetadataFragement">
<o:importFunctions type="java.util.Collections" />
<div class="panel-group">
Expand Down Expand Up @@ -210,6 +211,7 @@
<ui:include src="datasetFieldForEditFragment.xhtml">
<ui:param name="dsfv" value="#{subdsf.singleValue}"/>
<ui:param name="dsfvIndex" value="0"/>
<ui:param name="cvMgr" value="#{cvmConf}"/>
</ui:include>
</ui:fragment>
<!-- MOVED SELECT ONE TO dataFieldForEdit -->
Expand Down
Loading