diff --git a/productMods/WEB-INF/ontologies/user/tbox/vivo-core-1.4-annotations.rdf b/productMods/WEB-INF/ontologies/user/tbox/vivo-core-1.4-annotations.rdf
index 3e81af65..634a6f42 100644
--- a/productMods/WEB-INF/ontologies/user/tbox/vivo-core-1.4-annotations.rdf
+++ b/productMods/WEB-INF/ontologies/user/tbox/vivo-core-1.4-annotations.rdf
@@ -3601,8 +3601,7 @@
1
true
- has authorship
- true
+ has authorship
This relates a person to their authorship information.
diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddPublicationToPersonGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddPublicationToPersonGenerator.java
index 13e0ab51..8b7ae971 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddPublicationToPersonGenerator.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddPublicationToPersonGenerator.java
@@ -12,7 +12,10 @@ import javax.servlet.http.HttpSession;
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.beans.ObjectPropertyStatement;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
+import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.PersonHasPublicationValidator;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
@@ -20,246 +23,282 @@ 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.generators.EditModeUtils;
+/**
+ * On an add/new, this will show a form, on an edit/update this will skip to the
+ * profile page of the publication.
+ */
public class AddPublicationToPersonGenerator extends VivoBaseGenerator implements EditConfigurationGenerator {
- @Override
- public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq,
- HttpSession session) {
- EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo();
- initBasics(editConfiguration, vreq);
- initPropertyParameters(vreq, session, editConfiguration);
- initObjectPropForm(editConfiguration, vreq);
- setVarNames(editConfiguration);
-
-
- // Required N3
- editConfiguration.setN3Required(generateN3Required());
-
- // Optional N3
- editConfiguration.setN3Optional( generateN3Optional());
-
- editConfiguration.setNewResources( generateNewResources(vreq) );
-
- //In scope
- setUrisAndLiteralsInScope(editConfiguration, vreq);
-
- //on Form
- setUrisAndLiteralsOnForm(editConfiguration, vreq);
-
- //Sparql queries
- setSparqlQueries(editConfiguration, vreq);
-
- //set fields
- setFields(editConfiguration, vreq);
-
- //template file
- editConfiguration.setTemplate("addPublicationToPerson.ftl");
- //adding person has publication validator
- editConfiguration.addValidator(new PersonHasPublicationValidator());
-
- //Adding additional data, specifically edit mode
- addFormSpecificData(editConfiguration, vreq);
- return editConfiguration;
- }
+ @Override
+ public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) {
+
+ if( EditConfigurationUtils.getObjectUri(vreq) == null ){
+ return doAddNew(vreq,session);
+ }else{
+ return doSkipToPublication(vreq);
+ }
+ }
+
+ private EditConfigurationVTwo doSkipToPublication(VitroRequest vreq) {
+ Individual authorshipNode = EditConfigurationUtils.getObjectIndividual(vreq);
+
+ //try to get the publication
+ List stmts =
+ authorshipNode.getObjectPropertyStatements("http://vivoweb.org/ontology/core#linkedInformationResource");
+ if( stmts == null || stmts.isEmpty() ){
+ return doBadAuthorshipNoPub( vreq );
+ }else if( stmts.size() > 1 ){
+ return doBadAuthorshipMultiplePubs(vreq);
+ }else{
+ //skip to publication
+ EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo();
+ editConfiguration.setSkipToUrl(UrlBuilder.getIndividualProfileUrl(stmts.get(0).getObjectURI(), vreq));
+ return editConfiguration;
+ }
+ }
+
+ protected EditConfigurationVTwo doAddNew(VitroRequest vreq,
+ HttpSession session) {
+ EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo();
+ initBasics(editConfiguration, vreq);
+ initPropertyParameters(vreq, session, editConfiguration);
+ initObjectPropForm(editConfiguration, vreq);
+ setVarNames(editConfiguration);
+
+ // Required N3
+ editConfiguration.setN3Required(generateN3Required());
+
+ // Optional N3
+ editConfiguration.setN3Optional(generateN3Optional());
+
+ editConfiguration.setNewResources(generateNewResources(vreq));
+
+ // In scope
+ setUrisAndLiteralsInScope(editConfiguration, vreq);
+
+ // on Form
+ setUrisAndLiteralsOnForm(editConfiguration, vreq);
+
+ // Sparql queries
+ setSparqlQueries(editConfiguration, vreq);
+
+ // set fields
+ setFields(editConfiguration, vreq);
+
+ // template file
+ editConfiguration.setTemplate("addPublicationToPerson.ftl");
+ // adding person has publication validator
+ editConfiguration.addValidator(new PersonHasPublicationValidator());
+
+ // Adding additional data, specifically edit mode
+ addFormSpecificData(editConfiguration, vreq);
+ return editConfiguration;
+ }
+
+ private EditConfigurationVTwo doBadAuthorshipMultiplePubs(VitroRequest vreq) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ private EditConfigurationVTwo doBadAuthorshipNoPub(VitroRequest vreq) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ private void setVarNames(EditConfigurationVTwo editConfiguration) {
+ editConfiguration.setVarNameForSubject("person");
+ editConfiguration.setVarNameForPredicate("predicate");
+ editConfiguration.setVarNameForObject("authorshipUri");
+
+ }
+
+
+
+ /***N3 strings both required and optional***/
+ private List generateN3Optional() {
+ return list(getN3ForExistingPub(),
+ getN3ForNewPub(),
+ getN3NewPubNameAssertion(),
+ getN3NewPubTypeAssertion());
+ }
+
+
+ private List generateN3Required() {
+ return list(getAuthorshipN3());
+ }
+
+ private String getAuthorshipN3() {
+ return "@prefix core: <" + vivoCore + "> . " +
+ "?authorshipUri a core:Authorship ;" +
+ "core:linkedAuthor ?person ." +
+ "?person core:authorInAuthorship ?authorshipUri .";
+ }
+
+ private String getN3ForExistingPub() {
+ return "@prefix core: <" + vivoCore + "> ." +
+ "?authorshipUri core:linkedInformationResource ?pubUri ." +
+ "?pubUri core:informationResourceInAuthorship ?authorshipUri .";
+ }
+
+ private String getN3ForNewPub() {
+ return "@prefix core: <" + vivoCore + "> ." +
+ "?pubUri a ?pubType ;" +
+ "<" + label + "> ?title ." +
+ "?authorshipUri core:linkedInformationResource ?pubUri ." +
+ "?pubUri core:informationResourceInAuthorship ?authorshipUri .";
+ }
+
+ private String getN3NewPubNameAssertion() {
+ return "?pubUri <" + label + "> ?title .";
+ }
+
+ private String getN3NewPubTypeAssertion() {
+ return "?pubUri a ?pubType . ";
+
+ }
+
+ /** Get new resources */
+ private Map generateNewResources(VitroRequest vreq) {
+ String DEFAULT_NS_TOKEN=null; //null forces the default NS
+
+ HashMap newResources = new HashMap();
+ newResources.put("authorshipUri", DEFAULT_NS_TOKEN);
+ newResources.put("pubUri", DEFAULT_NS_TOKEN);
+ return newResources;
+ }
+
+ /** Set URIS and Literals In Scope and on form and supporting methods */
+ private void setUrisAndLiteralsInScope(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
+ HashMap> urisInScope = new HashMap>();
+ urisInScope.put(editConfiguration.getVarNameForSubject(),
+ Arrays.asList(new String[]{editConfiguration.getSubjectUri()}));
+ urisInScope.put(editConfiguration.getVarNameForPredicate(),
+ Arrays.asList(new String[]{editConfiguration.getPredicateUri()}));
+ editConfiguration.setUrisInScope(urisInScope);
+ HashMap> literalsInScope = new HashMap>();
+ editConfiguration.setLiteralsInScope(literalsInScope);
+
+ }
+
+ private void setUrisAndLiteralsOnForm(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
+ List urisOnForm = new ArrayList();
+ //add role activity and roleActivityType to uris on form
+ urisOnForm.add("pubUri");
+ urisOnForm.add("pubType");
+ editConfiguration.setUrisOnform(urisOnForm);
+
+ //activity label and role label are literals on form
+ List literalsOnForm = new ArrayList();
+ literalsOnForm.add("title");
+ editConfiguration.setLiteralsOnForm(literalsOnForm);
+ }
+
+ /** Set SPARQL Queries and supporting methods. */
+ //In this case no queries for existing
+ private void setSparqlQueries(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
+ editConfiguration.setSparqlForExistingUris(new HashMap());
+ editConfiguration.setSparqlForAdditionalLiteralsInScope(new HashMap());
+ editConfiguration.setSparqlForAdditionalUrisInScope(new HashMap());
+ editConfiguration.setSparqlForExistingLiterals(new HashMap());
+ }
+
+ /**
+ *
+ * Set Fields and supporting methods
+ */
+
+ private void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
+ setTitleField(editConfiguration);
+ setPubTypeField(editConfiguration);
+ setPubUriField(editConfiguration);
+ }
+
+ private void setTitleField(EditConfigurationVTwo editConfiguration) {
+ String stringDatatypeUri = XSD.xstring.toString();
+ editConfiguration.addField(new FieldVTwo().
+ setName("title").
+ setValidators(list("datatype:" + stringDatatypeUri)).
+ setRangeDatatypeUri(stringDatatypeUri));
+
+ }
- private void setVarNames(EditConfigurationVTwo editConfiguration) {
- editConfiguration.setVarNameForSubject("person");
- editConfiguration.setVarNameForPredicate("predicate");
- editConfiguration.setVarNameForObject("authorshipUri");
-
- }
-
-
-
- /***N3 strings both required and optional***/
- private List generateN3Optional() {
- return list(getN3ForExistingPub(),
- getN3ForNewPub(),
- getN3NewPubNameAssertion(),
- getN3NewPubTypeAssertion());
- }
-
-
- private List generateN3Required() {
- return list(getAuthorshipN3());
- }
-
- private String getAuthorshipN3() {
- return "@prefix core: <" + vivoCore + "> . " +
- "?authorshipUri a core:Authorship ;" +
- "core:linkedAuthor ?person ." +
- "?person core:authorInAuthorship ?authorshipUri .";
- }
-
- private String getN3ForExistingPub() {
- return "@prefix core: <" + vivoCore + "> ." +
- "?authorshipUri core:linkedInformationResource ?pubUri ." +
- "?pubUri core:informationResourceInAuthorship ?authorshipUri .";
- }
-
- private String getN3ForNewPub() {
- return "@prefix core: <" + vivoCore + "> ." +
- "?pubUri a ?pubType ;" +
- "<" + label + "> ?title ." +
- "?authorshipUri core:linkedInformationResource ?pubUri ." +
- "?pubUri core:informationResourceInAuthorship ?authorshipUri .";
- }
-
- private String getN3NewPubNameAssertion() {
- return "?pubUri <" + label + "> ?title .";
- }
-
- private String getN3NewPubTypeAssertion() {
- return "?pubUri a ?pubType . ";
-
- }
-
- /** Get new resources */
- private Map generateNewResources(VitroRequest vreq) {
- String DEFAULT_NS_TOKEN=null; //null forces the default NS
-
- HashMap newResources = new HashMap();
- newResources.put("authorshipUri", DEFAULT_NS_TOKEN);
- newResources.put("pubUri", DEFAULT_NS_TOKEN);
- return newResources;
- }
-
- /** Set URIS and Literals In Scope and on form and supporting methods */
- private void setUrisAndLiteralsInScope(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
- HashMap> urisInScope = new HashMap>();
- urisInScope.put(editConfiguration.getVarNameForSubject(),
- Arrays.asList(new String[]{editConfiguration.getSubjectUri()}));
- urisInScope.put(editConfiguration.getVarNameForPredicate(),
- Arrays.asList(new String[]{editConfiguration.getPredicateUri()}));
- editConfiguration.setUrisInScope(urisInScope);
- HashMap> literalsInScope = new HashMap>();
- editConfiguration.setLiteralsInScope(literalsInScope);
-
- }
-
- private void setUrisAndLiteralsOnForm(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
- List urisOnForm = new ArrayList();
- //add role activity and roleActivityType to uris on form
- urisOnForm.add("pubUri");
- urisOnForm.add("pubType");
- editConfiguration.setUrisOnform(urisOnForm);
-
- //activity label and role label are literals on form
- List literalsOnForm = new ArrayList();
- literalsOnForm.add("title");
- editConfiguration.setLiteralsOnForm(literalsOnForm);
- }
-
- /** Set SPARQL Queries and supporting methods. */
- //In this case no queries for existing
- private void setSparqlQueries(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
- editConfiguration.setSparqlForExistingUris(new HashMap());
- editConfiguration.setSparqlForAdditionalLiteralsInScope(new HashMap());
- editConfiguration.setSparqlForAdditionalUrisInScope(new HashMap());
- editConfiguration.setSparqlForExistingLiterals(new HashMap());
- }
-
- /**
- *
- * Set Fields and supporting methods
- */
-
- private void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
- setTitleField(editConfiguration);
- setPubTypeField(editConfiguration);
- setPubUriField(editConfiguration);
- }
-
- private void setTitleField(EditConfigurationVTwo editConfiguration) {
- String stringDatatypeUri = XSD.xstring.toString();
- editConfiguration.addField(new FieldVTwo().
- setName("title").
- setValidators(list("datatype:" + stringDatatypeUri)).
- setRangeDatatypeUri(stringDatatypeUri));
-
- }
+ private void setPubTypeField(EditConfigurationVTwo editConfiguration) {
+ editConfiguration.addField(new FieldVTwo().
+ setName("pubType").
+ setOptionsType("HARDCODED_LITERALS").
+ setLiteralOptions(getPublicationTypeLiteralOptions()));
+ }
- private void setPubTypeField(EditConfigurationVTwo editConfiguration) {
- editConfiguration.addField(new FieldVTwo().
- setName("pubType").
- setOptionsType("HARDCODED_LITERALS").
- setLiteralOptions(getPublicationTypeLiteralOptions()));
- }
+ private void setPubUriField(EditConfigurationVTwo editConfiguration) {
+ editConfiguration.addField(new FieldVTwo().
+ setName("pubUri").
+ setObjectClassUri(personClass));
+ }
+
+
+ private List> getPublicationTypeLiteralOptions() {
+ List> literalOptions = new ArrayList>();
+ literalOptions.add(list("http://purl.org/ontology/bibo/AcademicArticle", "Academic Article"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Article", "Article"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/AudioDocument", "Audio Document"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#BlogPosting", "Blog Posting"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Book", "Book"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#CaseStudy", "Case Study"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#Catalog", "Catalog"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Chapter", "Chapter"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#ConferencePaper", "Conference Paper"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#ConferencePoster", "Conference Poster"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#Database", "Database"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/EditedBook", "Edited Book"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#EditorialArticle", "Editorial Article"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Film", "Film"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#Newsletter", "Newsletter"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#NewsRelease", "News Release"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Patent", "Patent"));
+ literalOptions.add(list("http://purl.obolibrary.org/obo/OBI_0000272", "Protocol"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Report", "Report"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#ResearchProposal", "Research Proposal"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#Review", "Review"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#Software", "Software"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#Speech", "Speech"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Thesis", "Thesis"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#Video", "Video"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Webpage", "Webpage"));
+ literalOptions.add(list("http://purl.org/ontology/bibo/Website", "Website"));
+ literalOptions.add(list("http://vivoweb.org/ontology/core#WorkingPaper", "Working Paper"));
+ return literalOptions;
+ }
+ //Form specific data
+ public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
+ HashMap formSpecificData = new HashMap();
+ formSpecificData.put("editMode", getEditMode(vreq).name().toLowerCase());
+ formSpecificData.put("sparqlForAcFilter", getSparqlForAcFilter(vreq));
+ editConfiguration.setFormSpecificData(formSpecificData);
+ }
+ public String getSparqlForAcFilter(VitroRequest vreq) {
+ String subject = EditConfigurationUtils.getSubjectUri(vreq);
- private void setPubUriField(EditConfigurationVTwo editConfiguration) {
- editConfiguration.addField(new FieldVTwo().
- setName("pubUri").
- setObjectClassUri(personClass));
- }
+ String query = "PREFIX core:<" + vivoCore + "> " +
+ "SELECT ?pubUri WHERE { " +
+ "<" + subject + "> core:authorInAuthorship ?authorshipUri ." +
+ "?authorshipUri core:linkedInformationResource ?pubUri . }";
+ return query;
+ }
-
- private List> getPublicationTypeLiteralOptions() {
- List> literalOptions = new ArrayList>();
- literalOptions.add(list("http://purl.org/ontology/bibo/AcademicArticle", "Academic Article"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Article", "Article"));
- literalOptions.add(list("http://purl.org/ontology/bibo/AudioDocument", "Audio Document"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#BlogPosting", "Blog Posting"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Book", "Book"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#CaseStudy", "Case Study"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#Catalog", "Catalog"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Chapter", "Chapter"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#ConferencePaper", "Conference Paper"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#ConferencePoster", "Conference Poster"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#Database", "Database"));
- literalOptions.add(list("http://purl.org/ontology/bibo/EditedBook", "Edited Book"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#EditorialArticle", "Editorial Article"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Film", "Film"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#Newsletter", "Newsletter"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#NewsRelease", "News Release"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Patent", "Patent"));
- literalOptions.add(list("http://purl.obolibrary.org/obo/OBI_0000272", "Protocol"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Report", "Report"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#ResearchProposal", "Research Proposal"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#Review", "Review"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#Software", "Software"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#Speech", "Speech"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Thesis", "Thesis"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#Video", "Video"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Webpage", "Webpage"));
- literalOptions.add(list("http://purl.org/ontology/bibo/Website", "Website"));
- literalOptions.add(list("http://vivoweb.org/ontology/core#WorkingPaper", "Working Paper"));
- return literalOptions;
- }
-
-
-
- //Form specific data
- public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
- HashMap formSpecificData = new HashMap();
- formSpecificData.put("editMode", getEditMode(vreq).name().toLowerCase());
- formSpecificData.put("sparqlForAcFilter", getSparqlForAcFilter(vreq));
- editConfiguration.setFormSpecificData(formSpecificData);
- }
-
- public String getSparqlForAcFilter(VitroRequest vreq) {
- String subject = EditConfigurationUtils.getSubjectUri(vreq);
-
- String query = "PREFIX core:<" + vivoCore + "> " +
- "SELECT ?pubUri WHERE { " +
- "<" + subject + "> core:authorInAuthorship ?authorshipUri ." +
- "?authorshipUri core:linkedInformationResource ?pubUri . }";
- return query;
- }
-
- public EditMode getEditMode(VitroRequest vreq) {
- return EditModeUtils.getEditMode(vreq, list("http://vivoweb.org/ontology/core#linkedInformationResource"));
- }
+ public EditMode getEditMode(VitroRequest vreq) {
+ return EditModeUtils.getEditMode(vreq, list("http://vivoweb.org/ontology/core#linkedInformationResource"));
+ }
}