custom form changes for NIHVIVO-601, 764 and 2602 plus all related subtasks

This commit is contained in:
tworrall 2012-03-06 14:40:12 +00:00
parent b7b7607242
commit 4782e06ff3
11 changed files with 1161 additions and 115 deletions

View file

@ -1,27 +1,197 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#--Two stage form for service provider role-->
<#--
Required Values to be set for each form that includes addRoleToPersonTwoStage.ftl are:
roleDescriptor.
The other required values (roleType, optionsType, objectClassUri, and literalOptions are
set in the JAVA class corresponding to the form, e.g. AddPresenterRoleToPersonGenerator.java.
<#-- this is in request.subject.name -->
Optional values can be set, but each of these has default values
set in addRoleToPersonTwoStage.ftl:
<#-- leaving this edit/add mode code in for reference in case we decide we need it -->
buttonText
typeSelectorLabel
numDateFields
showRoleLAbelField
roleExamples-->
<#import "lib-vivo-form.ftl" as lvf>
<#--Retrieve certain edit configuration information-->
<#if editConfiguration.objectUri?has_content>
<#assign editMode = "edit">
<#else>
<#assign editMode = "add">
</#if>
<#assign htmlForElements = editConfiguration.pageData.htmlForElements />
<#--Retrieve variables needed-->
<#assign presentationValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "presentation") />
<#assign presentationLabelValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "presentationLabel") />
<#assign presentationTypeValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "presentationType") />
<#assign roleLabelValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "roleLabel") />
<#assign conferenceValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "conference") />
<#assign conferenceLabelValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "conferenceLabel") />
<#--If edit submission exists, then retrieve validation errors if they exist-->
<#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content>
<#assign submissionErrors = editSubmission.validationErrors/>
</#if>
<#if editMode == "edit">
<#assign titleVerb="Edit">
<#assign submitButtonText="Save Changes">
<#assign disabledVal="disabled">
<#else>
<#assign titleVerb="Create">
<#assign submitButtonText="Create Entry">
<#assign disabledVal=""/>
</#if>
<#assign requiredHint = "<span class='requiredHint'> *</span>" />
<#assign yearHint = "<span class='hint'>(YYYY)</span>" />
<h2>${titleVerb}&nbsp;award or honor for ${editConfiguration.subjectName}</h2>
<#--Display error messages if any-->
<#if submissionErrors?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="Error alert icon" />
<p>
<#--Checking if any required fields are empty-->
<#if lvf.submissionErrorExists(editSubmission, "presentationLabel")>
Please select an existing value or enter a new value in the Name field.
</#if>
<#if lvf.submissionErrorExists(editSubmission, "roleLabel")>
Please enter a new value in the Role field.
</#if>
<#list submissionErrors?keys as errorFieldName>
<#if errorFieldName == "startField">
<#if submissionErrors[errorFieldName]?contains("before")>
The Start Year must be earlier than the End Year.
<#else>
${submissionErrors[errorFieldName]}
</#if>
<#elseif errorFieldName == "endField">
<#if submissionErrors[errorFieldName]?contains("after")>
The End Year must be later than the Start Year.
<#else>
${submissionErrors[errorFieldName]}
</#if>
</#if><br />
</#list>
</p>
</section>
</#if>
<@lvf.unsupportedBrowser urls.base />
<section id="addPresenterRoleToPerson" role="region">
<form id="addPresenterRoleToPerson" class="customForm noIE67" action="${submitUrl}" role="add/edit Presentation">
<p class="inline">
<label for="presentationType">Presentation Type<#if editMode != "edit"> ${requiredHint}<#else>:</#if></label>
<#assign presentationTypeOpts = editConfiguration.pageData.presentationType />
<#if editMode == "edit">
<#list presentationTypeOpts?keys as key>
<#if presentationTypeValue = key >
<span class="readOnly" id="typeSelectorSpan">${presentationTypeOpts[key]}</span>
<input type="hidden" id="typeSelectorInput" name="presentationType" acGroupName="presentation" value="${presentationTypeValue}">
</#if>
</#list>
<#else>
<select id="typeSelector" name="presentationType" acGroupName="presentation">
<option value="" selected="selected">Select one</option>
<#list presentationTypeOpts?keys as key>
<option value="${key}" <#if presentationTypeValue = key>selected</#if>> <#if presentationTypeOpts[key] == "Other">Presentation<#else>${presentationTypeOpts[key]}</#if></option>
</#list>
</select>
</#if>
</p>
<div class="fullViewOnly">
<p>
<label for="presentation">### Name ${requiredHint}</label>
<input class="acSelector" size="50" type="text" id="presentation" acGroupName="presentation" name="presentationLabel" value="${presentationLabelValue}">
</p>
<div class="acSelection" acGroupName="presentation">
<p class="inline">
<label></label>
<span class="acSelectionInfo"></span>
<a href="" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="presentationUri" name="presentation" value="${presentationValue}" />
</div>
<p><label for="roleLabel">Role in ### ${requiredHint} <span class="hint">(e.g., Moderator, Speaker, Panelist)</span></label>
<input size="50" type="text" id="roleLabel" name="roleLabel" value="${roleLabelValue}" />
</p>
<p>
<label for="org">Presented At</label>
<input class="acSelector" size="50" acGroupName="conference" type="text" id="conference" name="conferenceLabel" value="${conferenceLabelValue}" />
</p>
<div class="acSelection" acGroupName="conference">
<p class="inline">
<label>Selected Conference:</label>
<span class="acSelectionInfo"></span>
<a href="" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="conferenceUri" name="conference" value="${conferenceValue}" />
</div>
<p>
<h4>Years of Participation in ###</h4>
</p>
<#--Need to draw edit elements for dates here-->
<#assign htmlForElements = editConfiguration.pageData.htmlForElements />
<#if htmlForElements?keys?seq_contains("startField")>
<label class="dateTime" for="startField">Start</label>
${htmlForElements["startField"]} ${yearHint}
</#if>
<br/>
<#if htmlForElements?keys?seq_contains("endField")>
<label class="dateTime" for="endField">End</label>
${htmlForElements["endField"]} ${yearHint}
</#if>
<#--End draw elements-->
<input type="hidden" id="editKey" name="editKey" value="${editKey}"/>
</div>
<p class="submit">
<input type="submit" class="submit" value="${submitButtonText}"/><span class="or"> or </span>
<a class="cancel" href="${cancelUrl}" title="Cancel">Cancel</a>
</p>
<p id="requiredLegend" class="requiredHint">* required fields</p>
<#-- hide the html that gets written, and use java script to pass the value between the two -->
<div class="hidden">
<#if htmlForElements?keys?seq_contains("yearAwarded")>
${htmlForElements["yearAwarded"]}
</#if>
</div>
</form>
</section>
<script type="text/javascript">
var customFormData = {
acUrl: '${urls.base}/autocomplete?tokenize=true&stem=true',
acTypes: {conference: 'http://purl.org/ontology/bibo/Conference'},
editMode: '${editMode}',
defaultTypeName: 'presentation',
multipleTypeNames: {presentation: 'presentation', conference: 'conference'},
baseHref: '${urls.base}/individual?uri='
};
</script>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/templates/freemarker/edit/forms/css/customForm.css" />')}
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/templates/freemarker/edit/forms/css/customFormWithAutocomplete.css" />')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/jquery-ui/js/jquery-ui-1.8.9.custom.min.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/customFormUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/extensions/String.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/browserUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/jquery_plugins/jquery.bgiframe.pack.js"></script>',
'<script type="text/javascript" src="${urls.base}/templates/freemarker/edit/forms/js/customFormWithAutocomplete.js"></script>')}
<#--Variable assignments for Add Clinical Role To Person-->
<#assign roleDescriptor = "presentation" />
<#assign typeSelectorLabel = "presentation type" />
<#assign buttonText = "Presentation Role" />
<#assign roleExamples = "<span class='hint'>&nbsp;(e.g., Moderator, Speaker, Panelist)</span>" />
<#--Each of the two stage forms will include the form below-->
<#include "addRoleToPersonTwoStage.ftl">

