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 extends String, ? extends Literal> 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);