update to add publication generator to deal with generic Relationship properties

This commit is contained in:
brianjlowe 2013-08-19 15:24:55 -04:00
parent ed71f74e10
commit 1d5864809c

View file

@ -11,11 +11,20 @@ import javax.servlet.http.HttpSession;
import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.vocabulary.XSD; import com.hp.hpl.jena.vocabulary.XSD;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.sparql.resultset.ResultSetMem;
import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.AutocompleteRequiredInputValidator; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.AutocompleteRequiredInputValidator;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.PersonHasPublicationValidator; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.PersonHasPublicationValidator;
@ -37,6 +46,7 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
final static String collectionClass = bibo + "Periodical"; final static String collectionClass = bibo + "Periodical";
final static String bookClass = bibo + "Book"; final static String bookClass = bibo + "Book";
final static String documentClass = bibo + "Document";
final static String conferenceClass = bibo + "Conference"; final static String conferenceClass = bibo + "Conference";
final static String editorClass = foaf + "Person"; final static String editorClass = foaf + "Person";
final static String publisherClass = vivoCore + "Publisher"; final static String publisherClass = vivoCore + "Publisher";
@ -52,6 +62,7 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
final static String dateTimeValueType = vivoCore + "DateTimeValue"; final static String dateTimeValueType = vivoCore + "DateTimeValue";
final static String dateTimeValue = vivoCore + "dateTime"; final static String dateTimeValue = vivoCore + "dateTime";
final static String dateTimePrecision = vivoCore + "dateTimePrecision"; final static String dateTimePrecision = vivoCore + "dateTimePrecision";
final static String relatesPred = vivoCore + "relates";
public AddPublicationToPersonGenerator() {} public AddPublicationToPersonGenerator() {}
@ -69,17 +80,29 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
Individual authorshipNode = EditConfigurationUtils.getObjectIndividual(vreq); Individual authorshipNode = EditConfigurationUtils.getObjectIndividual(vreq);
//try to get the publication //try to get the publication
List<ObjectPropertyStatement> stmts = String pubQueryStr = "SELECT ?obj \n" +
authorshipNode.getObjectPropertyStatements("http://vivoweb.org/ontology/core#relates"); "WHERE { <" + authorshipNode.getURI() + "> <" + relatesPred + "> ?obj . \n" +
if( stmts == null || stmts.isEmpty() ){ " ?obj a <" + documentClass + "> . } \n";
return doBadAuthorshipNoPub( vreq ); Query pubQuery = QueryFactory.create(pubQueryStr);
}else if( stmts.size() > 2 ){ QueryExecution qe = QueryExecutionFactory.create(pubQuery, ModelAccess.on(vreq).getJenaOntModel());
return doBadAuthorshipMultiplePubs(vreq); try {
}else{ ResultSetMem rs = new ResultSetMem(qe.execSelect());
//skip to publication if(!rs.hasNext()){
EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo(); return doBadAuthorshipNoPub( vreq );
editConfiguration.setSkipToUrl(UrlBuilder.getIndividualProfileUrl(stmts.get(0).getObjectURI(), vreq)); }else if( rs.size() > 1 ){
return editConfiguration; return doBadAuthorshipMultiplePubs(vreq);
}else{
//skip to publication
RDFNode objNode = rs.next().get("obj");
if (!objNode.isResource() || objNode.isAnon()) {
return doBadAuthorshipNoPub( vreq );
}
EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo();
editConfiguration.setSkipToUrl(UrlBuilder.getIndividualProfileUrl(((Resource) objNode).getURI(), vreq));
return editConfiguration;
}
} finally {
qe.close();
} }
} }