View file

@ -23,6 +23,24 @@
<#assign publicationTypeValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "pubType") />
<#assign titleValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "title") />
<#assign pubUriValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "pubUri") />
<#assign collectionValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "collection") />
<#assign collectionUriValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "collectionUri") />
<#assign bookValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "book") />
<#assign bookUriValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "bookUri") />
<#assign conferenceValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "conference") />
<#assign conferenceUriValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "conferenceUri") />
<#assign eventValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "event") />
<#assign eventUriValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "eventUri") />
<#assign editorValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "editor") />
<#assign editorUriValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "editorUri") />
<#assign publisherValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "publisher") />
<#assign publisherUriValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "publisherUri") />
<#assign localeValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "locale") />
<#assign volumeValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "volume") />
<#assign numberValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "number") />
<#assign issueValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "issue") />
<#assign startPageValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "startPage") />
<#assign endPageValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "endPage") />
<#if editMode == "edit">
<#assign titleVerb="Edit">
@ -74,11 +92,11 @@
</p>
<div class="fullViewOnly">
<p>
<label for="relatedIndLabel">Title ${requiredHint}</label>
<input class="acSelector" size="50" type="text" id="title" name="title" acGroupName="publication" value="${titleValue}" />
<label for="title">Title ${requiredHint}</label>
<input class="acSelector" size="60" type="text" id="title" name="title" acGroupName="publication" value="${titleValue}" />
</p>
<div class="acSelection" acGroupName="publication" >
<div class="acSelection" acGroupName="publication" id="pubAcSelection">
<p class="inline">
<label>Selected Publication:</label>
<span class="acSelectionInfo"></span>
@ -87,8 +105,142 @@
</p>
<input class="acUriReceiver" type="hidden" id="pubUri" name="pubUri" value="${pubUriValue}" />
</div>
<div id="fieldsForNewPub">
<#-- Published In: collection -->
<p>
<label for="collection">Published in</label>
<input class="acSelector" size="50" type="text" id="collection" name="collection" acGroupName="collection" value="${collectionValue}" />
</p>
<div class="acSelection" acGroupName="collection" >
<p class="inline">
<label>Selected Venue:</label>
<span class="acSelectionInfo"></span>
<a href="" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="collectionUri" name="collectionUri" value="${collectionUriValue}" />
</div>
<#-- Published In: book -->
<p>
<label for="book">Published in</label>
<input class="acSelector" size="50" type="text" id="book" name="book" acGroupName="book" value="${bookValue}" />
</p>
<div class="acSelection" acGroupName="book" >
<p class="inline">
<label>Selected Venue:</label>
<span class="acSelectionInfo"></span>
<a href="" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="bookUri" name="bookUri" value="${bookUriValue}" />
</div>
<#-- Presented At -->
<p>
<label for="conference">Presented at</label>
<input class="acSelector" size="50" type="text" id="conference" name="conference" acGroupName="conference" value="${conferenceValue}" />
</p>
<div class="acSelection" acGroupName="conference" >
<p class="inline">
<label>Selected Venue:</label>
<span class="acSelectionInfo"></span>
<a href="" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="conferenceUri" name="conferenceUri" value="${conferenceUriValue}" />
</div>
</div>
<#-- Proceedings of -->
<p>
<label for="event">Proceedings of</label>
<input class="acSelector" size="50" type="text" id="event" name="event" acGroupName="event" value="${eventValue}" />
</p>
<div class="acSelection" acGroupName="event" >
<p class="inline">
<label>Selected Organization:</label>
<span class="acSelectionInfo"></span>
<a href="" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="eventUri" name="eventUri" value="${eventUriValue}" />
</div>
<#-- Editor -->
<p>
<label for="editor">Editor</label>
<input class="acSelector" size="50" type="text" id="editor" name="editor" acGroupName="editor" value="${editorValue}" />
</p>
<div class="acSelection" acGroupName="editor" >
<p class="inline">
<label>Selected Editor:</label>
<span class="acSelectionInfo"></span>
<a href="" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="editorUri" name="editorUri" value="${editorUriValue}" />
</div>
<#-- Publisher -->
<p>
<label for="publisher">Publisher</label>
<input class="acSelector" size="50" type="text" id="publisher" name="publisher" acGroupName="publisher" value="${publisherValue}" />
</p>
<div class="acSelection" acGroupName="publisher" >
<p class="inline">
<label>Selected Publisher:</label>
<span class="acSelectionInfo"></span>
<a href="" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="publisherUri" name="publisherUri" value="${publisherUriValue}" />
</div>
<#-- Place of Publication -->
<p>
<label for="locale">Place of Publication</label>
<input size="30" type="text" id="locale" name="locale" acGroupName="locale" value="${localeValue}" />
</p>
<#-- Volume, Number and Issue -->
<p class="inline">
<label for="volume" id="volLabel">Volume</label>
<label for="number" id="nbrLabel" class="vniLabels">Number</label>
<label for="issue" id="issueLabel" class="vniLabels">Issue</label>
</p>
<p>
<input size="4" type="text" id="volume" name="volume" value="${volumeValue}" />
<input size="4" class="vniInputs" type="text" id="number" name="number" value="${numberValue}" />
<input size="4" class="vniInputs" type="text" id="issue" name="issue" value="${issueValue}" />
</p>
<#-- Start/End Pages -->
<p class="inline">
<label for="startPage" id="sPLabel">Start Page</label>
<label for="endPage" class="sepLabels">End Page</label>
</p>
<p>
<input size="4" type="text" id="startPage" name="startPage" value="${startPageValue}" />
<input size="4" class="sepInputs" type="text" id="endPage" name="endPage" value="${endPageValue}" />
</p>
<#-- Publication Date -->
<p>
<#assign htmlForElements = editConfiguration.pageData.htmlForElements />
<#if htmlForElements?keys?seq_contains("dateTime")>
<label class="dateTime" for="pubDate">Publication Date</label><p></p>
${htmlForElements["dateTime"]} ${yearHint}
</#if>
</p>
</div> <!-- end fieldsForNewPub -->
</div> <!-- end fullViewOnly -->
<p class="submit">
<input type="hidden" name = "editKey" value="${editKey}"/>
<input type="submit" id="submit" value="${submitButtonText}"/><span class="or"> or </span><a class="cancel" href="${cancelUrl}">Cancel</a>
@ -105,11 +257,19 @@
sparqlForAcFilter: '${sparqlForAcFilter}',
sparqlQueryUrl: '${sparqlQueryUrl}',
acUrl: '${urls.base}/autocomplete?tokenize=true',
acTypes: {collection: 'http://purl.org/ontology/bibo/Periodical', book: 'http://purl.org/ontology/bibo/Book', conference: 'http://purl.org/NET/c4dm/event.owl#Event', event: 'http://purl.org/NET/c4dm/event.owl#Event', editor: 'http://xmlns.com/foaf/0.1/Person', publisher: 'http://xmlns.com/foaf/0.1/Organization'},
editMode: '${editMode}',
defaultTypeName: 'publication', // used in repair mode to generate button text
multipleTypeNames: {collection: 'publication', book: 'book', conference: 'conference', event: 'event', editor: 'editor', publisher: 'publisher'},
baseHref: '${urls.base}/individual?uri='
};
</script>
<script type="text/javascript">
$(document).ready(function(){
publicationToPersonUtils.onLoad();
});
</script>
</section>
</#if>
@ -121,4 +281,5 @@ ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/sm
${scripts.add('<script type="text/javascript" src="${urls.base}/js/jquery-ui/js/jquery-ui-1.8.9.custom.min.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/customFormUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/browserUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/templates/freemarker/edit/forms/js/publicationToPersonUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/templates/freemarker/edit/forms/js/customFormWithAutocomplete.js"></script>')}

