NIHVIVO-646 Autocomplete, remove author functionality
This commit is contained in:
parent
0f6fd1b39a
commit
fd0df8b281
7 changed files with 259 additions and 171 deletions
|
@ -36,3 +36,6 @@ log4j.rootLogger=INFO, AllAppender
|
||||||
log4j.logger.org.apache.catalina=INFO
|
log4j.logger.org.apache.catalina=INFO
|
||||||
log4j.logger.edu.cornell.mannlib.vitro.webapp.ConfigurationProperties=INFO
|
log4j.logger.edu.cornell.mannlib.vitro.webapp.ConfigurationProperties=INFO
|
||||||
log4j.logger.edu.cornell.mannlib.vitro.webapp.filestorage.updater.FileStorageUpdater=INFO
|
log4j.logger.edu.cornell.mannlib.vitro.webapp.filestorage.updater.FileStorageUpdater=INFO
|
||||||
|
|
||||||
|
log4j.logger.edu.cornell.mannlib.vitro.webapp.search.controller=DEBUG
|
||||||
|
|
||||||
|
|
|
@ -1144,6 +1144,15 @@
|
||||||
<url-pattern>/edit/primitiveRdfEdit</url-pattern>
|
<url-pattern>/edit/primitiveRdfEdit</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>primitiveRdfDelete</servlet-name>
|
||||||
|
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.edit.PrimitiveRdfDelete</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>primitiveRdfDelete</servlet-name>
|
||||||
|
<url-pattern>/edit/primitiveRdfDelete</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
<!-- ============================== servlet-mappings ======================== -->
|
<!-- ============================== servlet-mappings ======================== -->
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>fetch</servlet-name>
|
<servlet-name>fetch</servlet-name>
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.edit;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.StringUtils;
|
||||||
|
import freemarker.template.Configuration;
|
||||||
|
|
||||||
|
public class PrimitiveRdfDelete extends PrimitiveRdfEdit {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private static final Log log = LogFactory.getLog(PrimitiveRdfDelete.class);
|
||||||
|
|
||||||
|
protected void processRequest(VitroRequest vreq, HttpServletResponse response) {
|
||||||
|
|
||||||
|
String uriToDelete = vreq.getParameter("deletion");
|
||||||
|
if (StringUtils.isEmpty(uriToDelete)) {
|
||||||
|
doError(response, "No individual specified for deletion", 500);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check permissions
|
||||||
|
// The permission-checking code should be inherited from superclass
|
||||||
|
boolean hasPermission = true;
|
||||||
|
|
||||||
|
if( !hasPermission ){
|
||||||
|
//if not okay, send error message
|
||||||
|
doError(response,"Insufficent permissions.",HttpStatus.SC_UNAUTHORIZED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
WebappDaoFactory wdf = vreq.getWebappDaoFactory();
|
||||||
|
IndividualDao idao = wdf.getIndividualDao();
|
||||||
|
int result = idao.deleteIndividual(uriToDelete);
|
||||||
|
if (result == 1) {
|
||||||
|
doError(response, "Error deleting individual", 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -4,11 +4,14 @@ 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.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
@ -25,6 +28,8 @@ import com.hp.hpl.jena.shared.Lock;
|
||||||
import edu.cornell.mannlib.vedit.beans.LoginFormBean;
|
import edu.cornell.mannlib.vedit.beans.LoginFormBean;
|
||||||
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.dao.IndividualDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
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.EditN3Utils;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.EditN3Utils;
|
||||||
|
@ -80,22 +85,27 @@ public class PrimitiveRdfEdit extends FreeMarkerHttpServlet{
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
processRequest(vreq, response);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void processRequest(VitroRequest vreq, HttpServletResponse response) {
|
||||||
/* Predefined values for RdfFormat are "RDF/XML",
|
/* Predefined values for RdfFormat are "RDF/XML",
|
||||||
* "N-TRIPLE", "TURTLE" (or "TTL") and "N3". null represents
|
* "N-TRIPLE", "TURTLE" (or "TTL") and "N3". null represents
|
||||||
* the default language, "RDF/XML". "RDF/XML-ABBREV" is a synonym for "RDF/XML" */
|
* the default language, "RDF/XML". "RDF/XML-ABBREV" is a synonym for "RDF/XML" */
|
||||||
String format = request.getParameter("RdfFormat");
|
String format = vreq.getParameter("RdfFormat");
|
||||||
if( format == null )
|
if( format == null )
|
||||||
format = "N3";
|
format = "N3";
|
||||||
if ( ! ("N-TRIPLE".equals(format) || "TURTLE".equals(format) || "TTL".equals(format)
|
if ( ! ("N-TRIPLE".equals(format) || "TURTLE".equals(format) || "TTL".equals(format)
|
||||||
|| "N3".equals(format)|| "RDF/XML-ABBREV".equals(format) || "RDF/XML".equals(format) )){
|
|| "N3".equals(format)|| "RDF/XML-ABBREV".equals(format) || "RDF/XML".equals(format) )){
|
||||||
doError(response,"RdfFormat was not recoganized.",500);
|
doError(response,"RdfFormat was not recognized.",500);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//parse RDF
|
//parse RDF
|
||||||
Set<Model> additions= null;
|
Set<Model> additions= null;
|
||||||
try {
|
try {
|
||||||
additions = parseRdfParam(request.getParameterValues("additions"),format);
|
additions = parseRdfParam(vreq.getParameterValues("additions"),format);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST);
|
doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST);
|
||||||
return;
|
return;
|
||||||
|
@ -103,29 +113,32 @@ public class PrimitiveRdfEdit extends FreeMarkerHttpServlet{
|
||||||
|
|
||||||
Set<Model> retractions = null;
|
Set<Model> retractions = null;
|
||||||
try {
|
try {
|
||||||
retractions = parseRdfParam(request.getParameterValues("retractions"),format);
|
retractions = parseRdfParam(vreq.getParameterValues("retractions"),format);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST);
|
doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//check permissions
|
//check permissions
|
||||||
//TODO: (bdc34)This is not yet implemented, must check the IDs against the policies for permissons before doing an edit!
|
//TODO: (bdc34)This is not yet implemented, must check the IDs against the policies for permissons before doing an edit!
|
||||||
|
// rjy7 put policy check in separate method so subclasses can inherit
|
||||||
boolean hasPermission = true;
|
boolean hasPermission = true;
|
||||||
|
|
||||||
if( !hasPermission ){
|
if( !hasPermission ){
|
||||||
//if not okay, send error message
|
//if not okay, send error message
|
||||||
doError(response,"Insufficent permissions.",HttpStatus.SC_UNAUTHORIZED);
|
doError(response,"Insufficent permissions.",HttpStatus.SC_UNAUTHORIZED);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( hasPermission ){
|
ServletContext sc = getServletContext();
|
||||||
String editorUri = EditN3Utils.getEditorUri(vreq,request.getSession(false),getServletContext());
|
String editorUri = EditN3Utils.getEditorUri(vreq, vreq.getSession(false), sc);
|
||||||
try {
|
try {
|
||||||
processChanges( additions, retractions, getWriteModel(request),getQueryModel(request), editorUri);
|
processChanges( additions, retractions, getWriteModel(vreq),getQueryModel(vreq), editorUri);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
doError(response,e.getMessage(),HttpStatus.SC_INTERNAL_SERVER_ERROR);
|
doError(response,e.getMessage(),HttpStatus.SC_INTERNAL_SERVER_ERROR);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void processChanges(Set<Model> additions, Set<Model> retractions, OntModel writeModel, OntModel queryModel, String editorURI ) throws Exception{
|
protected void processChanges(Set<Model> additions, Set<Model> retractions, OntModel writeModel, OntModel queryModel, String editorURI ) throws Exception{
|
||||||
|
@ -137,10 +150,11 @@ public class PrimitiveRdfEdit extends FreeMarkerHttpServlet{
|
||||||
for(Model m : retractions)
|
for(Model m : retractions)
|
||||||
r.add(m);
|
r.add(m);
|
||||||
|
|
||||||
procesChanges(a,r,writeModel,queryModel,editorURI);
|
processChanges(a,r,writeModel,queryModel,editorURI);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void procesChanges(Model additions, Model retractions, OntModel writeModel, OntModel queryModel, String editorURI ) throws Exception{
|
protected void processChanges(Model additions, Model retractions, OntModel writeModel, OntModel queryModel, String editorURI ) throws Exception{
|
||||||
/*
|
/*
|
||||||
* Do a diff on the additions and retractions and then only add the delta to the jenaOntModel.
|
* Do a diff on the additions and retractions and then only add the delta to the jenaOntModel.
|
||||||
*/
|
*/
|
||||||
|
@ -165,8 +179,9 @@ public class PrimitiveRdfEdit extends FreeMarkerHttpServlet{
|
||||||
writeModel.getBaseModel().notifyEvent(new EditEvent(editorURI,false));
|
writeModel.getBaseModel().notifyEvent(new EditEvent(editorURI,false));
|
||||||
lock.leaveCriticalSection();
|
lock.leaveCriticalSection();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert the values from a parameters into RDF models.
|
* Convert the values from a parameters into RDF models.
|
||||||
|
@ -191,7 +206,7 @@ public class PrimitiveRdfEdit extends FreeMarkerHttpServlet{
|
||||||
return models;
|
return models;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doError(HttpServletResponse response, String errorMsg,int httpstatus){
|
protected void doError(HttpServletResponse response, String errorMsg,int httpstatus){
|
||||||
response.setStatus(httpstatus);
|
response.setStatus(httpstatus);
|
||||||
try {
|
try {
|
||||||
response.getWriter().write(errorMsg);
|
response.getWriter().write(errorMsg);
|
||||||
|
|
|
@ -226,12 +226,16 @@ public class AutocompleteController extends FreeMarkerHttpServlet implements Sea
|
||||||
|
|
||||||
// Run the search term through the query parser so that it gets normalized in the same
|
// Run the search term through the query parser so that it gets normalized in the same
|
||||||
// way the index is normalized.
|
// way the index is normalized.
|
||||||
QueryParser queryParser = new QueryParser(Entity2LuceneDoc.term.NAME, analyzer);
|
// QueryParser queryParser = new QueryParser(Entity2LuceneDoc.term.NAMEUNSTEMMED, analyzer);
|
||||||
query = queryParser.parse(querystr + "*");
|
// query = queryParser.parse(querystr + "*");
|
||||||
|
|
||||||
|
querystr = querystr.toLowerCase();
|
||||||
{
|
{
|
||||||
BooleanQuery boolQuery = new BooleanQuery();
|
BooleanQuery boolQuery = new BooleanQuery();
|
||||||
boolQuery.add(query, BooleanClause.Occur.MUST);
|
boolQuery.add(
|
||||||
|
new WildcardQuery(new Term(Entity2LuceneDoc.term.NAME, querystr + '*')),
|
||||||
|
BooleanClause.Occur.MUST);
|
||||||
|
//boolQuery.add(query, BooleanClause.Occur.MUST);
|
||||||
Object param = request.getParameter("type");
|
Object param = request.getParameter("type");
|
||||||
boolQuery.add( new TermQuery(
|
boolQuery.add( new TermQuery(
|
||||||
new Term(Entity2LuceneDoc.term.RDFTYPE,
|
new Term(Entity2LuceneDoc.term.RDFTYPE,
|
||||||
|
|
|
@ -11,11 +11,18 @@ import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import com.hp.hpl.jena.ontology.OntModel;
|
import com.hp.hpl.jena.ontology.OntModel;
|
||||||
|
import com.hp.hpl.jena.ontology.OntModelSpec;
|
||||||
import com.hp.hpl.jena.rdf.model.Model;
|
import com.hp.hpl.jena.rdf.model.Model;
|
||||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena;
|
||||||
|
|
||||||
public class PrimitiveRdfEditTest {
|
public class PrimitiveRdfEditTest {
|
||||||
|
|
||||||
|
OntModel testModel;
|
||||||
|
WebappDaoFactory wdf;
|
||||||
|
|
||||||
private String testN3a =
|
private String testN3a =
|
||||||
"<http://example.com/motorcycles/honda/vtl1000> <http://example.com/engines/displacement> \"1000cm3\" ." +
|
"<http://example.com/motorcycles/honda/vtl1000> <http://example.com/engines/displacement> \"1000cm3\" ." +
|
||||||
"<http://example.com/motorcycles/honda/919> <http://example.com/engines/displacement> \"919cm3\" ." ;
|
"<http://example.com/motorcycles/honda/919> <http://example.com/engines/displacement> \"919cm3\" ." ;
|
||||||
|
@ -25,18 +32,12 @@ public class PrimitiveRdfEditTest {
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception { }
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testProcessChanges() throws Exception {
|
public void testProcessChanges() throws Exception {
|
||||||
OntModel writeModel = ModelFactory.createOntologyModel();
|
OntModel writeModel = ModelFactory.createOntologyModel();
|
||||||
|
|
||||||
String testN3a =
|
|
||||||
"<http://example.com/motorcycles/honda/vtl1000> <http://example.com/engines/displacement> \"1000cm3\" ." +
|
|
||||||
"<http://example.com/motorcycles/honda/919> <http://example.com/engines/displacement> \"919cm3\" ." ;
|
|
||||||
String testN3b =
|
|
||||||
"<http://example.com/motorcycles/honda/919> <http://example.com/motorcycles/relatedTo> <http://exmaple.com/motorcycle/honda/599> ." ;
|
|
||||||
int totalStmts = 3;
|
int totalStmts = 3;
|
||||||
|
|
||||||
PrimitiveRdfEdit pre = new PrimitiveRdfEdit();
|
PrimitiveRdfEdit pre = new PrimitiveRdfEdit();
|
||||||
|
|
|
@ -3,11 +3,16 @@
|
||||||
<div>
|
<div>
|
||||||
<form method="POST">
|
<form method="POST">
|
||||||
|
|
||||||
additions:
|
Addition:<br />
|
||||||
<textarea name="additions"></textarea>
|
<textarea name="additions"></textarea>
|
||||||
|
|
||||||
retractions:
|
<br /><br />
|
||||||
|
|
||||||
|
Retraction:<br />
|
||||||
<textarea name="retractions"></textarea>
|
<textarea name="retractions"></textarea>
|
||||||
|
|
||||||
|
<br /><br />
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
N3<input type="radio" name="rdfFormat" value="N3"/>
|
N3<input type="radio" name="rdfFormat" value="N3"/>
|
||||||
TURTLE<input type="radio" name="rdfFormat" value="TURTLE"/>
|
TURTLE<input type="radio" name="rdfFormat" value="TURTLE"/>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue