Merge branch 'develop' of https://github.com/vivo-project/Vitro into develop
This commit is contained in:
commit
9072d436e5
6 changed files with 65 additions and 82 deletions
|
@ -28,9 +28,9 @@ auth:ADMIN
|
|||
auth:hasPermission simplePermission:PageViewableAdmin ;
|
||||
|
||||
# Uncomment the following permission line to enable the SPARQL update API.
|
||||
# Before enabling, be sure that the URL api/sparqlUpdate is secured by SSH,
|
||||
# Before enabling, be sure that the URL api/sparqlUpdate is secured by HTTPS,
|
||||
# so passwords will not be sent in clear text.
|
||||
# auth:hasPermission simplePermission:UseSparqlUpdateApi ;
|
||||
#auth:hasPermission simplePermission:UseSparqlUpdateApi ;
|
||||
|
||||
# permissions for CURATOR and above.
|
||||
auth:hasPermission simplePermission:EditOntology ;
|
||||
|
|
25
webapp/rdf/display/everytime/vitroSearchProhibited.n3
Normal file
25
webapp/rdf/display/everytime/vitroSearchProhibited.n3
Normal file
|
@ -0,0 +1,25 @@
|
|||
# $This file is distributed under the terms of the license in /doc/license.txt$
|
||||
|
||||
# All instances of a class can be excluded from the search index by adding a
|
||||
# vitroDisplay:excludeClass property between vitroDisplay:SearchIndex and the
|
||||
# URI of the class that you would like to exclude.
|
||||
|
||||
# .n3 or .rdf files can be created in this directory to configure the search
|
||||
# exclusions. Each file must be a valid file in the format specified by its
|
||||
# extension. Each file will be loaded individually and must be a complete
|
||||
# stand alone example of its format. Each file must contain all the necessary
|
||||
# prefixes, namespaces and preambles required by the format specified by its
|
||||
# extension.
|
||||
|
||||
# If you would like to add classes to the exclusions, add a file to this
|
||||
# directory ending in .n3 with N3 statements similar to this example.
|
||||
|
||||
#
|
||||
# @prefix owl: <http://www.w3.org/2002/07/owl#> .
|
||||
# @prefix vitroDisplay: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
|
||||
# @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
# @prefix example: <http://example/ns/> .
|
||||
#
|
||||
# vitroDisplay:SearchIndex
|
||||
# rdf:type owl:Thing ;
|
||||
# vitroDisplay:excludeClass example:classToExclude ;
|
|
@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -139,38 +140,30 @@ public class CollatedObjectPropertyTemplateModel extends
|
|||
// others will be removed
|
||||
List<Map<String, String>> filteredList = new ArrayList<Map<String, String>>();
|
||||
Set<String> processedObjects = new HashSet<String>();
|
||||
//Useful to keep track of objects where statement data may not match the most specific type
|
||||
//returne for some reason, in which case useful to keep track
|
||||
Set<String> filteredObjects = new HashSet<String>();
|
||||
for (Map<String, String> outerMap : statementData) {
|
||||
|
||||
String objectUri = outerMap.get(objectVariableName);
|
||||
|
||||
if (processedObjects.contains(objectUri)) {
|
||||
continue;
|
||||
}
|
||||
processedObjects.add(objectUri);
|
||||
//Get most specific type for this particular
|
||||
List<String> mostSpecificTypes = this.getSortedMostSpecificType(objectUri);
|
||||
//If more than one most specific type, will compare against both of them
|
||||
//and if the first one matches, the object will be placed under that
|
||||
//otherwise subclass will be checked against the other
|
||||
List<Map<String, String>> dataForThisObject = new ArrayList<Map<String, String>>();
|
||||
//Retrieve the statements that are related to this specific object
|
||||
for (Map<String, String> innerMap : statementData) {
|
||||
//Check both the object uri and that the subclass returned matches
|
||||
//the most specific type
|
||||
if (innerMap.get(objectVariableName) == objectUri) {
|
||||
//At this point, the statement data will already have the most specific type
|
||||
//represented
|
||||
String subclass = innerMap.get(SUBCLASS_VARIABLE_NAME);
|
||||
if(mostSpecificTypes.contains(subclass)) {
|
||||
filteredList.add(innerMap);
|
||||
filteredObjects.add(objectUri);
|
||||
} else {
|
||||
if (innerMap.get(objectVariableName).equals(objectUri)) {
|
||||
// Subclass should at this point contain the most specific
|
||||
// type already
|
||||
dataForThisObject.add(innerMap);
|
||||
}
|
||||
}
|
||||
|
||||
if(log.isDebugEnabled()) {
|
||||
log.debug("Iterating through statement data, Subclass does not match most specific type for Object URI - " + objectUri + " - subclass:" + subclass + " - most specific types=" + mostSpecificTypes.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
log.debug("Object URI " + objectUri + " has number of statements = " + dataForThisObject.size());
|
||||
}
|
||||
//Subclass variable should already reflect most specifick types but there may be more than one most specific type
|
||||
Collections.sort(dataForThisObject, new DataComparatorBySubclass());
|
||||
filteredList.add(dataForThisObject.get(0));
|
||||
|
||||
}
|
||||
|
||||
|
@ -179,31 +172,23 @@ public class CollatedObjectPropertyTemplateModel extends
|
|||
if (log.isDebugEnabled()) {
|
||||
log.debug("Data after subclass filtering");
|
||||
logData(statementData);
|
||||
//check and see if filteredObjects and processedObjects not the same size
|
||||
if(filteredObjects.size() < processedObjects.size()) {
|
||||
log.debug("Certain objects not included in statements displayed for collated subclasses");
|
||||
processedObjects.removeAll(filteredObjects);
|
||||
log.debug("These object uris not represented" + processedObjects.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Get the most specific type
|
||||
//An alternative would be to ensure that the default form, or any form that utilizes collation
|
||||
//will return most specific type within the listview select/construct queries so the resulting
|
||||
//statement data has that value
|
||||
List<String> getMostSpecificTypesForObject(String objectURI) {
|
||||
WebappDaoFactory wadf = ModelAccess.on(vreq).getWebappDaoFactory();
|
||||
return wadf.getIndividualDao().getIndividualByURI(objectURI).getMostSpecificTypeURIs();
|
||||
}
|
||||
//Subclass variable should already contain most specific type
|
||||
//If there is more than one most specific type, then order alphabetically
|
||||
private class DataComparatorBySubclass implements
|
||||
Comparator<Map<String, String>> {
|
||||
|
||||
//This will return a single most specific type for an object
|
||||
//If there are multiple most specific types, the list will be sorted alphabetically and
|
||||
//the first one will be returned
|
||||
List<String> getSortedMostSpecificType(String objectURI) {
|
||||
List<String> mostSpecificTypeURIs = this.getMostSpecificTypesForObject(objectURI);
|
||||
Collections.sort(mostSpecificTypeURIs);
|
||||
return mostSpecificTypeURIs;
|
||||
@Override
|
||||
public int compare(Map<String, String> map1, Map<String, String> map2) {
|
||||
|
||||
String subclass1 = map1.get(SUBCLASS_VARIABLE_NAME);
|
||||
String subclass2 = map2.get(SUBCLASS_VARIABLE_NAME);
|
||||
|
||||
return subclass1.compareTo(subclass2);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
# $This file is distributed under the terms of the license in /doc/license.txt$
|
||||
|
||||
# All instances of a class can be excluded from the search index
|
||||
# by adding a vitroDisplay:excludeClass property between
|
||||
# vitroDisplay:SearchIndex and the URI of the class
|
||||
# that you would like to exclude.
|
||||
|
||||
# All .n3 or .rdf files in this directory will be used to configure
|
||||
# the search exclusions. Each file must be a valid file in the format
|
||||
# specified by its extension. Each file will be loaded individually and
|
||||
# must be a complete stand alone example of its format. Each file must contain all
|
||||
# the necessary prefixes, namespaces and preambles required by the format
|
||||
# specified by its extension.
|
||||
|
||||
# If you would like to add classes to the
|
||||
# exclusions, add a file to this directory ending in .n3 with
|
||||
# N3 statements similar to this example.
|
||||
|
||||
#
|
||||
# @prefix owl: <http://www.w3.org/2002/07/owl#> .
|
||||
# @prefix vitroDisplay: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
|
||||
# @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
# @prefix example: <http://example/ns/> .
|
||||
#
|
||||
# vitroDisplay:SearchIndex
|
||||
# rdf:type owl:Thing ;
|
||||
# vitroDisplay:excludeClass example:classToExclude ;
|
|
@ -25,7 +25,7 @@
|
|||
<section class="account-feedback">
|
||||
<p>
|
||||
${strings.updated_account_1}
|
||||
<a href="${updatedUserAccount.editUrl}" title="${strings.updated_account_title}}">${updatedUserAccount.firstName} ${updatedUserAccount.lastName}</a>
|
||||
<a href="${updatedUserAccount.editUrl}" title="${strings.updated_account_title}">${updatedUserAccount.firstName} ${updatedUserAccount.lastName}</a>
|
||||
${strings.updated_account_2}
|
||||
<#if emailWasSent?? >${strings.updated_account_notification(updatedUserAccount.emailAddress)}</#if>
|
||||
</p>
|
||||
|
|
|
@ -9,11 +9,11 @@
|
|||
<#if (individual.thumbUrl)??>
|
||||
<img src="${individual.thumbUrl}" width="90" alt="${individual.name}" />
|
||||
<h1 class="thumb">
|
||||
<a href="${individual.profileUrl}" title="${i18n().view_profile_page_for} ${individual.name}}">${individual.name}</a>
|
||||
<a href="${individual.profileUrl}" title="${i18n().view_profile_page_for} ${individual.name}">${individual.name}</a>
|
||||
</h1>
|
||||
<#else>
|
||||
<h1>
|
||||
<a href="${individual.profileUrl}" title="${i18n().view_profile_page_for} ${individual.name}}">${individual.name}</a>
|
||||
<a href="${individual.profileUrl}" title="${i18n().view_profile_page_for} ${individual.name}">${individual.name}</a>
|
||||
</h1>
|
||||
</#if>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue