From 57ff1c461b6d43fb60053ddd316fff5f627b83ef Mon Sep 17 00:00:00 2001 From: bdc34 Date: Tue, 9 Nov 2010 20:36:06 +0000 Subject: [PATCH] Working on date time with precision edit element, NIHVIVO-295. Changed EditN3Generator to use a different regex to substitute values into the N3. --- webapp/config/tlds/vitroForm.tld | 2 +- .../freemarker/FreemarkerHttpServlet.java | 9 +++- .../webapp/edit/elements/EditElement.java | 12 +++++ .../edit/n3editing/EditN3Generator.java | 6 ++- .../webapp/edit/n3editing/EditSubmission.java | 46 +++++++++++++------ 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/webapp/config/tlds/vitroForm.tld b/webapp/config/tlds/vitroForm.tld index 7838e0b09..7df1377f0 100644 --- a/webapp/config/tlds/vitroForm.tld +++ b/webapp/config/tlds/vitroForm.tld @@ -134,7 +134,7 @@ empty type - true + false true diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java index c713c7155..0d11449f1 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java @@ -330,8 +330,13 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { } } - // Add any Java directives the templates should have access to - private Map getDirectives() { + /** + * Add any Java directives the templates should have access to. + * This is public and static so that these may be used by other classes during + * the transition from JSP to Freemarker. + * @return + */ + public static Map getDirectives() { Map map = new HashMap(); map.put("describe", new edu.cornell.mannlib.vitro.webapp.web.directives.dump.DescribeDirective()); map.put("dump", new edu.cornell.mannlib.vitro.webapp.web.directives.dump.DumpDirective()); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/elements/EditElement.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/elements/EditElement.java index 690146d0e..dcc6e7484 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/elements/EditElement.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/elements/EditElement.java @@ -20,6 +20,18 @@ public interface EditElement { public Map getLiterals(String fieldName, EditConfiguration editConfig, Map queryParameters ); + /** + * This is a method to get a map of variable name to URI value from the submitted form. + */ + public Map + getURIs(String fieldName, EditConfiguration editConfig, Map queryParameters ); + + /** + * Gets validation error messages. Returns an empty list if there are no errors. + */ + public Map + getValidationMessages(String fieldName, EditConfiguration editConfig, Map queryParameters); + /** * This is a method to generate the HTML output for a form element. It should use a freemarker template * to produce the output. diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditN3Generator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditN3Generator.java index 98cce94df..a040b72ff 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditN3Generator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditN3Generator.java @@ -52,11 +52,13 @@ public class EditN3Generator { } + public static String subInUris(String var, String value, String target){ //empty URIs get skipped if( var == null || var.length() == 0 || value==null ) return target; - String varRegex = "\\?" + var + "(?=[\\W])"; + /* var followed by dot some whitespace or var followed by whitespace*/ + String varRegex = "\\?" + var + "(?=\\.\\p{Space}|\\p{Space})"; String out = null; if("".equals(value)) out = target.replaceAll(varRegex,">::" + var + " was BLANK::< "); @@ -106,7 +108,7 @@ public class EditN3Generator { * */ protected String subInLiterals(String var, Literal literal, String target){ - String varRegex = "\\?" + var + "(?=[\\W])"; + String varRegex = "\\?" + var + "(?=\\.\\p{Space}|\\p{Space})"; if (target==null ) { log.error("subInLiterals was passed a null target"); return "blankBecauseTargetOrValueWasNull"; 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 d15a3994b..044182820 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 @@ -109,7 +109,7 @@ public class EditSubmission { log.debug("time fields for parameter " + var + " were not on form" ); } } else if( field.getEditElement() != null ){ - literalsFromForm.putAll( getLiteralForField(var,editConfig,queryParameters)); + log.debug("skipping field with edit element, it should not be in literals on form list"); }else{ String[] valuesArray = queryParameters.get(var); List valueList = (valuesArray != null) ? Arrays.asList(valuesArray) : null; @@ -154,23 +154,39 @@ public class EditSubmission { } } + processEditElementFields(editConfig,queryParameters); + + if( log.isDebugEnabled() ) + log.debug( this.toString() ); } - /** - * Get the literals for the field using the field's special editElement. - * @param var - * @param editConfig - * @param queryParameters - * @return - */ - private Map getLiteralForField( - String var, EditConfiguration editConfig, - Map queryParameters) { - Field field = editConfig.getField(var); - EditElement ee = field.getEditElement(); - return ee.getLiterals(var, editConfig, queryParameters); + protected void processEditElementFields(EditConfiguration editConfig, Map queryParameters ){ + for( String fieldName : editConfig.getFields().keySet()){ + Field field = editConfig.getFields().get(fieldName); + if( field != null && field.getEditElement() != null ){ + EditElement element = field.getEditElement(); + log.debug("Checking EditElement for field " + fieldName + " type: " + element.getClass().getName()); + + //check for validation error messages + Map errMsgs = + element.getValidationMessages(fieldName, editConfig, queryParameters); + validationErrors.putAll(errMsgs); + + if( errMsgs == null || errMsgs.isEmpty()){ + //only check for uris and literals when element has no validation errors + Map urisFromElement = element.getURIs(fieldName, editConfig, queryParameters); + if( urisFromElement != null ) + urisFromForm.putAll(urisFromElement); + Map literalsFromElement = element.getLiterals(fieldName, editConfig, queryParameters); + if( literalsFromElement != null ) + literalsFromForm.putAll(literalsFromElement); + }else{ + log.debug("got validation errors for field " + fieldName + " not processing field for literals or URIs"); + } + } + } } - + public EditSubmission(Map queryParameters, EditConfiguration editConfig, Map> fileItems) { this(queryParameters,editConfig);