Worked on java based N3 editing. NIHVIVO-2236

This commit is contained in:
briancaruso 2011-07-02 00:19:45 +00:00
parent 7f07155cf8
commit def98f96de
9 changed files with 229 additions and 85 deletions

View file

@ -4,6 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
@ -57,38 +58,38 @@ import edu.cornell.mannlib.vitro.webapp.search.beans.ProhibitedFromSearch;
public class EditConfigurationVTwo { public class EditConfigurationVTwo {
//Strings representing required n3 for RDF //Strings representing required n3 for RDF
List<String> n3Required; List<String> n3Required = Collections.emptyList();
//String representing optional N3 for RDF //String representing optional N3 for RDF
List<String> n3Optional; List<String> n3Optional = Collections.emptyList();
//Names of variables of 'objects' i.e. URIs on form //Names of variables of 'objects' i.e. URIs on form
List<String> urisOnform; List<String> urisOnform = Collections.emptyList();
//Names of variables corresponding to data values i.e. literals on form //Names of variables corresponding to data values i.e. literals on form
List<String> literalsOnForm; List<String> literalsOnForm = Collections.emptyList();
//Names of variables corresponding to Files on form //Names of variables corresponding to Files on form
List<String> filesOnForm; List<String> filesOnForm = Collections.emptyList();
//Multi values now supported for uris and literals, so second parameter needs to be List<String> //Multi values now supported for uris and literals, so second parameter needs to be List<String>
//Mapping of variable name for object to values for object, i.e. URIs, e.g. "hasElement" = "<a.com>, <b.com>" //Mapping of variable name for object to values for object, i.e. URIs, e.g. "hasElement" = "<a.com>, <b.com>"
Map<String,List<String>> urisInScope; Map<String,List<String>> urisInScope = Collections.emptyMap();
//Mapping from variable name to values for literals //Mapping from variable name to values for literals
Map<String, List<Literal>> literalsInScope; Map<String, List<Literal>> literalsInScope = Collections.emptyMap();
//Map name of variable to sparql query which should return a one-column result set of URIs corresponding to variable //Map name of variable to sparql query which should return a one-column result set of URIs corresponding to variable
//E.g. sparql for inverse of object property //E.g. sparql for inverse of object property
Map<String,String> sparqlForAdditionalUrisInScope; Map<String,String> sparqlForAdditionalUrisInScope = Collections.emptyMap();
//Mapping variable to sparql query returning literals //Mapping variable to sparql query returning literals
Map<String,String> sparqlForAdditionalLiteralsInScope; Map<String,String> sparqlForAdditionalLiteralsInScope = Collections.emptyMap();
//Variable names to URI prefixes for variables that are allowed to have new instances created //Variable names to URI prefixes for variables that are allowed to have new instances created
Map<String,String> newResources; Map<String,String> newResources = Collections.emptyMap();
//Variable names to fields, Field = additional configuration for variable //Variable names to fields, Field = additional configuration for variable
Map<String,FieldVTwo> fields; Map<String,FieldVTwo> fields = Collections.emptyMap();
//Mapping variable name to Sparql query to find existing literals corresponding to variable, result set should be one-column multi-row of literals //Mapping variable name to Sparql query to find existing literals corresponding to variable, result set should be one-column multi-row of literals
Map<String,String>sparqlForExistingLiterals; Map<String,String>sparqlForExistingLiterals = Collections.emptyMap();
//Mapping variable name to Sparql query to find existing URIs corresponding to variable, result set should be one-column multi-row of URIs/URI resources //Mapping variable name to Sparql query to find existing URIs corresponding to variable, result set should be one-column multi-row of URIs/URI resources
Map<String,String>sparqlForExistingUris; Map<String,String>sparqlForExistingUris = Collections.emptyMap();
String subjectUri; String subjectUri;
String varNameForSubject; String varNameForSubject;
@ -113,13 +114,13 @@ public class EditConfigurationVTwo {
String formUrl; String formUrl;
String editKey; String editKey;
List<N3Validator> validators; List<N3Validator> validators = Collections.emptyList();
EditN3GeneratorVTwo n3generator; EditN3GeneratorVTwo n3generator;
private List<ModelChangePreprocessor> modelChangePreprocessors; private List<ModelChangePreprocessor> modelChangePreprocessors = Collections.emptyList();
private List<EditSubmissionVTwoPreprocessor> editSubmissionPreprocessors = null; private List<EditSubmissionVTwoPreprocessor> editSubmissionPreprocessors = Collections.emptyList();
private ProhibitedFromSearch prohibitedFromSearch; private ProhibitedFromSearch prohibitedFromSearch;

View file

@ -144,9 +144,41 @@ public class EditN3GeneratorVTwo {
* subInUris should no longer be used. * subInUris should no longer be used.
*/ */
public static List<String> subInMultiLiterals(Map<String,List<Literal>> varsToVals, List<String> n3targets){ public static List<String> subInMultiLiterals(Map<String,List<Literal>> varsToVals, List<String> n3targets){
return null; if( varsToVals == null || varsToVals.isEmpty()) return n3targets;
ArrayList<String>outv=new ArrayList<String>();
for( String n3 : n3targets ){
String tmp = n3;
for( String key : varsToVals.keySet()){
tmp = subInMultiLiterals( key, varsToVals.get(key),tmp);
}
}
return n3targets;
} }
protected static String subInMultiLiterals(String var, List<Literal>values, String n3){
String tmp = n3;
//make the multivalue literal string
List<String> n3Values = new ArrayList<String>(values.size());
for( Literal value : values){
n3Values.add( formatLiteral(value) );
}
String valueString = org.apache.commons.lang.StringUtils.join(n3Values, ",");
//Substitute it in to n3
String varRegex = "\\?" + var + "(?=\\.\\p{Space}|\\p{Space})";
String out = null;
if( valueString != null )
out = tmp.replaceAll(varRegex, Matcher.quoteReplacement( valueString ));
else
out = n3;
return out;
}
public List<String> subInLiterals(Map<String, Literal> varsToVals, List<String> targets){ public List<String> subInLiterals(Map<String, Literal> varsToVals, List<String> targets){
if( varsToVals == null || varsToVals.isEmpty()) return targets; if( varsToVals == null || varsToVals.isEmpty()) return targets;
@ -224,6 +256,7 @@ public class EditN3GeneratorVTwo {
} }
} }
public Map<String,List<String>> substituteIntoValues public Map<String,List<String>> substituteIntoValues
(Map<String,List<String>> varsToUris, (Map<String,List<String>> varsToUris,
Map<String,List<Literal>> varsToLiterals, Map<String,List<Literal>> varsToLiterals,
@ -292,7 +325,7 @@ public class EditN3GeneratorVTwo {
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
protected String formatLiteral(Literal literal) protected static String formatLiteral(Literal literal)
{ {
String datatype = literal.getDatatypeURI() ; String datatype = literal.getDatatypeURI() ;
String lang = literal.getLanguage() ; String lang = literal.getLanguage() ;
@ -407,7 +440,7 @@ public class EditN3GeneratorVTwo {
} }
} }
protected String formatURI(String uriStr) protected static String formatURI(String uriStr)
{ {
// Not as a qname - write as a quoted URIref // Not as a qname - write as a quoted URIref
// Should we unicode escape here? // Should we unicode escape here?

View file

@ -16,7 +16,7 @@ public class EditSubmissionUtils {
/* *************** Static utility methods to get EditSub from Session *********** */ /* *************** Static utility methods to get EditSub from Session *********** */
public static MultiValueEditSubmission getEditSubmissionFromSession(HttpSession sess, EditConfiguration editConfig){ public static MultiValueEditSubmission getEditSubmissionFromSession(HttpSession sess, EditConfigurationVTwo editConfig){
Map<String,MultiValueEditSubmission> submissions = Map<String,MultiValueEditSubmission> submissions =
(Map<String,MultiValueEditSubmission>)sess.getAttribute(MULTI_VALUED_EDIT_SUBMISSION); (Map<String,MultiValueEditSubmission>)sess.getAttribute(MULTI_VALUED_EDIT_SUBMISSION);
if( submissions == null ) if( submissions == null )
@ -40,7 +40,7 @@ public class EditSubmissionUtils {
public static void clearEditSubmissionInSession(HttpSession sess, MultiValueEditSubmission editSub){ public static void clearEditSubmissionInSession(HttpSession sess, MultiValueEditSubmission editSub){
if( sess == null) return; if( sess == null) return;
if( editSub == null ) return; if( editSub == null ) return;
Map<String,MultiValueEditSubmission> submissions = (Map<String,MultiValueEditSubmission>)sess.getAttribute("MULTI_VALUED_EDIT_SUBMISSION"); Map<String,MultiValueEditSubmission> submissions = (Map<String,MultiValueEditSubmission>)sess.getAttribute(MULTI_VALUED_EDIT_SUBMISSION);
if( submissions == null ){ if( submissions == null ){
throw new Error("MultiValueEditSubmission: could not get a Map of MultiValueEditSubmission from the session."); throw new Error("MultiValueEditSubmission: could not get a Map of MultiValueEditSubmission from the session.");
} }
@ -50,7 +50,7 @@ public class EditSubmissionUtils {
public static void clearAllEditSubmissionsInSession(HttpSession sess ){ public static void clearAllEditSubmissionsInSession(HttpSession sess ){
if( sess == null) return; if( sess == null) return;
sess.removeAttribute("MULTI_VALUED_EDIT_SUBMISSION"); sess.removeAttribute(MULTI_VALUED_EDIT_SUBMISSION);
} }
public static Map<String, String[]> convertParams( public static Map<String, String[]> convertParams(

View file

@ -2,10 +2,13 @@
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import java.util.ArrayList;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.Field;
/** /**
* Generate the EditConfiguration for the Institutional Internal Class Form. * Generate the EditConfiguration for the Institutional Internal Class Form.
@ -15,12 +18,45 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTw
*/ */
public class InstitutionalInternalClassForm implements EditConfigurationGenerator { public class InstitutionalInternalClassForm implements EditConfigurationGenerator {
String INTERNAL_CLASS_ANNOTATION_URI= "<http://example.com/vivo#ChangeMeUniveristy>";
@Override @Override
public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) { public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) {
EditConfigurationVTwo editConfig = new EditConfigurationVTwo(); EditConfigurationVTwo editConfig = new EditConfigurationVTwo();
//set up the template for the form
editConfig.setTemplate("institutionalInternalClassForm.ftl"); editConfig.setTemplate("institutionalInternalClassForm.ftl");
//Set the n3 that is required for the edit
//bdc34: don't know how the annotation will be structured
StringList n3ForInternalClass =new StringList( " ?internalClassUri "+INTERNAL_CLASS_ANNOTATION_URI+" \"true\" . " );
editConfig.setN3Required( n3ForInternalClass );
//bdc34: maybe this is redundent with the keys of the fields Map?
editConfig.setUrisOnform( new StringList( "internalClassUri" ));
Field field = new Field();
field.setAssertions( n3ForInternalClass );
//maybe field should have a way to get an option list?
//field.setOptionGenerator( new InternalClassOptionGenerator() );
//edit config should have URL to submit the form to
//editConfig.setUrl
//set the url pattern that the client will return to after a successful edit
editConfig.setUrlPatternToReturnTo("/siteAdmin");
editConfig.setSubmitToUrl("/edit/process");
return editConfig; return editConfig;
} }
public class StringList extends ArrayList<String>{
public StringList( String ... strings){
super();
for( String str: strings){
this.add(str);
}
}
}
} }

View file

@ -218,7 +218,7 @@ public class EditRequestDispatchController extends FreemarkerHttpServlet {
//what goes in the map for templates? //what goes in the map for templates?
Map<String,Object> templateData = new HashMap<String,Object>(); Map<String,Object> templateData = new HashMap<String,Object>();
templateData.put("EditConfiguration", new EditConfigurationTemplateModel( editConfig, vreq)); templateData.put("editConfiguration", new EditConfigurationTemplateModel( editConfig, vreq));
templateData.put("formTitle", formTitle); templateData.put("formTitle", formTitle);
return new TemplateResponseValues(template, templateData); return new TemplateResponseValues(template, templateData);

View file

@ -16,27 +16,33 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.IndividualImpl; import edu.cornell.mannlib.vitro.webapp.beans.IndividualImpl;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.TemplateProcessingHelper.TemplateProcessingException; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.TemplateProcessingHelper.TemplateProcessingException;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.RedirectResponseValues;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; 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.controller.freemarker.responsevalues.TemplateResponseValues;
import edu.cornell.mannlib.vitro.webapp.dao.InsertException; import edu.cornell.mannlib.vitro.webapp.dao.InsertException;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.processEdit.EditN3Utils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditSubmissionUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.AdditionsAndRetractions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.AdditionsAndRetractions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditSubmissionUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.MultiValueEditSubmission; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.MultiValueEditSubmission;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.ProcessRdfForm; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.ProcessRdfForm;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.processEdit.EditN3Utils;
/** /**
* This servlet will process EditConfigurations with query parameters * This servlet will process EditConfigurations with query parameters
@ -54,33 +60,25 @@ public class ProcessRdfFormController extends FreemarkerHttpServlet{
// this will need to be converted from a jsp to something else // this will need to be converted from a jsp to something else
public static final String POST_EDIT_CLEANUP_JSP = "postEditCleanUp.jsp"; public static final String POST_EDIT_CLEANUP_JSP = "postEditCleanUp.jsp";
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException{
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException{
VitroRequest vreq = new VitroRequest(request);
@Override
protected ResponseValues processRequest(VitroRequest vreq) {
//get the EditConfiguration //get the EditConfiguration
EditConfigurationVTwo configuration = getEditConfiguration(request); EditConfigurationVTwo configuration = getEditConfiguration(vreq);
if(configuration == null){ if(configuration == null)
doEditConfigNotFound( vreq, response); throw new Error("No edit configuration found.");
return;
}
//get the EditSubmission //get the EditSubmission
MultiValueEditSubmission submission = new MultiValueEditSubmission(vreq.getParameterMap(), configuration); MultiValueEditSubmission submission = new MultiValueEditSubmission(vreq.getParameterMap(), configuration);
EditSubmissionUtils.putEditSubmissionInSession(request.getSession(), submission); EditSubmissionUtils.putEditSubmissionInSession(vreq.getSession(), submission);
boolean hasErrors = doValidationErrors(vreq, configuration, submission, response); ResponseValues errorResponse = doValidationErrors(vreq, configuration, submission);
if( hasErrors) if( errorResponse != null )
return; //processValidationErrors() already forwarded to redisplay the form with validation messages return errorResponse;
// get the models to work with in case the write model and query model are not the defaults // get the models to work with in case the write model and query model are not the defaults
OntModel queryModel = configuration.getQueryModelSelector().getModel(request, getServletContext()); OntModel queryModel = configuration.getQueryModelSelector().getModel(vreq, getServletContext());
OntModel writeModel = configuration.getWriteModelSelector().getModel(request,getServletContext()); OntModel writeModel = configuration.getWriteModelSelector().getModel(vreq,getServletContext());
AdditionsAndRetractions changes; AdditionsAndRetractions changes;
if(configuration.isUpdate()){ if(configuration.isUpdate()){
@ -97,32 +95,32 @@ public class ProcessRdfFormController extends FreemarkerHttpServlet{
ProcessRdfForm.applyChangesToWriteModel(changes, queryModel, writeModel, EditN3Utils.getEditorUri(vreq) ); ProcessRdfForm.applyChangesToWriteModel(changes, queryModel, writeModel, EditN3Utils.getEditorUri(vreq) );
//Here we are trying to get the entity to return to URL, //Here we are trying to get the entity to return to URL,
//Maybe this should be in POST_EDIT_CLEANUP?
if( configuration.getEntityToReturnTo() != null ){ if( configuration.getEntityToReturnTo() != null ){
request.setAttribute("entityToReturnTo", ProcessRdfForm.substitueForURL( configuration, submission)); vreq.setAttribute("entityToReturnTo", ProcessRdfForm.substitueForURL( configuration, submission));
} }
doPostEdit(vreq,response); return doPostEdit(vreq);
} }
private EditConfigurationVTwo getEditConfiguration(HttpServletRequest request) { private EditConfigurationVTwo getEditConfiguration(HttpServletRequest request) {
HttpSession session = request.getSession(); HttpSession session = request.getSession();
EditConfigurationVTwo editConfiguration = EditConfigurationVTwo.getConfigFromSession(session, request); EditConfigurationVTwo editConfiguration = EditConfigurationVTwo.getConfigFromSession(session, request);
return editConfiguration; return editConfiguration;
} }
private void doEditConfigNotFound(VitroRequest request, HttpServletResponse response) {
HashMap<String,Object>map = new HashMap<String,Object>();
map.put("message", "No editing configuration found, cannot process edit.");
ResponseValues values = new TemplateResponseValues("message.ftl", map);
try {
doResponse(request,response,values);
} catch (TemplateProcessingException e) {
log.error("Could not process template for doEditConfigNotFound()",e);
}
}
private boolean doValidationErrors(VitroRequest vreq, // private ResponseValues doEditConfigNotFound(VitroRequest request) {
EditConfigurationVTwo editConfiguration, MultiValueEditSubmission submission, // HashMap<String,Object>map = new HashMap<String,Object>();
HttpServletResponse response) throws ServletException, IOException { // map.put("message", "No editing configuration found, cannot process edit.");
// ResponseValues values = new TemplateResponseValues("message.ftl", map);
// try {
// doResponse(request,values);
// } catch (TemplateProcessingException e) {
// log.error("Could not process template for doEditConfigNotFound()",e);
// }
// }
private ResponseValues doValidationErrors(VitroRequest vreq,
EditConfigurationVTwo editConfiguration, MultiValueEditSubmission submission) {
Map<String, String> errors = submission.getValidationErrors(); Map<String, String> errors = submission.getValidationErrors();
@ -131,16 +129,85 @@ public class ProcessRdfFormController extends FreemarkerHttpServlet{
vreq.setAttribute("formUrl", form); vreq.setAttribute("formUrl", form);
vreq.setAttribute("view", vreq.getParameter("view")); vreq.setAttribute("view", vreq.getParameter("view"));
RequestDispatcher requestDispatcher = vreq.getRequestDispatcher(editConfiguration.getFormUrl()); return new RedirectResponseValues(editConfiguration.getFormUrl());
requestDispatcher.forward(vreq, response);
return true;
} }
return false; return null; //no errors
} }
private void doPostEdit(VitroRequest vreq, HttpServletResponse response) throws ServletException, IOException { private RedirectResponseValues doPostEdit(VitroRequest vreq ) {
RequestDispatcher requestDispatcher = vreq.getRequestDispatcher(POST_EDIT_CLEANUP_JSP); String resourceToRedirectTo = null;
requestDispatcher.forward(vreq, response); String urlPattern = null;
String predicateLocalName = null;
String predicateAnchor = "";
HttpSession session = vreq.getSession(false);
if( session != null ) {
EditConfigurationVTwo editConfig = EditConfigurationVTwo.getConfigFromSession(session,vreq);
//In order to support back button resubmissions, don't remove the editConfig from session.
//EditConfiguration.clearEditConfigurationInSession(session, editConfig);
MultiValueEditSubmission editSub = EditSubmissionUtils.getEditSubmissionFromSession(session,editConfig);
EditSubmissionUtils.clearEditSubmissionInSession(session, editSub);
if( editConfig != null ){
String predicateUri = editConfig.getPredicateUri();
if( predicateUri != null ){
try{
Property prop = ResourceFactory.createProperty(predicateUri);
predicateLocalName = prop.getLocalName();
}catch (com.hp.hpl.jena.shared.InvalidPropertyURIException e){
log.debug("could not convert predicateUri into a valid URI",e);
}
}
if( editConfig.getEntityToReturnTo() != null && editConfig.getEntityToReturnTo().startsWith("?") ){
resourceToRedirectTo = (String)vreq.getAttribute("entityToReturnTo");
}else{
resourceToRedirectTo = editConfig.getEntityToReturnTo();
}
//if there is no entity to return to it is likely a cancel
if( resourceToRedirectTo == null || resourceToRedirectTo.length() == 0 )
resourceToRedirectTo = editConfig.getSubjectUri();
}
//set up base URL
String cancel = vreq.getParameter("cancel");
String urlPatternToReturnTo = null;
String urlPatternToCancelTo = null;
if (editConfig != null) {
urlPatternToReturnTo = editConfig.getUrlPatternToReturnTo();
urlPatternToCancelTo = vreq.getParameter("url");
}
// If a different cancel return path has been designated, use it. Otherwise, use the regular return path.
if (cancel != null && cancel.equals("true") && !StringUtils.isEmpty(urlPatternToCancelTo)) {
urlPattern = urlPatternToCancelTo;
} else if (!StringUtils.isEmpty(urlPatternToReturnTo)) {
urlPattern = urlPatternToReturnTo;
} else {
urlPattern = "/individual";
}
//looks like a redirect to a profile page, try to add anchor for property that was just edited.
if( urlPattern.endsWith("individual") || urlPattern.endsWith("entity") ){
if( predicateLocalName != null && predicateLocalName.length() > 0){
predicateAnchor = "#" + predicateLocalName;
vreq.setAttribute("predicateAnchor", predicateAnchor);
}
}
}
if( resourceToRedirectTo != null ){
UrlBuilder.ParamMap paramMap= new UrlBuilder.ParamMap();
paramMap.put("uri", resourceToRedirectTo);
paramMap.put("extra","true"); //for ie6
return new RedirectResponseValues( UrlBuilder.getUrl(urlPattern,paramMap) + predicateAnchor );
} else if ( !urlPattern.endsWith("individual") && !urlPattern.endsWith("entity") ){
return new RedirectResponseValues( urlPattern );
}
return new RedirectResponseValues( UrlBuilder.getUrl(Route.LOGIN) );
} }
//Move to EditN3Utils but keep make new uris here //Move to EditN3Utils but keep make new uris here

View file

@ -24,6 +24,6 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel {
} }
public String getSubmitToUrl(){ public String getSubmitToUrl(){
return editConfig.getSubmitToUrl(); return getUrl( editConfig.getSubmitToUrl() );
} }
} }

View file

@ -6,14 +6,21 @@ Associated with generator:
edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.InstitutionalInternalClassForm edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.InstitutionalInternalClassForm
--> -->
<h2>Lorem ipsum dolor sit amet</h2> <h2>Lorem ipsum dolor sit amet</h2>
<form class="editForm" action = "xyz"> <form class="editForm" action = "${editConfiguration.submitToUrl}">
<p>consectetur adipisicing elit</p>
<input type="text" id="objectVar" size="80" /> <p>consectetur adipisicing elit</p>
<div style="margin-top: 0.2em">
<input type="submit" id="submit" value="submit" cancel="true"/> <input type="text" name="internalClassUri" size="80" />
</div>
</form> <input type="hidden" name="editKey" value="${editConfiguration.editKey}" />
<div style="margin-top: 0.2em">
<input type="submit" value="submit" />
</div>
</form>
<@dumpAll/>