From e1ceb153394bce25cfbcc931898cb63017dfc05e Mon Sep 17 00:00:00 2001 From: jeb228 Date: Tue, 13 Apr 2010 19:56:59 +0000 Subject: [PATCH] Merge revisions 4740 and 4744 to the trunk. For bdc34 and jeb228. --- .../edit/n3editing/EditConfiguration.java | 24 ++++--- .../webapp/edit/n3editing/EditSubmission.java | 9 +++ .../webapp/edit/n3editing/N3Validator.java | 9 +++ .../n3editing/PersonHasPositionValidator.java | 47 ++++++++++++++ .../n3editing/StartYearBeforeEndYear.java | 64 +++++++++++++++++++ 5 files changed, 145 insertions(+), 8 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/N3Validator.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/PersonHasPositionValidator.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/StartYearBeforeEndYear.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditConfiguration.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditConfiguration.java index b479bf659..eab3efe52 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditConfiguration.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditConfiguration.java @@ -3,13 +3,12 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; +import java.util.Calendar; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Calendar; import javax.servlet.ServletContext; import javax.servlet.ServletRequest; @@ -24,6 +23,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import com.hp.hpl.jena.datatypes.xsd.XSDDatatype; import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ResourceFactory; @@ -32,11 +32,7 @@ import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle; import edu.cornell.mannlib.vitro.webapp.auth.identifier.ServletIdentifierBundleFactory; import edu.cornell.mannlib.vitro.webapp.auth.identifier.UserToIndIdentifierFactory; import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement; -import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.edit.EditLiteral; -import com.hp.hpl.jena.datatypes.xsd.XSDDatatype; -import com.hp.hpl.jena.datatypes.xsd.XSDDateTime; -import com.hp.hpl.jena.datatypes.BaseDatatype; /** * Represents a set of fields on a form and how parameters from a from @@ -88,7 +84,9 @@ public class EditConfiguration { String formUrl; String editKey; - EditN3Generator n3generator; + List validators; + + EditN3Generator n3generator; private String originalJson; private List modelChangePreprocessors; @@ -963,5 +961,15 @@ public class EditConfiguration { public void setResourceModelSelector(ModelSelector resourceModelSelector) { if( resourceModelSelector != null ) this.resourceModelSelector = resourceModelSelector; - } + } + + public List getValidators() { + return validators; + } + + public void addValidator( N3Validator validator){ + if( this.validators == null ) + this.validators = new ArrayList(); + this.validators.add(validator); + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditSubmission.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditSubmission.java index 234c723b6..a60112968 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditSubmission.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditSubmission.java @@ -126,6 +126,15 @@ public class EditSubmission { validationErrors.putAll( errors); } + if(editConfig.getValidators() != null ){ + for( N3Validator validator : editConfig.getValidators()){ + if( validator != null ){ + errors = validator.validate(editConfig, this); + if ( errors != null ) + validationErrors.putAll(errors); + } + } + } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/N3Validator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/N3Validator.java new file mode 100644 index 000000000..f135b3d87 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/N3Validator.java @@ -0,0 +1,9 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.edit.n3editing; + +import java.util.Map; + +public interface N3Validator { + public Map validate(EditConfiguration editConfig, EditSubmission editSub); +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/PersonHasPositionValidator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/PersonHasPositionValidator.java new file mode 100644 index 000000000..a3e3849a5 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/PersonHasPositionValidator.java @@ -0,0 +1,47 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.edit.n3editing; + +import java.util.HashMap; +import java.util.Map; + +import com.hp.hpl.jena.rdf.model.Literal; + +public class PersonHasPositionValidator implements N3Validator { + + public Map validate(EditConfiguration editConfig, EditSubmission editSub){ +// Map existingUris = editConfig.getUrisInScope(); +// Map existingLiterals = editConfig.getLiteralsInScope(); + Map urisFromForm = editSub.getUrisFromForm(); + Map literalsFromForm = editSub.getLiteralsFromForm(); + + Literal newOrgName = literalsFromForm.get("newOrgName"); + if( newOrgName.getLexicalForm() != null && "".equals(newOrgName.getLexicalForm()) ) + newOrgName = null; + String newOrgType = urisFromForm.get("newOrgType"); + if( "".equals(newOrgType ) ) + newOrgType = null; + String organizationUri = urisFromForm.get("organizationUri"); + if( "".equals(organizationUri)) + organizationUri = null; + + System.out.println("newOrgName " + newOrgName); + System.out.println("newOrgType " + newOrgType); + System.out.println("organizationUri " + organizationUri); + + Map errors = new HashMap(); + if( organizationUri != null && (newOrgName != null || newOrgType != null) ){ + errors.put("newOrgName", "Must choose from an existing orginization or create a new one, not both."); + errors.put("organizationUri", "Must choose from an existing orginizations or create a new one, not both."); + }else if( organizationUri == null && newOrgName != null && newOrgType == null) { + errors.put("newOrgType", "Must select a type for the new organization"); + }else if( organizationUri == null && newOrgName == null && newOrgType != null) { + errors.put("newOrgName", "Must select a name for the new organization"); + } + + if( errors.size() != 0 ) + return errors; + else + return null; + } +} \ No newline at end of file diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/StartYearBeforeEndYear.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/StartYearBeforeEndYear.java new file mode 100644 index 000000000..8add299ee --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/StartYearBeforeEndYear.java @@ -0,0 +1,64 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.edit.n3editing; + +import java.util.HashMap; +import java.util.Map; + +import com.hp.hpl.jena.rdf.model.Literal; + +public class StartYearBeforeEndYear implements N3Validator { + private String startFieldName; + private String endFieldName; + + public StartYearBeforeEndYear(String startFieldName, String endFieldName){ + this.startFieldName = startFieldName; + this.endFieldName = endFieldName; + } + public Map validate(EditConfiguration editConfig, + EditSubmission editSub) { + Map existingLiterals = editConfig.getLiteralsInScope(); + Literal existingStartYear = existingLiterals.get(startFieldName); + Literal existingEndYear = existingLiterals.get(endFieldName); + + Map literalsFromForm = editSub.getLiteralsFromForm(); + Literal formStartYear = literalsFromForm.get(startFieldName); + Literal formEndYear = literalsFromForm.get(endFieldName); + + Map errors = new HashMap(); + + if (formStartYear != null && formEndYear != null) { + errors.putAll(checkDateLiterals(formStartYear, formEndYear)); + } else if (formStartYear != null && existingEndYear != null) { + errors.putAll(checkDateLiterals(formStartYear, existingEndYear)); + } else if (existingStartYear != null && formEndYear != null) { + errors.putAll(checkDateLiterals(existingStartYear, formEndYear)); + } else if (existingStartYear != null && existingEndYear != null) { + errors + .putAll(checkDateLiterals(existingStartYear, + existingEndYear)); + } + + if (errors.size() != 0) + return errors; + else + return null; + } + + private Map checkDateLiterals(Literal startLit, + Literal endLit) { + Map errors = new HashMap(); + try { + int start = Integer.parseInt(startLit.getLexicalForm()); + int end = Integer.parseInt(endLit.getLexicalForm()); + if (end < start) { + errors.put(startFieldName, "Start year must be before end year"); + errors.put(endFieldName, "End year must be after start year"); + } + } catch (NumberFormatException nfe) { + + } + return errors; + } + +}