diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/QueryUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/QueryUtils.java index aefe7ac00..04b03aed5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/QueryUtils.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/QueryUtils.java @@ -109,6 +109,11 @@ public class QueryUtils { return queryString.replaceAll("\\?" + varName + "\\b", "<" + uri + ">"); } + /**Replace one variable name with another**/ + public static String replaceQueryVar(String queryString, String varName, String newVarName) { + return queryString.replaceAll("\\?" + varName + "\\b", "?" + newVarName); + } + public static ResultSet getQueryResults(String queryStr, VitroRequest vreq) { Dataset dataset = vreq.getDataset(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/BasicValidationVTwo.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/BasicValidationVTwo.java index 9e72dbca6..ce32be120 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/BasicValidationVTwo.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/BasicValidationVTwo.java @@ -93,31 +93,40 @@ public class BasicValidationVTwo { for( String validationType : validations){ String value = null; String validateMsg = null; - for(Literal literal: literals) { - try{ - if( literal != null ){ - value = literal.getString(); - } - }catch(Throwable th){ - log.debug("could not convert literal to string" , th); + //If no literals and this field was required, this is an error message + //and can return + if((literals == null || literals.size() == 0) && isRequiredField) { + errors.put(name, REQUIRED_FIELD_EMPTY_MSG); + break; + } + //Loop through literals if literals exist + if(literals != null) { + for(Literal literal: literals) { + try{ + if( literal != null ){ + value = literal.getString(); + } + }catch(Throwable th){ + log.debug("could not convert literal to string" , th); + } + // Empty field: if required, include only the empty field + // error message, not a format validation message. If non-required, + // don't do format validation, since that is both unnecessary and may + // incorrectly generate errors. + if (isEmpty(value)) { + if (isRequiredField) { + errors.put(name, REQUIRED_FIELD_EMPTY_MSG); + } + break; + } + String thisValidateMsg = validate(validationType,value); + if(validateMsg != null && thisValidateMsg != null) { + validateMsg += ", " + thisValidateMsg; + } else { + validateMsg = thisValidateMsg; + + } } - // Empty field: if required, include only the empty field - // error message, not a format validation message. If non-required, - // don't do format validation, since that is both unnecessary and may - // incorrectly generate errors. - if (isEmpty(value)) { - if (isRequiredField) { - errors.put(name, REQUIRED_FIELD_EMPTY_MSG); - } - break; - } - String thisValidateMsg = validate(validationType,value); - if(validateMsg != null && thisValidateMsg != null) { - validateMsg += ", " + thisValidateMsg; - } else { - validateMsg = thisValidateMsg; - - } } if( validateMsg != null) { errors.put(name,validateMsg); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/DateTimeIntervalValidationVTwo.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/DateTimeIntervalValidationVTwo.java index f01779260..628eaefa8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/DateTimeIntervalValidationVTwo.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/DateTimeIntervalValidationVTwo.java @@ -70,7 +70,7 @@ public class DateTimeIntervalValidationVTwo implements N3ValidatorVTwo { //Assuming form start year and form end year are working in conjunction with multiple values int index; - if (formStartYear != null && formEndYear != null) { + if (!literalListIsNull(formStartYear) && !literalListIsNull(formEndYear)) { int numberStartYears = formStartYear.size(); int numberEndYears = formEndYear.size(); if(numberStartYears > 1 && numberEndYears > 1) { @@ -81,7 +81,7 @@ public class DateTimeIntervalValidationVTwo implements N3ValidatorVTwo { if(numberStartYears > 0 && numberEndYears > 0) { errors.putAll(checkDateLiterals(formStartYear.get(0), formEndYear.get(0), startPrecision, endPrecision)); } - } else if (formStartYear != null && existingEndYear != null) { + } else if (!literalListIsNull(formStartYear) && !literalListIsNull(existingEndYear)) { int numberStartYears = formStartYear.size(); int numberEndYears = existingEndYear.size(); if(numberStartYears > 1 && numberEndYears > 1) { @@ -92,7 +92,8 @@ public class DateTimeIntervalValidationVTwo implements N3ValidatorVTwo { if(numberStartYears > 0 && numberEndYears > 0) { errors.putAll(checkDateLiterals(formStartYear.get(0), existingEndYear.get(0), startPrecision, endPrecision)); } - } else if (existingStartYear != null && formEndYear != null) { + } else if (!literalListIsNull(existingStartYear) && !literalListIsNull(formEndYear)) { + int numberStartYears = existingStartYear.size(); int numberEndYears = formEndYear.size(); if(numberStartYears > 1 && numberEndYears > 1) { @@ -103,7 +104,7 @@ public class DateTimeIntervalValidationVTwo implements N3ValidatorVTwo { if(numberStartYears > 0 && numberEndYears > 0) { errors.putAll(checkDateLiterals(existingStartYear.get(0), formEndYear.get(0), startPrecision, endPrecision)); } - } else if (existingStartYear != null && existingEndYear != null) { + } else if (!literalListIsNull(existingStartYear) && !literalListIsNull(existingEndYear)) { int numberStartYears = existingStartYear.size(); int numberEndYears = existingEndYear.size(); if(numberStartYears > 1 && numberEndYears > 1) { @@ -213,4 +214,16 @@ public class DateTimeIntervalValidationVTwo implements N3ValidatorVTwo { return errors; } + + //MEthod that checks whether list of literals is null or contains only null + private boolean literalListIsNull(List literalList) { + if(literalList == null) + return true; + boolean allNulls = true; + for(Literal l: literalList) { + if(l != null) + allNulls = false; + } + return allNulls; + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtils.java index a594136a9..a62b49d81 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtils.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtils.java @@ -116,12 +116,20 @@ public class EditConfigurationUtils { return dataProp; } + //get url without context - used for edit configuration object + public static String getFormUrlWithoutContext(VitroRequest vreq) { + return getEditUrlWithoutContext(vreq) + "?" + vreq.getQueryString(); + } public static String getFormUrl(VitroRequest vreq) { return getEditUrl(vreq) + "?" + vreq.getQueryString(); } public static String getEditUrl(VitroRequest vreq) { - return vreq.getContextPath() + "/editRequestDispatch"; + return vreq.getContextPath() + getEditUrlWithoutContext(vreq); + } + + public static String getEditUrlWithoutContext(VitroRequest vreq) { + return "/editRequestDispatch"; } public static String getCancelUrlBase(VitroRequest vreq) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/MultiValueEditSubmission.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/MultiValueEditSubmission.java index 8075b6e0d..7ee3acb20 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/MultiValueEditSubmission.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/MultiValueEditSubmission.java @@ -131,8 +131,14 @@ public class MultiValueEditSubmission { processEditElementFields(editConfig,queryParameters); //Incorporating basic validation + //Validate URIS this.basicValidation = new BasicValidationVTwo(editConfig, this); - Map errors = basicValidation.validateUris( urisFromForm ); + Map errors = basicValidation.validateUris( urisFromForm ); + //Validate literals + errors = basicValidation.validateLiterals( literalsFromForm ); + if( errors != null ) { + validationErrors.putAll( errors); + } if(editConfig.getValidators() != null ){ for( N3ValidatorVTwo validator : editConfig.getValidators()){ diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/BaseEditConfigurationGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/BaseEditConfigurationGenerator.java index ffd4bce15..574c73b6d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/BaseEditConfigurationGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/BaseEditConfigurationGenerator.java @@ -24,7 +24,7 @@ public abstract class BaseEditConfigurationGenerator implements EditConfiguratio String editKey = EditConfigurationUtils.getEditKey(vreq); editConf.setEditKey(editKey); - String formUrl = EditConfigurationUtils.getFormUrl(vreq); + String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq); editConf.setFormUrl(formUrl); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java index 27578c7b4..64da0feeb 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java @@ -147,7 +147,7 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati //Initialize setup: process parameters //Doesn't look like we need to set up separate processing for data property form private void initProcessParameters(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { - String formUrl = EditConfigurationUtils.getFormUrl(vreq); + String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq); subjectUri = EditConfigurationUtils.getSubjectUri(vreq); predicateUri = EditConfigurationUtils.getPredicateUri(vreq); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java index 0d63985a2..c178b8fc7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java @@ -135,7 +135,7 @@ public class DefaultObjectPropertyFormGenerator implements EditConfigurationGene //Initialize setup: process parameters private void initProcessParameters(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { - String formUrl = EditConfigurationUtils.getFormUrl(vreq); + String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq); subjectUri = EditConfigurationUtils.getSubjectUri(vreq); predicateUri = EditConfigurationUtils.getPredicateUri(vreq); 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 index 6d0e3c999..9208ccdca 100644 --- 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 @@ -133,7 +133,7 @@ public class NewIndividualFormGenerator implements EditConfigurationGenerator { //Initialize setup: process parameters private void initProcessParameters(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { - String formUrl = EditConfigurationUtils.getFormUrl(vreq); + String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq); subjectUri = EditConfigurationUtils.getSubjectUri(vreq); predicateUri = EditConfigurationUtils.getPredicateUri(vreq); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java index 26bdb72c4..2f26a3817 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java @@ -125,7 +125,7 @@ public class RDFSLabelGenerator implements EditConfigurationGenerator { //Initialize setup: process parameters //As this is a data property, don't require any additional processing for object properties private void initProcessParameters(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { - String formUrl = EditConfigurationUtils.getFormUrl(vreq); + String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq); subjectUri = EditConfigurationUtils.getSubjectUri(vreq); predicateUri = EditConfigurationUtils.getPredicateUri(vreq); 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 15556c342..42f783b55 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 @@ -163,9 +163,13 @@ public class ProcessRdfFormController extends FreemarkerHttpServlet{ if(errors != null && !errors.isEmpty()){ String form = editConfiguration.getFormUrl(); vreq.setAttribute("formUrl", form); - vreq.setAttribute("view", vreq.getParameter("view")); - - return new RedirectResponseValues(editConfiguration.getFormUrl()); + vreq.setAttribute("view", vreq.getParameter("view")); + //Need to ensure that edit key is set so that the correct + //edit configuration and edit submission are retrieved + //This can also be set as a parameter instead + String formUrl = editConfiguration.getFormUrl(); + formUrl += "&editKey=" + editConfiguration.getEditKey(); + return new RedirectResponseValues(formUrl); } return null; //no errors } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditSubmissionTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditSubmissionTemplateModel.java index 2643b9d32..d9ea48a2a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditSubmissionTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditSubmissionTemplateModel.java @@ -17,14 +17,20 @@ public class EditSubmissionTemplateModel { } public Map getLiteralsFromForm() { + if(editSub == null) + return null; return editSub.getLiteralsFromForm(); } public Map getValidationErrors() { + if(editSub == null) + return null; return editSub.getValidationErrors(); } public Map getUrisFromForm() { + if(editSub == null) + return null; return editSub.getUrisFromForm(); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/MultiValueEditSubmissionTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/MultiValueEditSubmissionTemplateModel.java index 1f4322fb8..bf5331bd8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/MultiValueEditSubmissionTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/MultiValueEditSubmissionTemplateModel.java @@ -17,15 +17,21 @@ public class MultiValueEditSubmissionTemplateModel { } public Map> getLiteralsFromForm() { + if(editSub == null) + return null; return editSub.getLiteralsFromForm(); } public Map getValidationErrors() { + if(editSub == null) + return null; return editSub.getValidationErrors(); } public Map> getUrisFromForm() { + if(editSub == null) + return null; return editSub.getUrisFromForm(); }