Merge To trunk. Adding filtering of Positions in past. NIHVIVO-984
This commit is contained in:
parent
a6b33bbfc6
commit
a89c1550d0
2 changed files with 1414 additions and 0 deletions
1298
productMods/WEB-INF/web.xml
Normal file
1298
productMods/WEB-INF/web.xml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,116 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.servlet.setup;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContextEvent;
|
||||||
|
|
||||||
|
import net.sf.jga.fn.UnaryFunctor;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.EntityMergedPropertyListController;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.filtering.IndividualFiltering;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFiltersImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This adds an object to the servlet context that will be used by
|
||||||
|
* EntityMergedPropertiesListController to convert the individual that
|
||||||
|
* is specified by the URI of the request to an individual that is filtered.
|
||||||
|
* The object is a function from an Individual to an Individual. The original
|
||||||
|
* Individual is wrapped in an object that will filter out any object property statements
|
||||||
|
* to Individuals of core:Position whos date is in the past.
|
||||||
|
*
|
||||||
|
* This is related to http://issues.library.cornell.edu/browse/NIHVIVO-984
|
||||||
|
*
|
||||||
|
* @author bdc34
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class VivoMergedListFilteringSetup implements javax.servlet.ServletContextListener {
|
||||||
|
private static final Log log = LogFactory.getLog(VivoMergedListFilteringSetup.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void contextDestroyed(ServletContextEvent arg0) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void contextInitialized(ServletContextEvent arg0) {
|
||||||
|
log.info("Setting up Vivo Merged List Filtering.");
|
||||||
|
|
||||||
|
UnaryFunctor<Individual,Individual> fn = new UnaryFunctor<Individual,Individual>(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Individual fn(Individual subject) {
|
||||||
|
if( subject != null && subject.isVClass("http://xmlns.com/foaf/0.1/Organization")){
|
||||||
|
return new IndividualFiltering(subject, new VitroFiltersImpl(){
|
||||||
|
|
||||||
|
// @Override
|
||||||
|
// public UnaryFunctor<Individual, Boolean> getIndividualFilter(){
|
||||||
|
// return new UnaryFunctor<Individual,Boolean>(){
|
||||||
|
// @Override
|
||||||
|
// public Boolean fn(Individual arg) {
|
||||||
|
// return ! isPast(arg);
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns true if we should keep the statement, false if we should get rid of the statement
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public UnaryFunctor<ObjectPropertyStatement, Boolean> getObjectPropertyStatementFilter(){
|
||||||
|
return new UnaryFunctor<ObjectPropertyStatement,Boolean>(){
|
||||||
|
@Override
|
||||||
|
public Boolean fn(ObjectPropertyStatement arg) {
|
||||||
|
if( "http://vivoweb.org/ontology/core#organizationForPosition".equals(arg.getPropertyURI())){
|
||||||
|
return ! positionInPast(arg.getObject());
|
||||||
|
}else{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
return subject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
EntityMergedPropertyListController.setMergedPropertyListFilter(fn, arg0.getServletContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean positionInPast(Individual ind){
|
||||||
|
|
||||||
|
if( ind.isVClass( "http://vivoweb.org/ontology/core#Position" ) ){
|
||||||
|
|
||||||
|
//positionShortView.jsp does not check core:endDate
|
||||||
|
// for(DataPropertyStatement stmt : ind.getDataPropertyStatements("http://vivoweb.org/ontology/core#endDate")){
|
||||||
|
// DateTime end = new DateTime( stmt.getData() );
|
||||||
|
// if( end.isBeforeNow() )
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
|
||||||
|
for(DataPropertyStatement stmt : ind.getDataPropertyStatements("http://vivoweb.org/ontology/core#endYear")){
|
||||||
|
int endYear = Integer.MAX_VALUE;
|
||||||
|
try{
|
||||||
|
endYear = Integer.parseInt(stmt.getData());
|
||||||
|
}catch(NumberFormatException nfe){
|
||||||
|
log.warn("Could not parse year: " + stmt.getData());
|
||||||
|
}
|
||||||
|
int nowYear = (new DateTime()).getYear();
|
||||||
|
|
||||||
|
//This should use the same logic as positionShortView.jsp
|
||||||
|
return nowYear > endYear;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue