From 23329bd5fc69ce8b1fd54352f83fb5b0eeb74ef0 Mon Sep 17 00:00:00 2001 From: hjkhjk54 Date: Thu, 3 Nov 2011 21:45:27 +0000 Subject: [PATCH] Updates for freemarker conversion, removing 2 stage role forms from vitro since they belong in vivo --- .../NewIndividualFormGenerator.java | 337 ++++++++++++++++++ .../controller/ProcessRdfFormController.java | 6 +- .../edit/EditConfigurationTemplateModel.java | 91 ++--- .../edit/forms/addClinicalRoleToPerson.ftl | 26 -- .../edit/forms/addRoleToPersonTwoStage.ftl | 194 ---------- .../edit/forms/newIndividualForm.ftl | 10 +- 6 files changed, 398 insertions(+), 266 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java delete mode 100644 webapp/web/templates/freemarker/edit/forms/addClinicalRoleToPerson.ftl delete mode 100644 webapp/web/templates/freemarker/edit/forms/addRoleToPersonTwoStage.ftl diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java new file mode 100644 index 000000000..9e65c1764 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java @@ -0,0 +1,337 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpSession; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; + + +import com.hp.hpl.jena.rdf.model.Literal; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.vocabulary.RDFS; +import com.hp.hpl.jena.vocabulary.XSD; +import com.hp.hpl.jena.ontology.OntModel; +import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; +import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement; +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; +import edu.cornell.mannlib.vitro.webapp.beans.VClass; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; +import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.Field; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.processEdit.RdfLiteralHash; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditN3GeneratorVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.SelectListGeneratorVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo; +import edu.cornell.mannlib.vitro.webapp.web.MiscWebUtils; +import edu.cornell.mannlib.vitro.webapp.search.beans.ProhibitedFromSearch; + +/** + * Generates the edit configuration for a default property form. + * + */ +public class NewIndividualFormGenerator implements EditConfigurationGenerator { + + private Log log = LogFactory.getLog(NewIndividualFormGenerator.class); + private boolean isObjectPropForm = false; + private String subjectUri = null; + private String predicateUri = null; + private String objectUri = null; + private String datapropKeyStr= null; + private int dataHash = 0; + private DataPropertyStatement dps = null; + private String dataLiteral = null; + private String template = "newIndividualForm.ftl"; + private static HashMap defaultsForXSDtypes ; + static { + defaultsForXSDtypes = new HashMap(); + //defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","2001-01-01T12:00:00"); + defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","#Unparseable datetime defaults to now"); + } + @Override + public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) { + EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo(); + //Set n3 generator + editConfiguration.setN3Generator(new EditN3GeneratorVTwo(editConfiguration)); + + //process subject, predicate, object parameters + this.initProcessParameters(vreq, session, editConfiguration); + + //Assumes this is a simple case of subject predicate var + editConfiguration.setN3Required(this.generateN3Required(vreq)); + + //n3 optional + editConfiguration.setN3Optional(this.generateN3Optional()); + + //Todo: what do new resources depend on here? + //In original form, these variables start off empty + editConfiguration.setNewResources(this.generateNewResources(vreq)); + //In scope + this.setUrisAndLiteralsInScope(editConfiguration); + + //on Form + this.setUrisAndLiteralsOnForm(editConfiguration, vreq); + + editConfiguration.setFilesOnForm(new ArrayList()); + + //Sparql queries + this.setSparqlQueries(editConfiguration); + + //set fields + setFields(editConfiguration, vreq, EditConfigurationUtils.getPredicateUri(vreq)); + + // No need to put in session here b/c put in session within edit request dispatch controller instead + //placing in session depends on having edit key which is handled in edit request dispatch controller + // editConfiguration.putConfigInSession(editConfiguration, session); + + prepareForUpdate(vreq, session, editConfiguration); + + + //Form title and submit label now moved to edit configuration template + //TODO: check if edit configuration template correct place to set those or whether + //additional methods here should be used and reference instead, e.g. edit configuration template could call + //default obj property form.populateTemplate or some such method + //Select from existing also set within template itself + setTemplate(editConfiguration, vreq); + //Set edit key + setEditKey(editConfiguration, vreq); + addFormSpecificData(editConfiguration, vreq); + + return editConfiguration; + + + } + + private Map generateNewResources(VitroRequest vreq) { + HashMap newResources = new HashMap(); + //TODO: Get default namespace + String defaultNamespace = vreq.getWebappDaoFactory().getDefaultNamespace(); + newResources.put("newInd", defaultNamespace + "individual"); + return newResources; + } + + private void setEditKey(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { + String editKey = EditConfigurationUtils.getEditKey(vreq); + editConfiguration.setEditKey(editKey); + } + + private void setTemplate(EditConfigurationVTwo editConfiguration, + VitroRequest vreq) { + editConfiguration.setTemplate(template); + + } + + //Initialize setup: process parameters + private void initProcessParameters(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { + String formUrl = EditConfigurationUtils.getFormUrl(vreq); + + subjectUri = EditConfigurationUtils.getSubjectUri(vreq); + predicateUri = EditConfigurationUtils.getPredicateUri(vreq); + + editConfiguration.setFormUrl(formUrl); + + editConfiguration.setUrlPatternToReturnTo("/individual"); + + editConfiguration.setVarNameForSubject("subjectNotUsed"); + editConfiguration.setSubjectUri(subjectUri); + editConfiguration.setEntityToReturnTo("?newInd"); + editConfiguration.setVarNameForPredicate("predicateNotUsed"); + editConfiguration.setPredicateUri(predicateUri); + + //not concerned about remainder, can move into default obj prop form if required + this.isObjectPropForm = true; + this.initObjectParameters(vreq); + this.processObjectPropForm(vreq, editConfiguration); + } + + + private void initObjectParameters(VitroRequest vreq) { + //in case of object property + objectUri = EditConfigurationUtils.getObjectUri(vreq); + } + + private void processObjectPropForm(VitroRequest vreq, EditConfigurationVTwo editConfiguration) { + editConfiguration.setVarNameForObject("objectNotUsed"); + editConfiguration.setObject(objectUri); + //this needs to be set for the editing to be triggered properly, otherwise the 'prepare' method + //pretends this is a data property editing statement and throws an error + //TODO: Check if null in case no object uri exists but this is still an object property + if(objectUri != null) { + editConfiguration.setObjectResource(true); + } + } + + private void processDataPropForm(VitroRequest vreq, EditConfigurationVTwo editConfiguration) { + editConfiguration.setObjectResource(false); + //set data prop value, data prop key str, + editConfiguration.setDatapropKey((datapropKeyStr==null)?"":datapropKeyStr); + editConfiguration.setVarNameForObject(dataLiteral); + //original set datapropValue, which in this case would be empty string but no way here + editConfiguration.setDatapropValue(""); + editConfiguration.setUrlPatternToReturnTo("/entity"); + } + + //Get N3 required + //Handles both object and data property + private List generateN3Required(VitroRequest vreq) { + List n3ForEdit = new ArrayList(); + String editString = "?newInd <" + VitroVocabulary.RDF_TYPE + "> <" + getTypeOfNew(vreq) + "> ."; + n3ForEdit.add(editString); + return n3ForEdit; + } + + private List generateN3Optional() { + List n3Optional = new ArrayList(); + String editString = "?newInd <" + RDFS.label.getURI() + "> ?label ."; + n3Optional.add(editString); + return n3Optional; + + } + + //Set queries + private String retrieveQueryForInverse () { + String queryForInverse = "PREFIX owl: " + + " SELECT ?inverse_property " + + " WHERE { ?inverse_property owl:inverseOf ?predicate } "; + return queryForInverse; + } + + private void setUrisAndLiteralsInScope(EditConfigurationVTwo editConfiguration) { + HashMap> urisInScope = new HashMap>(); + //note that at this point the subject, predicate, and object var parameters have already been processed + urisInScope.put(editConfiguration.getVarNameForSubject(), + Arrays.asList(new String[]{editConfiguration.getSubjectUri()})); + urisInScope.put(editConfiguration.getVarNameForPredicate(), + Arrays.asList(new String[]{editConfiguration.getPredicateUri()})); + editConfiguration.setUrisInScope(urisInScope); + //Uris in scope include subject, predicate, and object var + + editConfiguration.setLiteralsInScope(new HashMap>()); + } + + //n3 should look as follows + //?subject ?predicate ?objectVar + + private void setUrisAndLiteralsOnForm(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { + List urisOnForm = new ArrayList(); + List literalsOnForm = new ArrayList(); + literalsOnForm.add("label"); + literalsOnForm.add("firstName"); + literalsOnForm.add("lastName"); + editConfiguration.setUrisOnform(urisOnForm); + editConfiguration.setLiteralsOnForm(literalsOnForm); + } + + private String getDataLiteral(VitroRequest vreq) { + DataProperty prop = EditConfigurationUtils.getDataProperty(vreq); + return prop.getLocalName() + "Edited"; + } + + //This is for various items + private void setSparqlQueries(EditConfigurationVTwo editConfiguration) { + //Sparql queries defining retrieval of literals etc. + editConfiguration.setSparqlForAdditionalLiteralsInScope(new HashMap()); + + Map urisInScope = new HashMap(); + editConfiguration.setSparqlForAdditionalUrisInScope(urisInScope); + + editConfiguration.setSparqlForExistingLiterals(generateSparqlForExistingLiterals()); + editConfiguration.setSparqlForExistingUris(generateSparqlForExistingUris()); + } + + + //Get page uri for object + private HashMap generateSparqlForExistingUris() { + HashMap map = new HashMap(); + return map; + } + + private HashMap generateSparqlForExistingLiterals() { + HashMap map = new HashMap(); + return map; + } + + + private void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq, String predicateUri) { + Map fields = new HashMap(); + getLabelField(editConfiguration, vreq, fields); + + } + + private void getLabelField(EditConfigurationVTwo editConfiguration, + VitroRequest vreq, Map fields) { + FieldVTwo field = new FieldVTwo(); + field.setName("label"); + field.setNewResource(false); + //queryForExisting is not being used anywhere in Field + String stringDatatypeUri = XSD.xstring.toString(); + + + List validators = new ArrayList(); + validators.add("nonempty"); + field.setValidators(validators); + + //subjectUri and subjectClassUri are not being used in Field + + field.setOptionsType("UNDEFINED"); + //why isn't predicate uri set for data properties? + field.setPredicateUri(null); + field.setObjectClassUri(null); + field.setRangeDatatypeUri(stringDatatypeUri); + + field.setLiteralOptions(new ArrayList>()); + + //set assertions + List assertions = new ArrayList(); + field.setAssertions(assertions); + fields.put(field.getName(), field); + + } + + + + private void prepareForUpdate(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { + //Here, retrieve model from + Model model = (Model) session.getServletContext().getAttribute("jenaOntModel"); + //This form is always doing a non-update + editConfiguration.prepareForNonUpdate( model ); + + } + + + //Get parameter + private String getTypeOfNew(VitroRequest vreq) { + return vreq.getParameter("typeOfNew"); + } + + //Form specific data + public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { + HashMap formSpecificData = new HashMap(); + formSpecificData.put("typeName", getTypeName(vreq)); + //Put in the fact that we require field + editConfiguration.setFormSpecificData(formSpecificData); + } + + private String getTypeName(VitroRequest vreq) { + String typeOfNew = getTypeOfNew(vreq); + VClass type = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(typeOfNew); + return type.getName(); + } + + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/controller/ProcessRdfFormController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/controller/ProcessRdfFormController.java index 318458d4a..b603a9cf2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/controller/ProcessRdfFormController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/controller/ProcessRdfFormController.java @@ -120,8 +120,10 @@ public class ProcessRdfFormController extends FreemarkerHttpServlet{ private void applyEditSubmissionPreprocessors( EditConfigurationVTwo configuration, MultiValueEditSubmission submission) { List preprocessors = configuration.getEditSubmissionPreprocessors(); - for(EditSubmissionVTwoPreprocessor p: preprocessors) { - p.preprocess(submission); + if(preprocessors != null) { + for(EditSubmissionVTwoPreprocessor p: preprocessors) { + p.preprocess(submission); + } } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java index 6b0b035c3..0c12b1920 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java @@ -93,18 +93,20 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel { //Based on certain pre-set fields/variables, look for what //drop-downs need to be populated private void populateDropdowns() { - if(EditConfigurationUtils.isObjectProperty(editConfig.getPredicateUri(), vreq)) { - setRangeOptions(); - } - if(pageData.containsKey("objectSelect")) { - List fieldNames = (List)pageData.get("objectSelect"); - for(String field:fieldNames) { - WebappDaoFactory wdf = vreq.getWebappDaoFactory(); - Map optionsMap = SelectListGeneratorVTwo.getOptions(editConfig, field , wdf); - pageData.put(field, optionsMap); - } - } - + String predicateUri = editConfig.getPredicateUri(); + if(predicateUri != null) { + if(EditConfigurationUtils.isObjectProperty(editConfig.getPredicateUri(), vreq)) { + setRangeOptions(); + } + if(pageData.containsKey("objectSelect")) { + List fieldNames = (List)pageData.get("objectSelect"); + for(String field:fieldNames) { + WebappDaoFactory wdf = vreq.getWebappDaoFactory(); + Map optionsMap = SelectListGeneratorVTwo.getOptions(editConfig, field , wdf); + pageData.put(field, optionsMap); + } + } + } } //TODO: Check if this should return a list instead @@ -127,11 +129,13 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel { } private void setFormTitle() { - //if(editConfig.isObjectResource()) { - if(EditConfigurationUtils.isObjectProperty(editConfig.getPredicateUri(), vreq)) { - setObjectFormTitle(); - } else { - setDataFormTitle(); + String predicateUri = editConfig.getPredicateUri(); + if(predicateUri != null) { + if(EditConfigurationUtils.isObjectProperty(editConfig.getPredicateUri(), vreq)) { + setObjectFormTitle(); + } else { + setDataFormTitle(); + } } } @@ -196,32 +200,36 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel { private void setSubmitLabel() { String submitLabel = null; - if(EditConfigurationUtils.isObjectProperty(editConfig.getPredicateUri(), vreq)) { - Individual objectIndividual = EditConfigurationUtils.getObjectIndividual(vreq); - ObjectProperty prop = EditConfigurationUtils.getObjectProperty(vreq); - - if(objectIndividual != null) { - submitLabel = "Save change"; - } else { - if ( prop.getOfferCreateNewOption() ) { - submitLabel = "Select existing"; - } else { - submitLabel = "Save entry"; - } - } - } else { - if(editConfig.isDataPropertyUpdate()) { - submitLabel = "Save change"; + String predicateUri = editConfig.getPredicateUri(); + if(predicateUri != null) { + if(EditConfigurationUtils.isObjectProperty(editConfig.getPredicateUri(), vreq)) { + Individual objectIndividual = EditConfigurationUtils.getObjectIndividual(vreq); + ObjectProperty prop = EditConfigurationUtils.getObjectProperty(vreq); + + if(objectIndividual != null) { + submitLabel = "Save change"; + } else { + if ( prop.getOfferCreateNewOption() ) { + submitLabel = "Select existing"; + } else { + submitLabel = "Save entry"; + } + } } else { - submitLabel = "Save entry"; + if(editConfig.isDataPropertyUpdate()) { + submitLabel = "Save change"; + } else { + submitLabel = "Save entry"; + } } - } + } pageData.put("submitLabel", submitLabel); + } private void setRangeOptions() { ObjectProperty prop = EditConfigurationUtils.getObjectProperty(vreq); - if( prop.getSelectFromExisting() ){ + if( prop != null && prop.getSelectFromExisting() ){ WebappDaoFactory wdf = vreq.getWebappDaoFactory(); //TODO: Change this to varname for object from object property? String fieldName = editConfig.getVarNameForObject(); @@ -320,11 +328,14 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel { public Property getPredicateProperty() { String predicateUri = getPredicateUri(); //If predicate uri corresponds to object property, return that - if(EditConfigurationUtils.isObjectProperty(predicateUri, vreq)){ - return EditConfigurationUtils.getObjectPropertyForPredicate(this.vreq, predicateUri); + if(predicateUri != null) { + if(EditConfigurationUtils.isObjectProperty(predicateUri, vreq)){ + return EditConfigurationUtils.getObjectPropertyForPredicate(this.vreq, predicateUri); + } + //otherwise return Data property + return EditConfigurationUtils.getDataPropertyForPredicate(this.vreq, predicateUri); } - //otherwise return Data property - return EditConfigurationUtils.getDataPropertyForPredicate(this.vreq, predicateUri); + return null; } public ObjectProperty getObjectPredicateProperty() { diff --git a/webapp/web/templates/freemarker/edit/forms/addClinicalRoleToPerson.ftl b/webapp/web/templates/freemarker/edit/forms/addClinicalRoleToPerson.ftl deleted file mode 100644 index 7a815b637..000000000 --- a/webapp/web/templates/freemarker/edit/forms/addClinicalRoleToPerson.ftl +++ /dev/null @@ -1,26 +0,0 @@ -<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> -<#--Two stage form for clinical 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. AddClinicalRoleToPersonGenerator.java. - -Optional values can be set, but each of these has default values -set in addRoleToPersonTwoStage.ftl: - -buttonText -typeSelectorLabel -numDateFields -showRoleLAbelField -roleExamples--> - - -<#--Variable assignments for Add Clinical Role To Person--> -<#assign roleDescriptor = "clinical activity" /> -<#assign typeSelectorLabel = "clinical activity type" /> - - -<#--Each of the two stage forms will include the form below--> -<#include "addRoleToPersonTwoStage.ftl"> \ No newline at end of file diff --git a/webapp/web/templates/freemarker/edit/forms/addRoleToPersonTwoStage.ftl b/webapp/web/templates/freemarker/edit/forms/addRoleToPersonTwoStage.ftl deleted file mode 100644 index b0b2cdaeb..000000000 --- a/webapp/web/templates/freemarker/edit/forms/addRoleToPersonTwoStage.ftl +++ /dev/null @@ -1,194 +0,0 @@ -<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> - -<#--Retrieve certain edit configuration information--> -<#assign editMode = editConfiguration.pageData.editMode /> -<#assign literalValues = editConfiguration.existingLiteralValues /> -<#assign uriValues = editConfiguration.existingUriValues /> -<#assign htmlForElements = editConfiguration.pageData.htmlForElements /> - -<#--Freemarker variables with default values that can be overridden by specific forms--> - - -<#--buttonText, typeSelectorLabel, numDateFields, showRoleLabelField, roleExamples--> -<#if !buttonText?has_content> - <#assign buttonText = roleDescriptor /> - -<#if !typeSelectorLabel?has_content> - <#assign typeSelectorLabel = roleDescriptor /> - -<#if !numDateFields?has_content> - <#assign numDateFields = 2 /> - -<#if !showRoleLabelField?has_content> - <#assign showRoleLabelField = true /> - -<#if !roleExamples?has_content> - <#assign roleExamples = "" /> - - -<#--Setting values for titleVerb, submitButonText, and disabled Value--> -<#if editConfiguration.objectUri?has_content> - <#assign titleVerb = "Edit"/> - <#assign submitButtonText>Edit ${buttonText} - <#if editMode = "repair"> - <#assign disabledVal = ""/> - <#else> - <#assign disabledVal = "disabled"/> - -<#else> - <#assign titleVerb = "Create"/> - <#assign submitButtonText>${buttonText} - <#assign disabledVal = ""/> - <#assign editMode = "add" /> - - -<#--Get existing value for specific data literals and uris--> - - -<#--Get selected activity type value if it exists, this is alternative to below--> -<#assign activityTypeValue = ""/> -<#if uriValues?keys?seq_contains("roleActivityType") && (uriValues.roleActivityType?size > 0)> - <#assign activityTypeValue = uriValues.roleActivityType[0] /> - - - <#--Get activity label value--> -<#assign activityLabelValue = "" /> -<#if literalValues?keys?seq_contains("activityLabel") && (literalValues.activityLabel?size > 0)> - <#assign activityLabelValue = literalValues.activityLabel[0] /> - - -<#--Get role label--> -<#assign roleLabel = "" /> -<#if literalValues?keys?seq_contains("roleLabel") && (literalValues.roleLabel?size > 0) > - <#assign roleLabel = literalValues.roleLabel[0] /> - - - - -

${titleVerb} ${roleDescriptor} entry for ${editConfiguration.subjectName}

- -<#--Display error messages if any--> -<#if errorNameFieldIsEmpty??> - <#assign errorMessage = "Enter a name for the ." /> - - -<#if errorRoleFieldIsEmpty??> - <#assign errorMessage = "Specify a role for this ." /> - - -<#if errorMessage?has_content> - - - - -
- -
- -

- -

- - - -
-

- - - disabled=${disabledVal} - - /> -

- - <#if editMode = "edit"> - - - - -
-

- - - (Verify this match) -

- - -
- - <#if showRoleLabelField = true> -

- -

- - - <#if numDateFields == 1 > - <#--Generated html is a map with key name mapping to html string--> - <#if htmlForElements?keys?seq_contains("startField")> - - ${htmlForElements["startField"]} - - <#else> -

Years of Participation in ${roleDescriptor?capitalize}

- <#if htmlForElements?keys?seq_contains("startField")> - - ${htmlForElements["startField"]} - - <#if htmlForElements?keys?seq_contains("endField")> - - ${htmlForElements["endField"]} - - -
- - or Cancel -

- -

* required fields

- - -<#--Specifying form-specific script and adding stylesheets and scripts--> - - - -${stylesheets.add('')} -${stylesheets.add('')} -${stylesheets.add('')} - -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} - - -
\ No newline at end of file diff --git a/webapp/web/templates/freemarker/edit/forms/newIndividualForm.ftl b/webapp/web/templates/freemarker/edit/forms/newIndividualForm.ftl index 62fb6254a..fc1b6746c 100644 --- a/webapp/web/templates/freemarker/edit/forms/newIndividualForm.ftl +++ b/webapp/web/templates/freemarker/edit/forms/newIndividualForm.ftl @@ -2,8 +2,10 @@ <#-- Template for adding a new individual from the Site Admin page: VIVO version --> +<#--Retrieve certain edit configuration information--> +<#assign typeName = editConfiguration.pageData.typeName /> -

Create a new ${subclassName}

+

Create a new ${typeName}

<#if errorNameFieldIsEmpty??> <#assign errorMessage = "Enter a name." /> @@ -28,9 +30,9 @@

- - - or Cancel + + + or Cancel

* required fields