View file

@ -34,3 +34,17 @@ form.customForm h4 {
span.readOnly {
color: #000;
}
/* special styles for addPublicationToPerson.ftl
volume, number, issue fields and start/end page fields */
label.vniLabels {
padding-left: 50px;
}
input.vniInputs {
margin-left: 57px;
}
label.sepLabels {
padding-left: 31px;
}
input.sepInputs {
margin-left: 57px;
}

View file

@ -11,7 +11,7 @@ var customForm = {
}
this.mixIn();
this.initObjects();
this.initPage();
this.initPage();
},
disableFormInUnsupportedBrowsers: function() {
@ -54,7 +54,7 @@ var customForm = {
// the verify popup window. Although there could be multiple verifyMatch objects
// selecting one and binding the event works for all of them
this.verifyMatch = this.form.find('.verifyMatch');
// find all the acSelector input elements
this.acSelectors = [] ;
@ -209,10 +209,9 @@ var customForm = {
// If an autocomplete selection has been made, undo it.
// NEED TO LINK THE TYPE SELECTOR TO THE ACSELECTOR IT'S ASSOCIATED WITH
// BECAUSE THERE COULD BE MORE THAN ON AC FIELD. ASSOCIATION IS MADE BY
// SHARING THE SAME ID -- "typeSelector" -- AMONG THE SELECT AND THE INPUT
// AND THE AC SELECTION DIV
// DO WE NEED AN IF STATEMENT AROUND THIS ****
// BECAUSE THERE COULD BE MORE THAN ONE AC FIELD. ASSOCIATION IS MADE VIA
// THE SPECIAL "acGroupName" ATTRIBUTE WHICH IS SHARED AMONG THE SELECT AND
// THE INPUT AND THE AC SELECTION DIV.
customForm.undoAutocompleteSelection($(this));
// Reinitialize view. If no type selection in a two-step form, go back to type view;
@ -246,7 +245,6 @@ var customForm = {
},
initAutocomplete: function(selectedObj) {
this.getAcFilter();
//If specific individuals are to be filtered out, add them here
//to the filtering list
@ -387,6 +385,9 @@ var customForm = {
var $acDiv = this.acSelections[$(selectedObj).attr('acGroupName')];
// provides a way to monitor selection in other js files, e.g. to hide fields upon selection
$acDiv.addClass("userSelected");
// If the form has a type selector, add type name to label in add mode. In edit mode, use typeSelectorSpan
// html. The second case is an "else if" and not an else because the template may not be passing the label
// to the acSelection macro or it may not be using the macro at all and the label is hard-coded in the html.
@ -403,7 +404,6 @@ var customForm = {
$acDiv.find("a.verifyMatch").attr('href', this.baseHref + uri);
$changeLink = $acDiv.find('a.changeSelection');
$changeLink.unbind('click');
$changeLink.click(function() {
customForm.undoAutocompleteSelection($acDiv);
});
@ -430,25 +430,24 @@ var customForm = {
else {
$acSelectionObj = $(selectedObj);
}
if ( !$acSelectionObj.is(':hidden') ) {
var $acSelector = null;
$.each(this.acSelectors, function() {
if ( $(this).attr('acGroupName') == $acSelectionObj.attr('acGroupName') ) {
$acSelector = $(this);
}
});
$acSelector.parent("p").show();
this.hideFields($acSelectionObj);
$acSelectionObj.find("input.acUriReceiver").val('');
$acSelectionObj.find("span").text('');
$acSelectionObj.find("a.verifyMatch").attr('href', this.baseHref);
$acSelector.val('');
customForm.addAcHelpText($acSelector);
//Resetting so disable submit button again for object property autocomplete
if ( this.acSelectOnly ) {
this.disableSubmit();
var $acSelector = null;
$.each(this.acSelectors, function() {
if ( $(this).attr('acGroupName') == $acSelectionObj.attr('acGroupName') ) {
$acSelector = $(this);
}
});
$acSelector.parent("p").show();
this.hideFields($acSelectionObj);
$acSelectionObj.removeClass('userSelected');
$acSelectionObj.find("input.acUriReceiver").val('');
$acSelectionObj.find("span").text('');
$acSelectionObj.find("a.verifyMatch").attr('href', this.baseHref);
$acSelector.val('');
customForm.addAcHelpText($acSelector);
//Resetting so disable submit button again for object property autocomplete
if ( this.acSelectOnly ) {
this.disableSubmit();
}
},
@ -496,12 +495,15 @@ var customForm = {
// If this.acType is empty, we are either in a one-step form with no type yet selected,
// or in repair mode in a two-step form with no type selected. Use the default type
// name specified in the form data.
if ( selectedObj && this.hasMultipleTypeNames ) {
if ( !selectedObj || !this.hasMultipleTypeNames ) {
return this.acTypes ? this.typeName : this.capitalize(this.defaultTypeName);
}
else if ( selectedObj && ( $(selectedObj).attr('acGroupName') == this.typeSelector.attr('acGroupName') ) ) {
return this.acTypes ? this.typeName : this.capitalize(this.defaultTypeName);
}
else {
var name = customForm.multipleTypeNames[$(selectedObj).attr('id')];
return this.capitalize(name);
}
else {
return this.acTypes ? this.typeName : this.capitalize(this.defaultTypeName);
}
},
@ -510,7 +512,7 @@ var customForm = {
var typeText;
// First case applies on page load; second case applies when the type gets changed. With multiple
// ac fields there are cases where we also have to check if the help text is already there
if (!$(selectedObj).val() || $(selectedObj).hasClass(this.acHelpTextClass) || $(selectedObj).val().substring(0, 18) == "Select an existing" ) {
if (!$(selectedObj).val() || $(selectedObj).hasClass(this.acHelpTextClass) || $(selectedObj).val().substring(0, 18) == "Select an existing" ) {
typeText = this.getTypeNameForLabels($(selectedObj));
var helpText = "Select an existing " + typeText + " or create a new one.";
//Different for object property autocomplete

View file

@ -0,0 +1,139 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
var publicationToPersonUtils = {
onLoad: function(mode) {
this.initObjectReferences();
this.bindEventListeners();
this.autoDateLabel.hide();
},
initObjectReferences: function() {
this.form = $('#addpublicationToPerson');
this.collection = $('#collection');
this.book = $('#book');
this.presentedAt = $('#conference');
this.proceedingsOf = $('#event');
this.editor = $('#editor');
this.editorUri = $('#editorUri');
this.publisher = $('#publisher');
this.locale = $('#locale');
this.volume = $('#volume');
this.volLabel = $('#volLabel');
this.number = $('#number');
this.nbrLabel = $('#nbrLabel');
this.issue = $('#issue');
this.issueLabel = $('#issueLabel');
this.startPage = $('#startPage');
this.sPLabel = $('#sPLabel');
this.endPage = $('#endPage');
this.ePLabel = $('#ePLabel');
this.typeSelector = $('#typeSelector');
this.autoDateLabel = null;
this.form.find('label').each(function() {
if ( $(this).attr('for') == "dateTime-year") {
publicationToPersonUtils.autoDateLabel = $(this);
}
});
this.pubTitle = $('input#title');
this.pubAcSelection = $('div#pubAcSelection');
this.fieldsForNewPub = $('#fieldsForNewPub');
this.changeLink = this.pubAcSelection.children('p').children('#changeSelection');
},
bindEventListeners: function() {
this.idCache = {};
this.typeSelector.change(function() {
publicationToPersonUtils.showFieldsForPub();
publicationToPersonUtils.displayFieldsForType();
});
// we need the delay in the next two functions to ensure the correct timing after the user
// selects the ac item. The .change handles a mouse click; .blur an arrow key and tab selection
this.pubTitle.change( function(objEvent) {
window.setTimeout('publicationToPersonUtils.hideFieldsForPub()', 180);
});
this.pubTitle.blur( function(objEvent) {
window.setTimeout('publicationToPersonUtils.hideFieldsForPub()', 180);
});
this.changeLink.click( function() {
publicationToPersonUtils.showFieldsForPub();
});
},
hideFieldsForPub: function() {
if ( this.pubAcSelection.attr('class').indexOf('userSelected') != -1 ) {
this.fieldsForNewPub.slideUp(250);
}
},
showFieldsForPub: function() {
this.fieldsForNewPub.show();
},
displayFieldsForType: function() {
// hide everything, then show what's needed based on type
// simpler in the event the user changes the type
this.collection.parent('p').hide();
this.book.parent('p').hide();
this.presentedAt.parent('p').hide();
this.proceedingsOf.parent('p').hide();
this.editor.parent('p').hide();
this.publisher.parent('p').hide();
this.locale.parent('p').hide();
this.volume.hide();
this.volLabel.hide();
this.number.hide();
this.nbrLabel.hide();
this.issue.hide();
this.issueLabel.hide();
this.startPage.parent('p').hide();
this.sPLabel.parent('p').hide();
var selectedType = this.typeSelector.find(':selected').text();
if ( selectedType == 'Academic Article' || selectedType == 'Article' || selectedType == 'Editorial Article' || selectedType == 'Review') {
this.collection.parent('p').show();
this.volume.show();
this.volLabel.show();
this.number.show();
this.nbrLabel.show();
this.issue.show();
this.issueLabel.show();
this.startPage.parent('p').show();
this.sPLabel.parent('p').show();
}
else if ( selectedType == 'Chapter' ) {
this.book.parent('p').show();
this.editor.parent('p').show();
this.publisher.parent('p').show();
this.locale.parent('p').show();
this.volume.show();
this.volLabel.show();
}
else if ( selectedType == 'Book' || selectedType == 'Edited Book' ) {
this.editor.parent('p').show();
this.publisher.parent('p').show();
this.locale.parent('p').show();
this.volume.show();
this.volLabel.show();
}
else if ( selectedType == 'Conference Paper' ) {
// this.collection.parent('p').show();
this.presentedAt.parent('p').show();
// this.startPage.parent('p').show();
// this.sPLabel.parent('p').show();
}
else if ( selectedType == 'Conference Poster' || selectedType == 'Speech') {
this.presentedAt.parent('p').show();
}
}
}

View file

@ -110,17 +110,15 @@
<label for="description">Description</label>
<input size="50" type="text" id="description" name="description" value="${descriptionValue}" />
</p>
<#assign htmlForElements = editConfiguration.pageData.htmlForElements />
<p>
<label for="yearAwarded" id="yearAwarded">Year Awarded</label>
<input size="4" type="text" id="yearAwarded" name="yearAwarded" value="${yearAwardedValue}" /> ${yearHint}
<label for="yearAwardedDisplay" id="yearAwarded">Year Awarded</label>
<input size="4" type="text" id="yearAwardedDisplay" name="yearAwardedDisplay" value="" /> ${yearHint}
</p>
<p>
<h4>Years Inclusive <span class="hint">&nbsp;(e.g., for multi-year awards)</span></h4>
</p>
<#--Need to draw edit elements for dates here-->
<#assign htmlForElements = editConfiguration.pageData.htmlForElements />
<#if htmlForElements?keys?seq_contains("startField")>
<label class="dateTime" for="startField">Start</label>
${htmlForElements["startField"]} ${yearHint}
@ -142,6 +140,13 @@
<p id="requiredLegend" class="requiredHint">* required fields</p>
<#-- hide the html that gets written, and use java script to pass the value between the two -->
<div class="hidden">
<#if htmlForElements?keys?seq_contains("yearAwarded")>
${htmlForElements["yearAwarded"]}
</#if>
</div>
</form>
</section>

View file

@ -20,7 +20,8 @@
<p class="inline">
<label>${labelValue}</label>
<span class="acSelectionInfo"></span>
<a href="${urlsBase}/individual?uri=" class="verifyMatch" title="verify match">(Verify this match)</a>
<a href="${urlsBase}/individual?uri=" class="verifyMatch" title="verify match">(Verify this match</a> or
<a href="#" class="changeSelection" id="changeSelection">change selection)</a>
</p>
<input class="acUriReceiver" type="hidden" id="${inputId}" name="${inputName}" value="${inputValue}" />
<!-- Field value populated by JavaScript -->

View file

@ -2,47 +2,284 @@
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpSession;
import com.hp.hpl.jena.vocabulary.RDFS;
import com.hp.hpl.jena.vocabulary.XSD;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeIntervalValidationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode;
import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils;
public class AddPresenterRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
private static String template = "addPresenterRoleToPerson.ftl";
@Override
String getTemplate() {
return template;
}
public class AddPresenterRoleToPersonGenerator extends VivoBaseGenerator implements
EditConfigurationGenerator {
@Override
String getRoleType() {
return "http://vivoweb.org/ontology/core#PresenterRole";
}
@Override
RoleActivityOptionTypes getRoleActivityTypeOptionsType() {
return RoleActivityOptionTypes.HARDCODED_LITERALS;
}
@Override
String getRoleActivityTypeObjectClassUri(VitroRequest vreq) {
return null;
}
final static String presentationClass = vivoCore + "Presentation";
final static String roleClass = vivoCore + "PresenterRole";
final static String conferenceClass = bibo + "Conference";
final static String hasRolePred = vivoCore + "hasPresenterRole";
final static String roleOfPred = vivoCore + "presenterRoleOf";
final static String roleRealizedInPred = vivoCore + "roleRealizedIn";
final static String realizedRolePred = vivoCore + "realizedRole";
final static String includesEventPred = vivoCore + "includesEvent";
final static String eventWithinPred = vivoCore + "eventWithin";
final static String roleToInterval = vivoCore + "dateTimeInterval";
final static String intervalType = vivoCore + "DateTimeInterval";
final static String intervalToStart = vivoCore + "start";
final static String intervalToEnd = vivoCore + "end";
final static String dateTimeValueType = vivoCore + "DateTimeValue";
final static String dateTimeValue = vivoCore + "dateTime";
final static String dateTimePrecision = vivoCore + "dateTimePrecision";
public AddPresenterRoleToPersonGenerator() {}
@Override
public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq,
HttpSession session) {
EditConfigurationVTwo conf = new EditConfigurationVTwo();
initBasics(conf, vreq);
initPropertyParameters(vreq, session, conf);
initObjectPropForm(conf, vreq);
conf.setTemplate("addPresenterRoleToPerson.ftl");
conf.setVarNameForSubject("person");
conf.setVarNameForPredicate("predicate");
conf.setVarNameForObject("role");
conf.setN3Required( Arrays.asList( n3ForNewRole,
roleLabelAssertion,
presTypeAssertion,
presLabelAssertion ) );
conf.setN3Optional( Arrays.asList( n3ForConference, n3ForConfLabel, n3ForStart, n3ForEnd ) );
conf.addNewResource("presentation", DEFAULT_NS_FOR_NEW_RESOURCE);
conf.addNewResource("conference", DEFAULT_NS_FOR_NEW_RESOURCE);
conf.addNewResource("role", DEFAULT_NS_FOR_NEW_RESOURCE);
conf.addNewResource("intervalNode", DEFAULT_NS_FOR_NEW_RESOURCE);
conf.addNewResource("startNode", DEFAULT_NS_FOR_NEW_RESOURCE);
conf.addNewResource("endNode", DEFAULT_NS_FOR_NEW_RESOURCE);
//uris in scope: none
//literals in scope: none
conf.setUrisOnform(Arrays.asList("presentation", "conference", "role", "presentationType"));
conf.setLiteralsOnForm(Arrays.asList("presentationLabel", "conferenceLabel", "roleLabel"));
conf.addSparqlForExistingLiteral("presentationLabel", presentationLabelQuery);
conf.addSparqlForExistingLiteral("conferenceLabel", conferenceLabelQuery);
conf.addSparqlForExistingLiteral("roleLabel", roleLabelQuery);
conf.addSparqlForExistingUris("presentation", presentationQuery);
conf.addSparqlForExistingUris("conference", conferenceQuery);
conf.addSparqlForExistingUris("presentationType", presentationTypeQuery);
conf.addSparqlForExistingLiteral(
"startField-value", existingStartDateQuery);
conf.addSparqlForExistingLiteral(
"endField-value", existingEndDateQuery);
conf.addSparqlForExistingUris(
"intervalNode", existingIntervalNodeQuery);
conf.addSparqlForExistingUris("startNode", existingStartNodeQuery);
conf.addSparqlForExistingUris("endNode", existingEndNodeQuery);
conf.addSparqlForExistingUris("startField-precision",
existingStartPrecisionQuery);
conf.addSparqlForExistingUris("endField-precision",
existingEndPrecisionQuery);
conf.addField( new FieldVTwo().
setName("presentation").
setOptionsType(FieldVTwo.OptionsType.INDIVIDUALS_VIA_VCLASS).
setObjectClassUri(presentationClass)
);
//Presenter role involves hard-coded options for the "right side" of the role or activity
@Override
protected HashMap<String, String> getRoleActivityTypeLiteralOptions() {
HashMap<String, String> literalOptions = new HashMap<String, String>();
literalOptions.put("", "Select type");
literalOptions.put("http://vivoweb.org/ontology/core#Presentation", "Presentation");
literalOptions.put("http://vivoweb.org/ontology/core#InvitedTalk","Invited Talk");
return literalOptions;
}
conf.addField( new FieldVTwo().
setName("presentationLabel")
.setRangeDatatypeUri( XSD.xstring.toString() ).
setValidators( list("nonempty") )
);
conf.addField( new FieldVTwo().
setName("presentationType").
setOptionsType(FieldVTwo.OptionsType.CHILD_VCLASSES_WITH_PARENT).
setObjectClassUri(presentationClass).
setValidators( list("nonempty") )
);
conf.addField( new FieldVTwo().
setName("roleLabel")
.setRangeDatatypeUri( XSD.xstring.toString() ).
setValidators( list("nonempty") )
);
@Override
boolean isShowRoleLabelField(){return true;}
conf.addField( new FieldVTwo().
setName("conference").
setOptionsType(FieldVTwo.OptionsType.INDIVIDUALS_VIA_VCLASS).
setObjectClassUri(conferenceClass)
);
conf.addField( new FieldVTwo().
setName("conferenceLabel").
setRangeDatatypeUri(XSD.xstring.toString() )
);
conf.addField( new FieldVTwo().setName("startField").
setEditElement(
new DateTimeWithPrecisionVTwo(null,
VitroVocabulary.Precision.YEAR.uri(),
VitroVocabulary.Precision.NONE.uri())
)
);
conf.addField( new FieldVTwo().setName("endField").
setEditElement(
new DateTimeWithPrecisionVTwo(null,
VitroVocabulary.Precision.YEAR.uri(),
VitroVocabulary.Precision.NONE.uri())
)
);
conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField"));
conf.addValidator(new AntiXssValidation());
prepare(vreq, conf);
return conf;
}
/* N3 assertions */
final static String n3ForNewRole =
"@prefix core: <" + vivoCore + "> . \n\n" +
"?person <" + hasRolePred + "> ?role . \n" +
"?role a <" + roleClass + "> . \n" +
"?role <" + roleOfPred + "> ?person . \n" +
"?role <" + roleRealizedInPred + "> ?presentation . \n" +
"?presentation <" + realizedRolePred + "> ?role .";
final static String roleLabelAssertion =
"?role <" + label + "> ?roleLabel .";
final static String presLabelAssertion =
"?presentation <" + label + "> ?presentationLabel .";
final static String presTypeAssertion =
"?presentation a ?presentationType .";
final static String n3ForConference =
"?conference a <" + conferenceClass + "> . \n" +
"?conference <" + includesEventPred + "> ?presentation . \n" +
"?presentation <" + eventWithinPred + "> ?conference . ";
final static String n3ForConfLabel =
"?conference <" + label + "> ?conferenceLabel .";
final static String n3ForStart =
"?role <" + roleToInterval + "> ?intervalNode . \n" +
"?intervalNode a <" + intervalType + "> . \n" +
"?intervalNode <" + intervalToStart + "> ?startNode . \n" +
"?startNode a <" + dateTimeValueType + "> . \n" +
"?startNode <" + dateTimeValue + "> ?startField-value . \n" +
"?startNode <" + dateTimePrecision + "> ?startField-precision . \n";
final static String n3ForEnd =
"?role <" + roleToInterval + "> ?intervalNode . \n" +
"?intervalNode a <" + intervalType + "> . \n" +
"?intervalNode <" + intervalToEnd + "> ?endNode . \n" +
"?endNode a <" + dateTimeValueType + "> . \n" +
"?endNode <" + dateTimeValue + "> ?endField-value . \n" +
"?endNode <" + dateTimePrecision + "> ?endField-precision . \n";
/* Queries for editing an existing entry */
final static String roleLabelQuery =
"SELECT ?existingRoleLabel WHERE { \n" +
"?role <" + label + "> ?existingRoleLabel . }";
final static String presentationQuery =
"SELECT ?existingPresentation WHERE { \n" +
"?role <" + roleRealizedInPred + "> ?existingPresentation . }";
final static String presentationLabelQuery =
"SELECT ?existingPresentationLabel WHERE { \n" +
"?role <" + roleRealizedInPred + "> ?existingPresentation . " +
"?existingPresentation <" + label + "> ?existingPresentationLabel . }";
final static String presentationTypeQuery =
"PREFIX vitro: <" + VitroVocabulary.vitroURI + "> \n" +
"SELECT ?existingPresentationType WHERE { \n" +
"?role <" + roleRealizedInPred + "> ?existingPresentation . " +
"?existingPresentation vitro:mostSpecificType ?existingPresentationType . }";
final static String conferenceQuery =
"SELECT ?existingConference WHERE { \n" +
"?role <" + roleRealizedInPred + "> ?existingPresentation . " +
"?existingPresentation <" + eventWithinPred + "> ?existingConference . }";
final static String conferenceLabelQuery =
"SELECT ?existingConferenceLabel WHERE { \n" +
"?role <" + roleRealizedInPred + "> ?existingPresentation . " +
"?existingPresentation <" + eventWithinPred + "> ?existingConference . \n" +
"?existingConference <" + label + "> ?existingConferenceLabel . }";
final static String existingStartDateQuery =
"SELECT ?existingDateStart WHERE { \n" +
" ?role <" + roleToInterval + "> ?intervalNode . \n" +
" ?intervalNode a <" + intervalType + "> . \n" +
" ?intervalNode <" + intervalToStart + "> ?startNode . \n" +
" ?startNode a <" + dateTimeValueType +"> . \n" +
" ?startNode <" + dateTimeValue + "> ?existingDateStart . }";
final static String existingEndDateQuery =
"SELECT ?existingEndDate WHERE { \n" +
" ?role <" + roleToInterval + "> ?intervalNode . \n" +
" ?intervalNode a <" + intervalType + "> . \n " +
" ?intervalNode <" + intervalToEnd + "> ?endNode . \n" +
" ?endNode a <" + dateTimeValueType + "> . \n" +
" ?endNode <" + dateTimeValue + "> ?existingEndDate . }";
final static String existingIntervalNodeQuery =
"SELECT ?existingIntervalNode WHERE { \n" +
" ?role <" + roleToInterval + "> ?existingIntervalNode . \n" +
" ?existingIntervalNode a <" + intervalType + "> . }";
final static String existingStartNodeQuery =
"SELECT ?existingStartNode WHERE { \n" +
" ?role <" + roleToInterval + "> ?intervalNode . \n" +
" ?intervalNode a <" + intervalType + "> . \n" +
" ?intervalNode <" + intervalToStart + "> ?existingStartNode . \n" +
" ?existingStartNode a <" + dateTimeValueType + "> . } ";
final static String existingEndNodeQuery =
"SELECT ?existingEndNode WHERE { \n" +
" ?role <" + roleToInterval + "> ?intervalNode . \n" +
" ?intervalNode a <" + intervalType + "> . \n" +
" ?intervalNode <" + intervalToEnd + "> ?existingEndNode . \n" +
" ?existingEndNode a <" + dateTimeValueType + "> .} ";
final static String existingStartPrecisionQuery =
"SELECT ?existingStartPrecision WHERE { \n" +
" ?role <" + roleToInterval + "> ?intervalNode . \n" +
" ?intervalNode a <" + intervalType + "> . \n" +
" ?intervalNode <" + intervalToStart + "> ?startNode . \n" +
" ?startNode a <" + dateTimeValueType + "> . \n" +
" ?startNode <" + dateTimePrecision + "> ?existingStartPrecision . }";
final static String existingEndPrecisionQuery =
"SELECT ?existingEndPrecision WHERE { \n" +
" ?role <" + roleToInterval + "> ?intervalNode . \n" +
" ?intervalNode a <" + intervalType + "> . \n" +
" ?intervalNode <" + intervalToEnd + "> ?endNode . \n" +
" ?endNode a <" + dateTimeValueType + "> . \n" +
" ?endNode <" + dateTimePrecision + "> ?existingEndPrecision . }";
}

View file

@ -13,6 +13,7 @@ import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.vocabulary.XSD;
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
@ -21,7 +22,11 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUti
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils;
import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeIntervalValidationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo;
/**
* On an add/new, this will show a form, on an edit/update this will skip to the
@ -29,6 +34,25 @@ import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils;
*/
public class AddPublicationToPersonGenerator extends VivoBaseGenerator implements EditConfigurationGenerator {
final static String collectionClass = bibo + "Periodical";
final static String bookClass = bibo + "Document";
final static String conferenceClass = bibo + "Conference";
final static String editorClass = foaf + "Person";
final static String publisherClass = vivoCore + "Publisher";
final static String presentedAtPred = bibo + "presentedAt";
final static String localePred = vivoCore + "placeOfPublication";
final static String volumePred = bibo + "volume";
final static String numberPred = bibo + "number";
final static String issuePred = bibo + "issue";
final static String startPagePred = bibo + "pageStart";
final static String endPagePred = bibo + "pageEnd";
final static String dateTimePred = vivoCore + "dateTimeValue";
final static String dateTimeValueType = vivoCore + "DateTimeValue";
final static String dateTimeValue = vivoCore + "dateTime";
final static String dateTimePrecision = vivoCore + "dateTimePrecision";
public AddPublicationToPersonGenerator() {}
@Override
public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) {
@ -89,6 +113,7 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
editConfiguration.setTemplate("addPublicationToPerson.ftl");
// adding person has publication validator
editConfiguration.addValidator(new PersonHasPublicationValidator());
editConfiguration.addValidator(new AntiXssValidation());
// Adding additional data, specifically edit mode
addFormSpecificData(editConfiguration, vreq);
@ -113,14 +138,32 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
}
/***N3 strings both required and optional***/
private List<String> generateN3Optional() {
return list(getN3ForExistingPub(),
getN3ForNewPub(),
getN3NewPubNameAssertion(),
getN3NewPubTypeAssertion());
getN3NewPubTypeAssertion(),
getN3ForCollection(),
getN3CollectionNameAssertion(),
getN3ForBook(),
getN3BookNameAssertion(),
getN3ForConference(),
getN3ConferenceNameAssertion(),
getN3ForEvent(),
getN3EventNameAssertion(),
getN3ForEditor(),
getN3EditorNameAssertion(),
getN3ForPublisher(),
getN3PublisherNameAssertion(),
getN3ForLocaleAssertion(),
getN3ForVolumeAssertion(),
getN3ForNumberAssertion(),
getN3ForIssueAssertion(),
getN3ForStartPageAssertion(),
getN3ForEndPageAssertion(),
getN3ForDateTimeAssertion()
);
}
@ -158,6 +201,110 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
}
private String getN3ForCollection() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri vivo:hasPublicationVenue ?collectionUri . \n" +
"?collectionUri a <" + collectionClass + "> . \n" +
"?collectionUri vivo:publicationVenueFor ?pubUri . ";
}
private String getN3CollectionNameAssertion() {
return "?collectionUri <" + label + "> ?collection .";
}
private String getN3ForBook() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri vivo:hasPublicationVenue ?bookUri . \n" +
"?bookUri a <" + bookClass + "> . \n" +
"?bookUri vivo:publicationVenueFor ?pubUri . ";
}
private String getN3BookNameAssertion() {
return "?bookUri <" + label + "> ?book .";
}
private String getN3ForConference() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri <" + presentedAtPred + "> ?conferenceUri . \n" +
"?conferenceUri a <" + conferenceClass + "> . \n" +
"?conferenceUri vivo:includesEvent ?pubUri . ";
}
private String getN3ConferenceNameAssertion() {
return "?conferenceUri <" + label + "> ?conference .";
}
private String getN3ForEvent() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri vivo:proceedingsOf ?eventUri . \n" +
"?eventUri a <" + conferenceClass + "> . \n" +
"?eventUri vivo:hasProceedings ?pubUri . ";
}
private String getN3EventNameAssertion() {
return "?eventUri <" + label + "> ?event .";
}
private String getN3ForEditor() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri vivo:editor ?editorUri . \n" +
"?editorUri a <" + editorClass + "> . \n" +
"?editorUri vivo:editorOf ?pubUri . ";
}
private String getN3EditorNameAssertion() {
return "?editorUri <" + label + "> ?editor .";
}
private String getN3ForPublisher() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri vivo:publisher ?publisherUri . \n" +
"?publisherUri a <" + publisherClass + "> . \n" +
"?publisherUri vivo:publisherOf ?pubUri . ";
}
private String getN3PublisherNameAssertion() {
return "?publisherUri <" + label + "> ?publisher .";
}
private String getN3ForLocaleAssertion() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri <" + localePred + "> ?locale . ";
}
private String getN3ForVolumeAssertion() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri <" + volumePred + "> ?volume . ";
}
private String getN3ForNumberAssertion() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri <" + numberPred + "> ?number . ";
}
private String getN3ForIssueAssertion() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri <" + issuePred + "> ?issue . ";
}
private String getN3ForStartPageAssertion() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri <" + startPagePred + "> ?startPage . ";
}
private String getN3ForEndPageAssertion() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri <" + endPagePred + ">?endPage . ";
}
private String getN3ForDateTimeAssertion() {
return "@prefix vivo: <" + vivoCore + "> . \n" +
"?pubUri <" + dateTimePred + "> ?dateTimeNode . \n" +
"?dateTimeNode a <" + dateTimeValueType + "> . \n" +
"?dateTimeNode <" + dateTimeValue + "> ?dateTime-value . \n" +
"?dateTimeNode <" + dateTimePrecision + "> ?dateTime-precision . ";
}
/** Get new resources */
private Map<String, String> generateNewResources(VitroRequest vreq) {
String DEFAULT_NS_TOKEN=null; //null forces the default NS
@ -165,6 +312,13 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
HashMap<String, String> newResources = new HashMap<String, String>();
newResources.put("authorshipUri", DEFAULT_NS_TOKEN);
newResources.put("pubUri", DEFAULT_NS_TOKEN);
newResources.put("collectionUri", DEFAULT_NS_TOKEN);
newResources.put("bookUri", DEFAULT_NS_TOKEN);
newResources.put("conferenceUri", DEFAULT_NS_TOKEN);
newResources.put("eventUri", DEFAULT_NS_TOKEN);
newResources.put("editorUri", DEFAULT_NS_TOKEN);
newResources.put("publisherUri", DEFAULT_NS_TOKEN);
newResources.put("dateTimeNode", DEFAULT_NS_TOKEN);
return newResources;
}
@ -186,11 +340,23 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
//add role activity and roleActivityType to uris on form
urisOnForm.add("pubUri");
urisOnForm.add("pubType");
urisOnForm.add("collectionUri");
urisOnForm.add("bookUri");
urisOnForm.add("conferenceUri");
urisOnForm.add("eventUri");
urisOnForm.add("editorUri");
urisOnForm.add("publisherUri");
editConfiguration.setUrisOnform(urisOnForm);
//activity label and role label are literals on form
List<String> literalsOnForm = new ArrayList<String>();
literalsOnForm.add("title");
literalsOnForm.add("locale");
literalsOnForm.add("volume");
literalsOnForm.add("number");
literalsOnForm.add("issue");
literalsOnForm.add("startPage");
literalsOnForm.add("endPage");
editConfiguration.setLiteralsOnForm(literalsOnForm);
}
@ -212,6 +378,25 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
setTitleField(editConfiguration);
setPubTypeField(editConfiguration);
setPubUriField(editConfiguration);
setCollectionLabelField(editConfiguration);
setCollectionUriField(editConfiguration);
setBookLabelField(editConfiguration);
setBookUriField(editConfiguration);
setConferenceLabelField(editConfiguration);
setConferenceUriField(editConfiguration);
setEventLabelField(editConfiguration);
setEventUriField(editConfiguration);
setEditorLabelField(editConfiguration);
setEditorUriField(editConfiguration);
setPublisherLabelField(editConfiguration);
setPublisherUriField(editConfiguration);
setLocaleField(editConfiguration);
setVolumeField(editConfiguration);
setNumberField(editConfiguration);
setIssueField(editConfiguration);
setStartPageField(editConfiguration);
setEndPageField(editConfiguration);
setDateTimeField(editConfiguration);
}
private void setTitleField(EditConfigurationVTwo editConfiguration) {
@ -220,13 +405,8 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
setName("title").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setPubTypeField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("pubType").
@ -234,16 +414,154 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
setLiteralOptions(getPublicationTypeLiteralOptions()));
}
private void setPubUriField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("pubUri").
setObjectClassUri(personClass));
}
private void setCollectionLabelField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("collection").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setCollectionUriField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("collectionUri").
setObjectClassUri(collectionClass));
}
private void setBookLabelField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("book").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setBookUriField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("bookUri").
setObjectClassUri(bookClass));
}
private void setConferenceLabelField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("conference").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setConferenceUriField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("conferenceUri").
setObjectClassUri(conferenceClass));
}
private void setEventLabelField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("event").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setEventUriField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("eventUri").
setObjectClassUri(conferenceClass));
}
private void setEditorLabelField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("editor").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setEditorUriField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("editorUri").
setObjectClassUri(editorClass));
}
private void setPublisherLabelField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("publisher").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setPublisherUriField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("publisherUri").
setObjectClassUri(publisherClass));
}
private void setLocaleField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("locale").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setVolumeField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("volume").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setNumberField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("number").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setIssueField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("issue").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setStartPageField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("startPage").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setEndPageField(EditConfigurationVTwo editConfiguration) {
String stringDatatypeUri = XSD.xstring.toString();
editConfiguration.addField(new FieldVTwo().
setName("endPage").
setValidators(list("datatype:" + stringDatatypeUri)).
setRangeDatatypeUri(stringDatatypeUri));
}
private void setDateTimeField(EditConfigurationVTwo editConfiguration) {
editConfiguration.addField(new FieldVTwo().
setName("dateTime").
setEditElement(
new DateTimeWithPrecisionVTwo(null,
VitroVocabulary.Precision.YEAR.uri(),
VitroVocabulary.Precision.NONE.uri())
)
);
}
private List<List<String>> getPublicationTypeLiteralOptions() {
List<List<String>> literalOptions = new ArrayList<List<String>>();
@ -278,8 +596,6 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
return literalOptions;
}
//Form specific data
public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
HashMap<String, Object> formSpecificData = new HashMap<String, Object>();

