updates to date time interval forms to get edit mode based not on front end editing utils but whether or not object uri present, also updated primitive rdf edit to enable concept page to remove relationships inspite of vivo policy's restriction on "delete" actions on those properties

This commit is contained in:
hjkhjk54 2011-12-05 19:21:38 +00:00
parent 654f5b6efb
commit 820cf314b5
3 changed files with 42 additions and 34 deletions

View file

@ -4,6 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.controller.edit;
import java.io.IOException; import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@ -22,24 +23,23 @@ import com.hp.hpl.jena.shared.Lock;
import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper; import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseBasicAjaxControllers;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.ajax.VitroAjaxController; import edu.cornell.mannlib.vitro.webapp.controller.ajax.VitroAjaxController;
import edu.cornell.mannlib.vitro.webapp.dao.jena.DependentResourceDeleteJena; import edu.cornell.mannlib.vitro.webapp.dao.jena.DependentResourceDeleteJena;
import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent; import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.StandardModelSelector;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.processEdit.EditN3Utils; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.processEdit.EditN3Utils;
public class PrimitiveRdfEdit extends VitroAjaxController { public class PrimitiveRdfEdit extends VitroAjaxController {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** //Using the same setsup as primitive delete
* No need to restrict authorization here. doRequest() will return an error @Override
* if the user is not authorized. protected Actions requiredActions(VitroRequest vreq) {
*/ return new Actions(new UseBasicAjaxControllers());
@Override }
protected Actions requiredActions(VitroRequest vreq) {
return Actions.AUTHORIZED;
}
@Override @Override
protected void doRequest(VitroRequest vreq, protected void doRequest(VitroRequest vreq,
@ -93,12 +93,6 @@ public class PrimitiveRdfEdit extends VitroAjaxController {
.getDependentResourceDeleteForChange(toBeAdded, .getDependentResourceDeleteForChange(toBeAdded,
toBeRetracted, getWriteModel(vreq)); toBeRetracted, getWriteModel(vreq));
toBeRetracted.add(depResRetractions); toBeRetracted.add(depResRetractions);
if (!isAuthorized(vreq, toBeAdded, toBeRetracted)) {
doError(response, "Not authorized for these RDF edits", HttpStatus.SC_UNAUTHORIZED);
return;
}
processChanges(editorUri, getWriteModel(vreq), toBeAdded, toBeRetracted); processChanges(editorUri, getWriteModel(vreq), toBeAdded, toBeRetracted);
} catch (Exception e) { } catch (Exception e) {
doError(response,e.getMessage(),HttpStatus.SC_INTERNAL_SERVER_ERROR); doError(response,e.getMessage(),HttpStatus.SC_INTERNAL_SERVER_ERROR);
@ -106,16 +100,16 @@ public class PrimitiveRdfEdit extends VitroAjaxController {
} }
private boolean isAuthorized(VitroRequest vreq, Model toBeAdded, Model toBeRetracted) {
return PolicyHelper.isAuthorizedToAdd(vreq, toBeAdded)
&& PolicyHelper.isAuthorizedToDrop(vreq, toBeRetracted);
}
/** Package access to allow for unit testing. */ /** Package access to allow for unit testing. */
void processChanges(String editorUri, OntModel writeModel, void processChanges(String editorUri, OntModel writeModel,
Model toBeAdded, Model toBeRetracted) throws Exception { Model toBeAdded, Model toBeRetracted) throws Exception {
Lock lock = writeModel.getLock(); Lock lock = null;
log.debug("Model to be retracted is");
StringWriter sw = new StringWriter();
toBeRetracted.write(sw, "N3");
log.debug(sw.toString());
try { try {
lock = writeModel.getLock();
lock.enterCriticalSection(Lock.WRITE); lock.enterCriticalSection(Lock.WRITE);
writeModel.getBaseModel().notifyEvent(new EditEvent(editorUri, true)); writeModel.getBaseModel().notifyEvent(new EditEvent(editorUri, true));
writeModel.add(toBeAdded); writeModel.add(toBeAdded);
@ -152,12 +146,8 @@ public class PrimitiveRdfEdit extends VitroAjaxController {
return models; return models;
} }
private OntModel getWriteModel(HttpServletRequest request){ private OntModel getWriteModel(VitroRequest vreq){
HttpSession session = request.getSession(false); return StandardModelSelector.selector.getModel(vreq,getServletContext());
if( session == null || session.getAttribute("jenaOntModel") == null )
return (OntModel)getServletContext().getAttribute("jenaOntModel");
else
return (OntModel)session.getAttribute("jenaOntModel");
} }
/** Package access to allow for unit testing. */ /** Package access to allow for unit testing. */

View file

@ -14,9 +14,12 @@ import com.hp.hpl.jena.vocabulary.XSD;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeIntervalValidationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
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.VTwo.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode;
import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils;
@ -78,7 +81,8 @@ public class DateTimeIntervalFormGenerator extends
conf.addField(startField); conf.addField(startField);
conf.addField(endField); conf.addField(endField);
//Need to add validators
conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField"));
//Adding additional data, specifically edit mode //Adding additional data, specifically edit mode
addFormSpecificData(conf, vreq); addFormSpecificData(conf, vreq);
//Prepare //Prepare
@ -162,8 +166,14 @@ public class DateTimeIntervalFormGenerator extends
} }
public EditMode getEditMode(VitroRequest vreq) { public EditMode getEditMode(VitroRequest vreq) {
List<String> predicates = new ArrayList<String>(); //In this case, the original jsp didn't rely on FrontEndEditingUtils
predicates.add(toDateTimeInterval); //but instead relied on whether or not the object Uri existed
return EditModeUtils.getEditMode(vreq, predicates); String objectUri = EditConfigurationUtils.getObjectUri(vreq);
EditMode editMode = FrontEndEditingUtils.EditMode.ADD;
if(objectUri != null && !objectUri.isEmpty()) {
editMode = FrontEndEditingUtils.EditMode.EDIT;
}
return editMode;
} }
} }

View file

@ -15,8 +15,10 @@ import com.hp.hpl.jena.vocabulary.XSD;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
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.VTwo.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode;
import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils;
@ -101,8 +103,14 @@ public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator
} }
public EditMode getEditMode(VitroRequest vreq) { public EditMode getEditMode(VitroRequest vreq) {
List<String> predicates = new ArrayList<String>(); //In this case, the original jsp didn't rely on FrontEndEditingUtils
predicates.add(toDateTimeValue); //but instead relied on whether or not the object Uri existed
return EditModeUtils.getEditMode(vreq, predicates); String objectUri = EditConfigurationUtils.getObjectUri(vreq);
EditMode editMode = FrontEndEditingUtils.EditMode.ADD;
if(objectUri != null && !objectUri.isEmpty()) {
editMode = FrontEndEditingUtils.EditMode.EDIT;
}
return editMode;
} }
} }