View file

@ -200,9 +200,9 @@ public class PersonHasAwardOrHonorGenerator extends VivoBaseGenerator implements
"?awardReceipt <"+ descriptionPred +"> ?description .";
final static String n3ForOrgAssertion =
"?award <" + awardConferredByPred +"> ?org . \n" +
"?awardReceipt <" + awardConferredByPred +"> ?org . \n" +
"?org a <" + orgClass + "> . \n" +
"?org <" + awardConferredPred + "> ?award .";
"?org <" + awardConferredPred + "> ?awardReceipt .";
final static String orgLabelAssertion =
"?org <"+ label + "> ?orgLabel .";
@ -238,8 +238,8 @@ public class PersonHasAwardOrHonorGenerator extends VivoBaseGenerator implements
final static String orgQuery =
"SELECT ?existingOrg WHERE { \n" +
" ?award <" + awardConferredByPred + "> ?existingOrg . \n" +
"}";
" ?awardReceipt <" + awardConferredByPred + "> ?existingOrg . \n" +
" ?existingOrg <" + awardConferredPred + "> ?awardReceipt . }";
final static String awardReceiptLabelQuery =
"SELECT ?existingAwardReceiptLabel WHERE { \n" +

View file

@ -16,6 +16,7 @@ public abstract class VivoBaseGenerator extends BaseEditConfigurationGenerator i
final static String foaf = "http://xmlns.com/foaf/0.1/";
final static String type =VitroVocabulary.RDF_TYPE ;
final static String label =rdfs+"label" ;
final static String bibo = "http://purl.org/ontology/bibo/";
final static String trainingClass = vivoCore+"EducationalTraining" ;
final static String degreeClass =vivoCore+"AcademicDegree" ;